gitlab高可用模式

高可用模式

企業版html

技術分享圖片

社區版git

技術分享圖片

咱們這裏說一下成本比較低的主備模式,它主要依賴的是DRBD方式進行數據同步,須要2臺ALL IN ONE的GitLab服務器,也就是經過上面安裝方式把全部組件都安裝在一塊兒的2臺機器。segmentfault

什麼是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節點上。網絡

流程以下:app

  • 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

技術分享圖片

修改配置文件

下面是主配置文件ide

技術分享圖片

/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.htmlhttps://docs.linbit.com/docs/users-guide-8.4/#s-distro-packages https://www.cnblogs.com/wsl222000/p/5777382.htmlhttps://segmentfault.com/q/1010000010290689https://blog.csdn.net/tjiyu/article/details/52723125 https://blog.csdn.net/yanggd1987/article/details/50504599 http://blog.51cto.com/freeloda/1275384

相關文章
相關標籤/搜索