使用docker搭建高併發網站架構實踐6--Keepalived+Nginx實現熱備份
Keepalived+Nginx實現熱備份
思路說明:
1. 利用linux映象容器,在其中安裝keepalived和nginx, 製作新映象支援熱備份,這樣便於直接使用,但在linux映象中安裝keepalived無法實現虛擬IP,也可能是網絡卡等設定不對。
2. 在linux主機內,啟動keepalived容器和nginx容器,實現熱備份。實現難點:如何利用keepalived容器來監測nginx容器的執行狀態,這涉及到容器與容器,容器與主機間的通訊問題,嘗試過容器連結等方式,沒有實現。Docker hub上有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
實現步驟:
- 在iyangcong(10.104.15.62)master主機上,搭建docker私服,實現映象的共享,便於實現已經擁有的映象從master轉移到backup(10.104.12.170)上。
- 在master安裝keepalived-master和啟動nginx-master容器
- 在backup安裝keepalived-backup和啟動nginx-backup容器
- 測試VIP的漂移功能
具體細節:
- 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的映象。
- master安裝keepalived-master和啟動nginx-master
- 安裝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
-
- 啟動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成功
- backup安裝keepalived-backup和nginx-backup
安裝keepalived步驟同理:keepalived-backup核心配置檔案:
Keepalived-backup監測指令碼:
現在backup並沒有VIP
- 測試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配置等問題。