版本管理工具Git(三)Gitlab高可用

昀溪發表於2018-08-12

高可用模式

企業版

社群版

我們這裡說一下成本比較低的主備模式,它主要依賴的是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

相關文章