1. 程式人生 > >使用docker搭建高併發網站架構實踐6--Keepalived+Nginx實現熱備份

使用docker搭建高併發網站架構實踐6--Keepalived+Nginx實現熱備份

Keepalived+Nginx實現熱備份

思路說明:

1. 利用linux映象容器,在其中安裝keepalived和nginx, 製作新映象支援熱備份,這樣便於直接使用,但在linux映象中安裝keepalived無法實現虛擬IP,也可能是網絡卡等設定不對。

2. 在linux主機內,啟動keepalived容器和nginx容器,實現熱備份。實現難點:如何利用keepalived容器來監測nginx容器的執行狀態這涉及到容器與容器,容器與主機間的通訊問題,嘗試過容器連結等方式,沒有實現。Docker hub上有alterway/keepalived/,應該可以實現這一功能,連結如下:

https://hub.docker.com/r/alterway/keepalived/

3. 建立兩個linux主機,在兩個linux主機內分別安裝keepalived軟體和啟動nginx容器,這樣比較便於實現熱備份,和keepalived監測nginx的執行狀態。這裡採用這種方式實現熱備份。

整體結構說明:

如上所示:建立兩個主機iyangcong-master, iyangcong-backup ,ip分別為10.104.15.62,10.104.12.170。在master上安裝keepalived-master,啟動nginx-master, 同樣在backup上安裝keepalived-backup和啟動nginx-backup。通過keepalived的虛擬IP,把兩主機的IP君化為VIP10.104.1.1。這樣便實現了熱備份。

首先主機佔據VIP,由keepalived-master    監測nginx-master的執行狀態,若發現nginx-master出現異常,則嘗試重啟nginx-master,若重啟失敗,則關閉keepalived-master;此時VIP轉移到iyangcong-backup上面,由keepalived-backup啟動nginx-backup並監測其執行狀態,從而實現了VIP的“飄移”。

iyangcong   10.104.15.62   master

iyangcong2  10.104.12.170  backup

實現步驟:

  1. 在iyangcong(10.104.15.62)master主機上,搭建docker私服,實現映象的共享,便於實現已經擁有的映象從master轉移到backup(10.104.12.170)上。
  2. 在master安裝keepalived-master和啟動nginx-master容器
  3. 在backup安裝keepalived-backup和啟動nginx-backup容器
  4. 測試VIP的漂移功能

具體細節:

  1. master主機搭建docker私服。

docker search registry

docker pull registry

啟動registry

dcker run –d – name iyangcong-registry

–p 5000:5000 –v /opt/data/registry:/mp/registry registry

docker logs iyangcong-registry檢視啟動日誌

給master已有nginx映象重新命名:

Docker tag nginx 10.104.15.62:5000/nginx

將映象推送到私服:

Docker push 10.104.15.62:5000/nginx

 

因為Docker從1.3.X之後,與docker registry互動預設使用的是https,然而此處搭建的私有倉庫只提供http服務,所以當與私有倉庫互動時就會報上面的錯誤。為了解決這個問題需要在啟動docker server時增加啟動引數為預設使用http訪問。修改docker啟動配置檔案Ubuntu下配置檔案地址為:/etc/init/docker.conf,在其中增加–insecure-registry 10.104.15.62:5000如下所示:

$ sudo vi /etc/init/docker.conf

修改完之後,重啟Docker服務。

$ sudo restart docker

Systemctl restart docker

 

 

推送成功。

同樣在backup上修改配置檔案,重啟docker

在backup主機上拉取nginx私服映象

Docker pull 10.104.15.62:5000/nginx

這樣backup主機上有了master的映象。

  1. master安裝keepalived-master和啟動nginx-master
    1. 安裝keepalived

關於keepalived的版本,在這裡安裝成功的1.1.19,其餘版本遇見了各種問題。

具體可參考連結:

http://www.bubuko.com/infodetail-265205.html

http://www.keepalived.org/documentation.html

apt-get install libssl-dev

apt-get install openssl

apt-get install libpopt-dev 

apt-get install gcc

apt-get install daemon

tar –zxvf keepalived-1.1.19.tar.gz

cd keepalived-1.1.19

./configure –prefix=/usr/local/keepalived

 

make

make install

mkdir /etc/sysconfig

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/sbin/keepalived /sbin

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf /etc/keepalived/

Mkdir –p /etc/rc.d/init.d

cp /usr/share/initramfs-tools/scripts/functions /etc/rc.d/init.d/

vi /etc/init.d/keepalived +23

daemon keepalived start

Mkdir /var/lock/subsys

Service keepalived start

Vi /etc/rc.local

Mkdir /var/lock/subsys

Service keepalived start

/etc/keepalived/keepalived.conf    keepalived-master核心配置檔案:

編寫nginx監測指令碼;

/data/chk_nginx.sh

cmod 755 /data/chk_nginx.sh

sh/data/chk_nginx.sh

    1. 啟動nginx-master容器

   /data/index.html   nginx-master!!!

   Docker run –p 180:80 –v /data/index.html:/usr/share/nginx/html/index.html

   --name nginx-master –d nginx.

   啟動keepalived

   Cd /etc/init.d/

   Service keepalived start

Keepalived啟動成功:

Nginx-master啟動成功:

VIP繫結成功:

關閉nginx-master,可知nginx-master自動啟動(keepalived監測指令碼chk_nginx.sh實現)

訪問VIP成功

 

  1. backup安裝keepalived-backupnginx-backup

安裝keepalived步驟同理:keepalived-backup核心配置檔案:

Keepalived-backup監測指令碼:

現在backup並沒有VIP

 

  1. 測試VIP的轉移功能

master的ip配置情況:

4.1關閉master的nginx-master,可知nginx又自動重啟

4.2關閉master的keepalived,可知VIP轉到bakcup主機上,

 

並且,nginx-backup已經自動啟動

 

4.3現在master主機恢復keepalived,

可知若主機keepalived恢復正常,則VIP又迴歸到master主機上,並且master主機的nginx-master自動重啟。Backup主機失去VIP繫結功能。

總結:

1. alterway/keepalived容器可以實現宿主機的VIP,但是來監測其他容器的執行狀態沒有實現,可以繼續學習一下,應該能夠實現這一功能。https://hub.docker.com/r/alterway/keepalived/

2. 容器與容器,容器與主機之間的通訊,容器連結等問題。

3. keepalived.conf配置檔案的使用

4. 網絡卡,路由,IP配置等問題。