docker技術快速實現前後端專案的叢集化⑦Haproxy的keevalived高可用方案和資料庫的xtrabackup方案
docker技術快速實現前後端專案的叢集化⑦Haproxy的keevalived高可用方案
整體規劃架構:
haproxy01 負載均衡 172.18.0.7 的 8888埠作為狀態監控埠,3306作為 pxc 叢集反向代理的埠,上面運行了 keepalived 虛擬ip為 172.18.0.100,可以保證高可用
haproxy02 負載均衡 172.18.0.8 的 8888埠作為狀態監控埠,3306作為 pxc 叢集反向代理的埠,上面運行了 keepalived 虛擬ip為 172.18.0.100,如果master掛了,漂移過來,可以保證高可用
宿主機 10.11.0.218 上面執行的 keepalived 是和容器的 keepalived(172.30.0.100) 通訊
172.18.0.100 的 8888 埠 和 宿主機keepalived虛擬出的 10.11.0.218 的 8888 埠對映
172.18.0.100 的 3306 埠 和 宿主機 keepalived虛擬出的 10.11.0.218 的 3336 埠對映(3306已經分配給了之前的docker)
訪問宿主機 10.11.0.218 8888埠就是對映到了容器的haproxy監控端
Keepvlived安裝在ubuntu容器中
Ubuntu中給apt-get設定代理
進入docker-haproxy服務
docker exec -it h1 /bin/bash
編輯檔案: /etc/apt/apt.conf
在您的apt.conf檔案中加入下面這行(根據你的實際情況替換yourproxyaddress和proxyport)。
Acquire::http::Proxy "http://yourproxyaddress:proxyport";
Acquire::https::proxy "http://yourproxyaddress:proxyport";
Acquire::http::Proxy "http://10.11.0.148:808";
Acquire::https::proxy "http://10.11.0.148:808";
設定apt-get的代理
cd /etc/apt
echo 'Acquire::http::Proxy "http://10.11.0.148:808";' >> apt.conf
echo 'Acquire::https::proxy "http://10.11.0.148:808";' >> apt.conf
或者
cd /etc/apt/apt.conf.d
echo 'Acquire::http::Proxy "http://10.11.0.148:808";' >> proxy.conf
echo 'Acquire::https::proxy "http://10.11.0.148:808";' >> proxy.conf
# 系統升級,安裝vim編輯器
# apt-get update
root@f9ee51b26ac0:/etc/apt/apt.conf.d# apt-get install vim
# 安裝keepalived和ping命令
apt-get install keepalived
apt-get install net-tools
apt-get install iputils-ping
keepalived搭建:
keepalived的實現是要在docker服務內建立,最後宿主機中也要建立實現docker內外的連線;
docker服務內建立,我們需要進入到該服務並安裝keepalived
# 新建並寫入一個keepalived的配置檔案
vim /etc/keepalived/keepalived.conf
#取名為K1,可自定義
vrrp_instance VI_1 { #定義節點屬性 state MASTER #定義虛擬網絡卡 interface eth0 #定義組vriid virtual_router_id 100 #定義權重 priority 100 #定義心跳檢測時間1秒 advert_int 1 #定義組使用者密碼 authentication { auth_type PASS auth_pass 123456 } #定義docker內ip地址,必須要在和haproxy同一個網段 virtual_ipaddress { 172.18.0.100 } }
如果配置檔案資訊都是正確的,通過ip a命令會顯示如當前docker服務有的網絡卡
Ping這個虛擬ip和宿主機網路是通的
最後,再新建一個haproxy再新增slave的keepalive,加入到master中,即完成負載均衡叢集的搭建。
新建第二個haproxy容器的配置檔案和第一個容器是一樣的,需要注意的地方是,在docker run新建容器的時候,由於4001,4002埠和ip都被佔用了,所以在run的時候要指定未使用的新埠和ip,比如4003,4004埠等等;
第二個keepalived的配置檔案和第一個配置檔案完全一樣,如果想要分配不同的權重比列,只需要更改權重引數就可以了。
# 啟動第二個haproxy取名為 h2
# docker run -it -d -p 4003:8888 -p 4004:3306 -v /data/haproxy02:/usr/local/etc/haproxy --name h2 --privileged --net=net1 --ip 172.18.0.8 haproxy
# docker exec -it h2 /bin/bash apt-get update apt-get install vim # apt-get install keepalived apt-get install net-tools apt-get install iputils-ping # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 100 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.18.0.100 } } # service keepalived start
最後,本地宿主機安裝keepalived進行外網路由:
宿主機操作:
安裝keepalived
yum install -y keepalived
安裝完後配置檔案本省有自帶的在,/etc/keepalived資料夾中,通過ftp替換掉這個配置檔案
宿主機Kepalived配置檔案資訊:
# 進入容器h2,修改keepalived配置
[root@server01 keepalived]# cat /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { state MASTER #這裡是宿主機的網絡卡,可以通過ip a檢視當前自己電腦上用的網絡卡名是哪個 interface eth0 #定義組vrid virtual_router_id 100 #定義權重 priority 100 #定義心跳檢測時間3秒 advert_int 3 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { #這裡是指定的一個宿主機上的虛擬ip,一定要和宿主機網絡卡在同一個網段,我的宿主機網絡卡ip是 10.11.0.218 ,所以指定虛擬ip是給的 218 10.11.0.218 } } #接受監聽資料來源的埠,網頁入口使用 virtual_server 10.11.0.218 8888 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP #把接受到的資料轉發給docker服務的網段及埠,由於是發給docker服務,所以和docker服務資料要一致 real_server 172.18.0.100 8888 { weight 1 } } #接受資料庫資料埠,宿主機資料庫埠是3306,所以這裡也要和宿主機資料接受埠一致 virtual_server 10.11.0.218 3336 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP #同理轉發資料庫給服務的埠和ip要求和docker服務中的資料在一個網段 real_server 172.18.0.100 3306 { weight 1 } }
配置完後,通過命令service keepalived start啟動宿主機的KP,通過ip a檢視網絡卡中是否出現定義的10.11.0.218 這個 IP地址,如果沒有出現大多數是配置檔案不正確。
通過ping 10.11.0.218 ip地址,發現能夠ping通
切換到windows上,進入cmd ping宿主機90ip地址發現能ping通,通過瀏覽器輸入
到此實現了外網訪問的負載均衡叢集搭建。
在此如果cmd能ping通90ip 而網頁無法進入監聽介面,問題出現在防火牆上,centos7預設防火牆是沒有開啟開啟vrrp 協議,而keepalived用的是vrrp協議,所以要麼讓防火強開通vrrp協議,命令:
執行命令1
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface em1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# 還需要對8888埠和3336埠放行
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=3336/tcp --permanent
firewall-cmd --reload
或者直接關閉防火牆(實際需要關閉防火牆,不知道是否是因為我這裡的環境原有)
systemctl stop firewalld.service
以上防火牆命令只針對於centos7的firewalld,其他防火牆或者linux版本可以自行百度讓vrrp協議能夠使用即能讓網頁進入到監聽介面
資料庫的備份
使用xtrabackup在容器中備份資料
過程:刪除之前的一個pxc節點,然後重新啟動這個容器,並且對映一個backup目錄到宿主機,因為之前啟動時是對映到宿主機的v1刪除容器node01不會刪除裡面的資料
還原:
只能執行冷還原,沒有熱還原,因為正在生產的資料庫會產生資料與還原的資料有衝突
Pxc叢集的冷還原比較麻煩,步驟如下:
- 停用並刪除老的pxc叢集和所在的卷
- 啟動新的叢集節點node1
- 在node1中還原備份的資料
- 然後依賴node1重新部署新的pxc叢集