案例子任務一、安裝配置keepalived
步驟1:使用nginx鏡像生成nginx-keep鏡像
1) 啟動nginx容器並進入
docker run -d --privileged nginx /usr/sbin/init
2)在nginx容器中使用yum方式安裝keepalived
yum -y install keepalived
安裝完成后,檢查!
3)保存容器為鏡像
docker commit 容器ID nginx-keep
步驟2:使用nginx-keep鏡像啟動nginx1和nginx2兩個容器
1)#docker network create --subnet=172.18.0.0/16 cluster //創建docker網絡
此網絡在之前的案例中已有說明,請自行查閱!
2)#docker network ls //查看宿主機上的docker網絡類型種類
3)啟動容器nginx1,設定地址為172.18.0.11
docker run -d --privileged --net cluster --ip 172.18.0.11 --name nginx1 nginx-keep /usr/sbin/init
4)啟動容器nginx2,設定地址為172.18.0.12
docker run -d --privileged --net cluster --ip 172.18.0.12 --name nginx2 nginx-keep /usr/sbin/init
5)配置容器nginx1的web服務,編輯首頁內容為“nginx1”,在宿主機訪問,nginx2亦是如此。
此時,兩個容器的nginx配置基本完成!
步驟3:在nginx1和nginx2兩個容器配置keepalived
注意:docker容器下配置高可用,需要在宿主機安裝keepalived服務並啟動,否則容器keepalived不能啟動
1) 在nginx1編輯 /etc/keepalived/keepalived.conf ,啟動keepalived服務
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 172.18.0.1 smtp_connect_timeout 30 router_id nginx1 #ID唯一標識,名稱不可重復 vrrp_skip_check_adv_addr #vrrp_strict #此行需要注釋掉,否則會導致宿主機無法訪問VIP,嚴格執行vrrp協議 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #主為master interface eth0 #所屬網絡 virtual_router_id 51 #虛擬ID,默認即可 priority 100 #權重 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.0.10 #vip地址 } }
完事后啟動。
2)在nginx2編輯 /etc/keepalived/keepalived.conf ,啟動keepalived服務
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 172.18.0.1 smtp_connect_timeout 30 router_id nginx1 #ID唯一標識,名稱不可重復 vrrp_skip_check_adv_addr #vrrp_strict #此行需要注釋掉,否則會導致宿主機無法訪問VIP,嚴格執行vrrp協議 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state BACKUP #從為backup interface eth0 #所屬網絡 virtual_router_id 51 #虛擬ID,默認即可 priority 90 #權重 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.0.10 #vip地址 } }
完事后重啟
3)在宿主機ping 172.18.0.10,使用arp -a 查看緩存
4)#curl http:// 172.18.0.10在宿主機訪問虛擬地址
5)#ifconfig eth0 down在nginx1上當掉網卡,在宿主機使用arp -a 查看緩存
可以觀察到MAC發生了變化!
6)#curl http:// 172.18.0.10在宿主機使用瀏覽器訪問虛擬地址
案例子任務二、配置keepalived 支持nginx高可用
步驟1:編寫 Nginx 狀態檢測腳本
1) 在nginx1上編寫 Nginx 狀態檢測腳本 /etc/keepalived/nginx_check.sh
#!/bin/bash if [ `ps -C nginx --no-header |wc -l` -eq 0 ] #用於查看當前nginx運行狀況 then systemctl start nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ] then kill keepalived fi fi
2)賦予/etc/keepalived/nginx_check.sh執行權限,並測試腳本
步驟2:配置keepalived 支持nginx高可用
1)在nginx1上編輯/etc/keepalived/keepalived.conf
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 172.18.0.1 smtp_connect_timeout 30 router_id nginx1 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #執行腳本 interval 2 weight -20 #降低nginx1的權重 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nginx #執行 } virtual_ipaddress { 172.18.0.10 } }
2)重新啟動keepalived,在主機使用瀏覽器訪問虛擬地址
3)在nginx1停止nginx服務,在主機使用瀏覽器訪問虛擬地址
由此,我們就實現了簡單的高可用配置!