高可用模式
企業版
社區版
我們這里說一下成本比較低的主備模式,它主要依賴的是DRBD方式進行數據同步,需要2台ALL IN ONE的GitLab服務器,也就是通過上面安裝方式把所有組件都安裝在一起的2台機器。
什么是DRBD
它是分布式復制塊設備,軟件實現的無需共享可以在服務器之間鏡像塊設備的存儲復制解決方案。
左側為A節點,右側為B節點
DRBD運行在內核里,它是一個內核模塊。Linux2.6.33開始已經整合進內核。上圖A為活動節點,B為被動節點。A收到數據發往內核的數據通路,DRBD在數據通路中注冊鈎子檢查數據,當發現接收到的數據是發往自己管理的存儲位置時,就復制一份,一份存儲到本地的DRBD存儲設備上,一份就發給TCP/IP協議棧,通過網卡傳輸到B節點的TCP/IP協議棧,B節點運行的DRBD模塊同樣在數據通路上堅持,發現有數據過來就存儲到DRBD對應的位置上。如果A節點宕機,B節點上線,B節點接收到數據存儲到本地,當A節點恢復以后在把變動數據同步到A節點上。
流程如下:
- SERVICE將數據寫入 FIEL SYSEM->BUFFER CACHE->DRDB
- DRDB兵分兩路一路通過磁盤DISK DRIVER寫入磁盤
- 另外一路通過TCP/IP將數據通過網卡發送到對端DRBD節點
工作模式:
- 同步模式:當寫入A服務器和B服務器成功后才返回。這是DRBD協議的C模式。生產環境中該模式最常用。
- 異步模式:寫入A服務器后返回,還有可能是寫入本地服務器和遠端服務器的緩存成功后返回,這屬於DRBD的A、B級別。
DRBD建立在底層設備之上,對於用戶來說一個DRBD設備就像一塊物理磁盤。它支持磁盤、軟RAID、LVM等其他塊設備。
部署
# 添加源 # CentOS 6 rpm -ivh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm # CentOS 7 rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # 安裝 yum -y install drbd84-utils kmod-drbd84 # 安裝后重啟 reboot
修改配置文件
下面是主配置文件
/etc/drbd.conf是主配置文件,但是它里面引用了2個,所以真正需要配置的是在它包含的配置文件中進行配置。
/etc/drbd.d/global_common.conf包含global和common這兩部分DRBD配置信息。而*.res文件而資源文件。
/etc/drbd.d/global_common.conf配置文件說明
/usr/share/doc/drbd84-utils-9.3.1/drbd.conf.example這是一個模板文件。
默認這個配置文件里面沒有配置什么具體內容
我這里就配置了幾項,主要就是協議。其他其實都不用配置都是默認值。
*.res資源文件說明
默認沒有這個文件,手動建立一個,以.res結尾
資源是一個復制的數據集,它包括Resource name也就是資源名稱、
Volumes也就是卷在一個資源集合里面可以有多個卷復制的使用共用一個復制流;另外還會包含DRBD device,這是一個虛擬塊設備,在系統上表現是的/dev/XXX,這里可不是真實的設備,真是的設備都是/dev/sda|b之類的。如果是多個資源再會用到Volumes
我的資源文件
注意:網絡連接方面建議使用背靠背的直連方式這條鏈路主要用於復制數據,我這里實驗環境就共用一條鏈路。
如果你使用LVM如何找到塊設備?
如果你使用普通分區那就是/dev/sda|b[NUMBER]這種形式。
建立磁盤元數據和啟用資源
保障你使用的塊設備是空的否則會初始化失敗。兩個節點都要這樣做初始化。
啟用資源,反之就是 drbdadm down 資源名稱
它這里知道自己是Secondary但是不知道對方,是因為防火牆導致,把兩邊防火牆關閉就好了,當然你也可以添加測錄。
兩台都是這個狀態表示正常
啟動服務
這時候我們之前沒有的那個/dev/drbd0就出現了
設置主節點並創建文件系統
這一步只能在你確定是主節點的節點上執行,不需要兩個節點都執行。設置完成后再次查看狀態。
文件系統只能掛載到主節點上,也只能在設置了主節點后才能對這個/dev/drbd0這個設備格式化和掛載。
再次查看同步已經完成
大家肯定覺得我之前安裝gitlab的時候設置倉庫路徑就是/data,沒錯,我做HA之前把gitlab服務停止掉,然后通過cp –rp命令吧git-data目錄都拷貝到其他地方,然后才做的其他操作,當HA完成后使用相同的命令拷貝回來就行。
主從切換
監控工具
drbd-overview 檢查角色以及同步狀態
drbdadm status RESOURCE_NAME
drbdsetup status gitdatadrbd --verbose –statistics 詳細信息
部署遇到的錯誤
1. not defined in your config (for this host).
這是因為配置文件里定義的和主機實際的名稱不符。修改/etc/hostname文件。
2. open(/dev/mapper/gitdata-lv_gitdata) failed: Device or resource busy
這里是因為我的那個LVM卷掛載了,需要先卸載
3. ‘drbdmeta 0 v08 terminated with exit code 40
說明該設備數據不為0
參考文檔
https://docs.gitlab.com/omnibus/roles/README.html
https://docs.gitlab.com/ce/administration/high_availability/README.html
https://docs.linbit.com/docs/users-guide-8.4/#s-distro-packages
https://www.cnblogs.com/wsl222000/p/5777382.html
https://segmentfault.com/q/1010000010290689
https://blog.csdn.net/tjiyu/article/details/52723125
https://blog.csdn.net/yanggd1987/article/details/50504599
http://blog.51cto.com/freeloda/1275384