docker簡易實現資料庫的雙機熱備
docker簡易實現資料庫的雙機熱備
寫在前面:為什麼要採用雙機熱備?雖然我們在資料庫進行了負載均衡,但單節點Haproxy不具備高可用,一旦Haroxy節點故障,應用程式將無法訪問,故必須要有冗餘設計,使用keepalived進行雙機熱備。注:在閱讀此文之前,最好請先閱讀《docker簡易搭建MySQL叢集的負載均衡》https://blog.csdn.net/belonghuang157405/article/details/80883342
最終想實現的架構效果圖:
第一步 Haproxy容器安裝Keepalived
Keepalived必須要在Haproxy所在的容器之內。故首先進入Haproxy容器內,執行如下命令:
docker exec -it haproxy1 bash
在進入haproxy1容器後,執行如下命令,安裝keepalived:
apt-get update
apt-get install keepalived
*注:由於Haproxy映象是基於Ubuntu創建出來的,故使用apt-get 而不是yum。
如果讀者在執行apt-get更新較慢,或者發現安裝keepalived出現‘Unable to locate package’錯誤,是由於更新的資料在國外,可百度apt-get加速方式,也可參考附錄提供的方式。*
第二步 編寫Keepalived配置檔案
Keepalived的配置檔案位置: /etc/keepalived/keepalived.conf
apt-get install vim
vim /etc/keepalived/keepalived.conf
將如下檔案內容,複製進檔案中:
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.18.0.201 } }
*注:VI_1 | 名稱
state MASTER | keepalived的身份(MASTERZ主伺服器,搶佔虛擬機器ip。BACKUP備份伺服器,不會搶佔虛擬機器ip)。
interface eth0 | 網絡卡裝置
virtual_router_id 51 | 虛擬路由標識,MASTER和BACKUP的虛擬路由標識必須一致。標識可以是0-255
priority 100 | 權重。MASTER權重要高於BACKUP 數字越大優選級越高
advert_int 1 | 心跳檢測。MASTER與BACKUP節點間同步檢查的時間間隔,單位為秒。主備之間必須一致
authentication | 主從伺服器驗證方式。主備必須使用相同的密碼才能正常通訊
virtual_ipaddress | 虛擬ip地址,可以設定多個虛擬ip地址,每行一個*
第三步 啟動keepalived
在keepalived容器中,執行如下命令:
service keepalived start
第四步 驗證是否成功啟動keepalived
在宿主機中,ping keepalived設定的虛擬ip(virtual_ipaddress ),執行如下命令:
ping 172.18.0.201
檢查是否能ping通。結果如下:
[[email protected] ~]# ping 172.18.0.201
PING 172.18.0.201 (172.18.0.201) 56(84) bytes of data.
64 bytes from 172.18.0.201: icmp_seq=1 ttl=64 time=0.110 ms
64 bytes from 172.18.0.201: icmp_seq=2 ttl=64 time=0.140 ms
64 bytes from 172.18.0.201: icmp_seq=3 ttl=64 time=0.080 ms
第五步 建立haproxy2容器,並配置與haproxy1相同的環境
建立與haproxy1一樣環境的haproxy2容器,安裝keepalived實現爭搶虛擬ip,實現雙機熱備。 執行如下命令:
1.建立第2個Haproxy負載均衡伺服器haproxy2
docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name haproxy2 --privileged --net=net1 haproxy
2.進入haproxy2容器中,並啟動Haproxy
docker exec -it harpoxy2 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
3.在haproxy2容器中,安裝keepalived並編寫該配置檔案
#更新軟體包 apt-get update #安裝VIM apt-get install vim #安裝Keepalived apt-get install keepalived #編輯Keepalived配置檔案 vim /etc/keepalived/keepalived.conf配置檔案內容如下:
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.18.0.201 } }###4.啟動keepalived,並測試驗證
#啟動Keepalived service keepalived start #宿主機停止haproxy1容器 docker pause haproxy1 #宿主機執行ping命令 ping 172.18.0.201 #宿主機恢復haproxy1容器 docker unpause haproxy1
第六步 在宿主機上安裝keepalived,實現雙機熱備
在宿主機安裝keepalived,並配置該配置檔案。
1.在centos視窗執行如下命令,安裝keepalived:
yum -y install keepalived
2.編寫keepalived.conf配置檔案,執行如下命令:
vi /etc/keepalived/keepalived.conf
刪除原先內容,將內容如下貼上進去:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.144
}
}
virtual_server 192.168.9.144 8888 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 172.18.0.201 8888 {
weight 1
}
}
virtual_server 192.168.9.144 3306 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 172.18.0.201 3306 {
weight 1
}
}
注:內容中192.168.9.144 該ip是宿主虛擬ip,讀者可自定義請自行更改。 172.18.0.201 是容器keepalived設定爭搶的虛擬ip,8888是監控介面埠 3306是資料庫埠
3.啟動keepalived,執行如下命令:
service keepalived start
5.驗證keepalived是否成功。
1.資料庫驗證
2.haproxy監控介面驗證
注:宿主機定義的虛擬ip為192.168.9.144,讀者自行更改
附錄:
1.Ubuntu將apt-get修改成163映象的源
第一步 修改sources.list配置檔案
vim /etc/apt/sources.list
注:如果沒有vim,請預先安裝vim,執行如下命令:
apt-get install vim
刪除sources.list檔案內容,將下方內容貼上進去,sources.list內容如下:
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
貼上完後,儲存退出。
第二步 apt清除原先的配置並更新,執行如下命令:
apt-get clean
apt-get update
2.當Ubuntu容器apt-get update執行後 報出如下錯誤:
0% [Connecting to deb.debian.org] [Connecting to security.debian.org]
0% [Connecting to deb.debian.org] [Connecting to security.debian.org]
Err:1 http://security.debian.org/debian-security stretch/updates InRelease
Temporary failure resolving 'security.debian.org'
Err:2 http://deb.debian.org/debian stretch InRelease
Temporary failure resolving 'deb.debian.org'
Err:3 http://deb.debian.org/debian stretch-updates InRelease
Temporary failure resolving 'deb.debian.org'
Reading package lists... Done
W: Failed to fetch http://deb.debian.org/debian/dists/stretch/InRelease Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/debian-security/dists/stretch/updates/InRelease Temporary failure resolving 'security.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/InRelease Temporary failure resolving 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.
請檢視自己的docker是否加入了映象加速。方法如下:
在宿主機 修改docker的damemon.json檔案,如果不存在請新建,將如下內容貼上儲存:
{
"registry-mirrors": ["https://vcmrfdsm.mirror.aliyuncs.com"]
}
儲存成功後,請重啟docker服務(在執行此命令前,請先儲存好資料庫資料),執行如下命令:
service docker restart
如果意外重啟了,發現node1,node2,node3,node4容器節點節無法重啟啟動,請將先刪除這四個容器,並刪除v1,v2,v3,v4四個docker卷。而後參考《docker簡易搭建MySQL叢集》重新建立這四個節點容器。