目錄多harbor例項共享後端儲存
安裝redis和mysql
匯入registry資料庫
配置harbor
目前有兩種主流的方案來解決這個問題:
harbor官方預設提供主從複製的方案來解決映象同步問題,通過複製的方式,我們可以實時將測試環境harbor倉庫的映象同步到生產環境harbor,類似於如下流程:
只要往一台registry上發布,映象就像「仙女散花」般地同步到多個registry中,高效可靠。
如果是地域分布較廣的集群,還可以採用層次型發布方式,如從集團總部同步到省公司,從省公司再同步到市公司:
然而單靠主從同步,仍然解決不了harbor主節點的單點問題。
所謂的雙主複製其實就是復用主從同步實現兩個harbor節點之間的雙向同步,來保證資料的一致性,然後在兩台harbor前端頂乙個負載均衡器將進來的請求分流到不同的例項中去,只要有乙個例項中有了新的映象,就是自動的同步複製到另外的的例項中去,這樣實現了負載均衡,也避免了單點故障,在一定程度上實現了harbor的高可用性:
這個方案有乙個問題就是有可能兩個harbor例項中的資料不一致。假設如果乙個例項a掛掉了,這個時候有新的映象進來,那麼新的映象就會在另外乙個例項b中,後面即使恢復了掛掉的a例項,harbor例項b也不會自動去同步映象,這樣只能手動的先關掉harbor例項b的複製策略,然後再開啟複製策略,才能讓例項b資料同步,讓兩個例項的資料一致。
另外,我還需要多吐槽一句,在實際生產使用中,主從複製十分的不靠譜。
所以這裡推薦使用下面要說的這種方案。
共享後端儲存算是一種比較標準的方案,就是多個harbor例項共享同乙個後端儲存,任何乙個例項持久化到儲存的映象,都可被其他例項中讀取。通過前置lb進來的請求,可以分流到不同的例項中去處理,這樣就實現了負載均衡,也避免了單點故障:
這個方案在實際生產環境中部署需要考慮三個問題:
共享儲存的選取,harbor的後端儲存目前支援aws s3、openstack swift, ceph等,在我們的實驗環境裡,就直接使用nfs
session在不同的例項上共享,這個現在其實已經不是問題了,在最新的harbor中,預設session會存放在redis中,我們只需要將redis獨立出來即可。可以通過redis sentinel或者redis cluster等方式來保證redis的可用性。在我們的實驗環境裡,仍然使用單台redis
harbor多例項資料庫問題,這個也只需要將harbor中的資料庫拆出來獨立部署即可。讓多例項共用乙個外部資料庫,資料庫的高可用也可以通過資料庫的高可用方案保證。
實驗環境:
iprole
192.168.198.133
harbor
192.168.198.135
harbor
192.168.198.136
redis、mysql、nfs
需要強調的是,我們的環境中,不包括負載均衡器的配置,請自行查閱負載均衡配置相關文件安裝nfs
# 安裝nfs
apt install nfs-kernel-server nfs-common
/data *(rw,no_root_squash)
chmod 777 -r /data
systemctl start nfs-server
這裡我們就直接通過docker安裝,docker-compose.yml檔案內容如下:
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
啟動:
docker-compose up -d
配置好了mysql以後,還需要往mysql資料庫中匯入harbor registry庫。在《企業級顯像管理系統》中,我們安裝了乙個單機版harbor,啟動了乙個mysql,裡面有乙個registry資料庫,直接匯出來,然後再匯入到新資料庫中:
# 匯出資料庫:
docker exec -it harbor_db /bin/bash
mysqldump -uroot -p --databases registry > registry.dump
# 在宿主機上將registry.dump複製出來
docker cp harbor_db:/registry.dump ./
# 將宿主機上的registry.dump複製到獨立的mysql容器中
docker cp ./registry.dump :/registry.dump
# 在獨立的mysql容器將將registry資料庫匯入
docker exec -it /bin/bash
mysql -uroot -p
mysql> source /registry.dump
在harbor節點上掛載nfs目錄:
mount -t nfs 192.168.198.136:/data /data
db_host = 192.168.198.136
db_password = 123456
db_port = 3306
db_user = root
redis_url = 192.168.198.136:6379
與單機版harbor相比,集群配置不再需要啟動mysql和redis,所以docker-compose.yml也需要作相應修改。事實上,在harbor的安裝目錄中,有個ha的目錄,裡面已經提供了我們需要的docker-compose.yml檔案,只需要複製出來即可。實際上,在這個目錄中,還提供了使用lvs作為負載均衡器時,keepalived的配置。
cp ha/docker-compose.yml
./prepare
./install.sh
在兩個harbor節點上完成安裝以後,我們可以通過繫結hosts到不同的節點來驗證兩個節點的負載均衡效果。 Zookeeper高可用集群配置
環境準備 安裝配置hadoop 指令碼準備 批分發 xcall.sh 和批同步 xsync.sh 停掉所有的hadoop程序 保證沒有任何程序在執行 stop all.sh 刪除所有日誌 xcall.sh rm rf soft hadoop logs 刪除所有本地檔案 xcall.sh rm rf ...
Keepalived 配置高可用集群
一 keepalived 簡介 1 keepalived 能實現高可用也能實現負載均衡,keepalived 是通過 vrrp 協議 virtual router redundancy protocol 來實現高可用的 2 keepalived 有三個模組,core 模組是核心模組,負責主程序的啟動...
Nginx配置高可用集群
1.普通的模式 nginx宕機,就都完蛋了!2.主從模式 高可用 乙個宕機了,還有另乙個可以繼續工作 3.準備工作 1 需要兩台伺服器 192.168.17.131 和 192.168.17.132 2 需要keepalived 在兩台伺服器上安裝nginx 3 需要虛擬ip 在兩台伺服器上安裝ke...