溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

harbor高可用集群配置

發(fā)布時(shí)間:2020-08-08 19:46:22 來(lái)源:ITPUB博客 閱讀:195 作者:yc98zp 欄目:建站服務(wù)器
arbor是由VMWare在Docker Registry的基礎(chǔ)之上進(jìn)行了二次封裝,加進(jìn)去了很多額外程序,而且提供了一個(gè)非常漂亮的web界面。

harbor高可用集群配置

說(shuō)明

在上一篇  《企業(yè)級(jí)安裝與配置Harbor鏡像管理系統(tǒng)》中,我們簡(jiǎn)要說(shuō)明了單機(jī)版本harbor的配置。然而這種單機(jī)部署顯然無(wú)法滿足在生產(chǎn)中需求,必須要保證應(yīng)用的高可用性。

目前有兩種主流的方案來(lái)解決這個(gè)問(wèn)題:

雙主復(fù)制

多harbor實(shí)例共享后端存儲(chǔ)

雙主復(fù)制
主從同步

harbor官方默認(rèn)提供主從復(fù)制的方案來(lái)解決鏡像同步問(wèn)題,通過(guò)復(fù)制的方式,我們可以實(shí)時(shí)將測(cè)試環(huán)境harbor倉(cāng)庫(kù)的鏡像同步到生產(chǎn)環(huán)境harbor,類(lèi)似于如下流程:

harbor高可用集群配置

在實(shí)際生產(chǎn)運(yùn)維的中,往往需要把鏡像發(fā)布到幾十或上百臺(tái)集群節(jié)點(diǎn)上。這時(shí),單個(gè)Registry已經(jīng)無(wú)法滿足大量節(jié)點(diǎn)的下載需求,因此要配置多個(gè)Registry實(shí)例做負(fù)載均衡。手工維護(hù)多個(gè)Registry實(shí)例上的鏡像,將是十分繁瑣的事情。Harbor可以支持一主多從的鏡像發(fā)布模式,可以解決大規(guī)模鏡像發(fā)布的難題:

harbor高可用集群配置

只要往一臺(tái)Registry上發(fā)布,鏡像就像“仙女散花”般地同步到多個(gè)Registry中,高效可靠。

如果是地域分布較廣的集群,還可以采用層次型發(fā)布方式,如從集團(tuán)總部同步到省公司,從省公司再同步到市公司:

harbor高可用集群配置

然而單靠主從同步,仍然解決不了harbor主節(jié)點(diǎn)的單點(diǎn)問(wèn)題。

雙主復(fù)制說(shuō)明

所謂的雙主復(fù)制其實(shí)就是復(fù)用主從同步實(shí)現(xiàn)兩個(gè)harbor節(jié)點(diǎn)之間的雙向同步,來(lái)保證數(shù)據(jù)的一致性,然后在兩臺(tái)harbor前端頂一個(gè)負(fù)載均衡器將進(jìn)來(lái)的請(qǐng)求分流到不同的實(shí)例中去,只要有一個(gè)實(shí)例中有了新的鏡像,就是自動(dòng)的同步復(fù)制到另外的的實(shí)例中去,這樣實(shí)現(xiàn)了負(fù)載均衡,也避免了單點(diǎn)故障,在一定程度上實(shí)現(xiàn)了Harbor的高可用性:

harbor高可用集群配置

這個(gè)方案有一個(gè)問(wèn)題就是有可能兩個(gè)Harbor實(shí)例中的數(shù)據(jù)不一致。假設(shè)如果一個(gè)實(shí)例A掛掉了,這個(gè)時(shí)候有新的鏡像進(jìn)來(lái),那么新的鏡像就會(huì)在另外一個(gè)實(shí)例B中,后面即使恢復(fù)了掛掉的A實(shí)例,Harbor實(shí)例B也不會(huì)自動(dòng)去同步鏡像,這樣只能手動(dòng)的先關(guān)掉Harbor實(shí)例B的復(fù)制策略,然后再開(kāi)啟復(fù)制策略,才能讓實(shí)例B數(shù)據(jù)同步,讓兩個(gè)實(shí)例的數(shù)據(jù)一致。

另外,我還需要多吐槽一句,在實(shí)際生產(chǎn)使用中,主從復(fù)制十分的不靠譜。

所以這里推薦使用下面要說(shuō)的這種方案。

多harbor實(shí)例共享后端存儲(chǔ)
方案說(shuō)明

共享后端存儲(chǔ)算是一種比較標(biāo)準(zhǔn)的方案,就是多個(gè)Harbor實(shí)例共享同一個(gè)后端存儲(chǔ),任何一個(gè)實(shí)例持久化到存儲(chǔ)的鏡像,都可被其他實(shí)例中讀取。通過(guò)前置LB進(jìn)來(lái)的請(qǐng)求,可以分流到不同的實(shí)例中去處理,這樣就實(shí)現(xiàn)了負(fù)載均衡,也避免了單點(diǎn)故障:

harbor高可用集群配置

這個(gè)方案在實(shí)際生產(chǎn)環(huán)境中部署需要考慮三個(gè)問(wèn)題:

共享存儲(chǔ)的選取,Harbor的后端存儲(chǔ)目前支持AWS S3、Openstack Swift, Ceph等,在我們的實(shí)驗(yàn)環(huán)境里,就直接使用nfs。

Session在不同的實(shí)例上共享,這個(gè)現(xiàn)在其實(shí)已經(jīng)不是問(wèn)題了,在最新的harbor中,默認(rèn)session會(huì)存放在redis中,我們只需要將redis獨(dú)立出來(lái)即可。可以通過(guò)redis sentinel或者redis cluster等方式來(lái)保證redis的可用性。在我們的實(shí)驗(yàn)環(huán)境里,仍然使用單臺(tái)redis。

Harbor多實(shí)例數(shù)據(jù)庫(kù)問(wèn)題,這個(gè)也只需要將harbor中的數(shù)據(jù)庫(kù)拆出來(lái)獨(dú)立部署即可。讓多實(shí)例共用一個(gè)外部數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的高可用也可以通過(guò)數(shù)據(jù)庫(kù)的高可用方案保證。

環(huán)境說(shuō)明
實(shí)驗(yàn)環(huán)境
ip	role
192.168.198.133	harbor
192.168.198.135	harbor
192.168.198.136	redis、mysql、nfs

需要強(qiáng)調(diào)的是,我們的環(huán)境中,不包括負(fù)載均衡器的配置,請(qǐng)自行查閱負(fù)載均衡配置相關(guān)文檔

配置說(shuō)明
安裝nfs
# 安裝nfs
apt install nfs-kernel-server nfs-common
# 編輯/etc/exports文件
/data	*(rw,no_root_squash)
chmod 777 -R /data
systemctl start nfs-server
安裝redis和mysql

這里我們就直接通過(guò)docker安裝,docker-compose.yml文件內(nèi)容如下:

version: '3'
services:
  mysql-server:
    hostname: mysql-server
    container_name: mysql-server
    image: mysql:5.7
    network_mode: host
    volumes:
      - /mysql57/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  redis:
    hostname: redis-server
    container_name: redis-server
    image: redis:3
    network_mode: host
啟動(dòng)
docker-compose up -d
導(dǎo)入registry數(shù)據(jù)庫(kù)

配置好了mysql以后,還需要往mysql數(shù)據(jù)庫(kù)中導(dǎo)入harbor registry庫(kù)。在《企業(yè)級(jí)安裝與配置Harbor鏡像管理系統(tǒng)》中,我們安裝了一個(gè)單機(jī)版harbor,啟動(dòng)了一個(gè)mysql,里面有一個(gè)registry數(shù)據(jù)庫(kù),直接導(dǎo)出來(lái),然后再導(dǎo)入到新數(shù)據(jù)庫(kù)中:

# 導(dǎo)出數(shù)據(jù)庫(kù):

docker exec -it harbor_db /bin/bash
mysqldump -uroot -p --databases registry > registry.dump

# 在宿主機(jī)上將registry.dump復(fù)制出來(lái)

docker cp  harbor_db:/registry.dump ./

# 將宿主機(jī)上的registry.dump復(fù)制到獨(dú)立的mysql容器中

docker cp ./registry.dump:/registry.dump

# 在獨(dú)立的mysql容器將將registry數(shù)據(jù)庫(kù)導(dǎo)入

docker exec -it/bin/bash
mysql -uroot -p
mysql> source /registry.dump
配置harbor
掛載nfs目錄

在harbor節(jié)點(diǎn)上掛載nfs目錄:

mount -t nfs 192.168.198.136:/data /data
修改harbor.cfg配置

在harbor節(jié)點(diǎn)上,下載好harbor的安裝包,生成好自簽名證書(shū),修改prepare文件,可直接參考  《企業(yè)級(jí)安裝與配置Harbor鏡像管理系統(tǒng)》,不同的是,harbor.cfg文件需要修改數(shù)據(jù)庫(kù)及redis配置如下:

db_host = 192.168.198.136
db_password = 123456
db_port = 3306
db_user = root
redis_url = 192.168.198.136:6379
修改docker-compose.yml配置

與單機(jī)版harbor相比,集群配置不再需要啟動(dòng)mysql和redis,所以docker-compose.yml也需要作相應(yīng)修改。事實(shí)上,在harbor的安裝目錄中,有個(gè)ha的目錄,里面已經(jīng)提供了我們需要的docker-compose.yml文件,只需要復(fù)制出來(lái)即可。實(shí)際上,在這個(gè)目錄中,還提供了使用lvs作為負(fù)載均衡器時(shí),keepalived的配置。

cp ha/docker-compose.yml
./prepare
./install.sh

在兩個(gè)harbor節(jié)點(diǎn)上完成安裝以后,我們可以通過(guò)綁定hosts到不同的節(jié)點(diǎn)來(lái)驗(yàn)證兩個(gè)節(jié)點(diǎn)的負(fù)載均衡效果。

原文來(lái)自:  https://www.linuxprobe.com/harbor-high-availability.html

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI