1. 程式人生 > >docker簡易實現資料庫的雙機熱備

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叢集》重新建立這四個節點容器。