harbor高可用集群配置

2022-06-25 23:57:14 字數 3403 閱讀 8282

目錄多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...