1. 程式人生 > 實用技巧 >docker技術快速實現前後端專案的叢集化⑦Haproxy的keevalived高可用方案和資料庫的xtrabackup方案

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通,通過瀏覽器輸入

http://10.11.0.218:8888/dbs

到此實現了外網訪問的負載均衡叢集搭建。

在此如果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叢集的冷還原比較麻煩,步驟如下:

  1. 停用並刪除老的pxc叢集和所在的卷
  2. 啟動新的叢集節點node1
  3. 在node1中還原備份的資料
  4. 然後依賴node1重新部署新的pxc叢集