Docker下配置KeepAlive支持nginx高可用


 

 

 

案例子任務一、安裝配置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服務,在主機使用瀏覽器訪問虛擬地址

 

 

 

 由此,我們就實現了簡單的高可用配置!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM