Linux系統通過keepalived配置nginx高可用(單播和多播配置)

先準備兩臺機器,用於測試,這裏使用 192.168.1.168192.168.1.146 兩臺機器測試。

默認你的nginx已經搭建好了,我這裏使用的是docker方式搭建的,只是一個簡單的模擬

 docker run -p 8123:80 \
 -dit \
 --name nginx-web \
 -v /opt/project/apps/nginx-web/nginx.conf:/etc/nginx/nginx.conf \
 -v /opt/project/apps/web/:/usr/share/nginx/html \
 --privileged=true \
 --restart=always nginx

 

先決條件

禁用SElinux、清除iptables規則、關閉防火牆。就算因某種原因不能清除iptables規則,那麼你需要增加一條規則放行多播

各個節點時間同步,啓用時間同步服務systemctl start chronyd

確保Keepalive使用的網卡開啓了多播

如果沒有開啓,可以使用該命令打開ip link set multicast on dev ens33,ens33是網卡名稱。

 

怎麼查看網卡和子網掩碼等信息,執行 ifconfig 命令

找到上面的ip 192.168.1.168 ,這個就是我們要找的網卡信息, netmask 是子網掩碼信息 esn192 是網卡信息。

 

多播配置

先在 192.168.1.168 主機上進行操作。

第一步,安裝keepalived

 yum install -y keepalived

第二步,配置keepalived

 # 進入keepalived.conf所在目錄:
 cd /etc/keepalived
 
 # 清除掉keepalived原有配置
 > keepalived.conf

第三步,複製下面的配置文件,根據需要修改相關配置。比如網卡名等

 global_defs {
     # 郵件通知配置,發生故障時候通知的人員
     notification_email {
         740610314@qq.com # 定義收件人
     }
     notification_email_from sns-lvs@gmail.com # 定義發件人
     smtp_server 192.168.1.114 # SMTP服務器地址
     smtp_connection_timeout 30
     router_id LVS_MASTER         # 設置lvs的id,在一個網絡應該是唯一的,一般不用改,也可以寫成每個主機自己的主機名
 }
 vrrp_instance VI_1 {
     state MASTER            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
     interface ens192            # 當前進行vrrp通訊的網絡接口卡(當前centos的網卡),不知道就用 ifconfig 查一下
     virtual_router_id 66        # 虛擬路由編號,主從要一致
     priority 100            # 優先級,數值越大,獲取處理請求的優先級越高
     advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
     authentication { # 通信認證機制,這裏是明文認證還有一種是加密認證
         auth_type PASS
         auth_pass 1111 #密鑰
     }
     virtual_ipaddress { # 設置虛擬VIP地址,一般就設置一個,在LVS中這個就是爲LVS主機設置VIP的,這樣你就不用自己手動設置了
         192.168.1.21        # 定義虛擬ip(VIP),可多設,每行一個
         # IP/掩碼 dev 配置在哪個網卡
         # 192.168.200.16/24 dev eth1
     }
 }
 # 定義LVS集羣服務,可以是IP+PORT;也可以是fwmark 數字,也就是防火牆規則
 virtual_server 192.168.1.21 8123 {
     delay_loop 6             # 設置健康檢查時間,單位爲秒
     lb_algo wrr            # 設置負載調度的算法爲wrr
     lb_kind DR            # 設置lvs實現負載的機制,有NAT、TUN、DR三個模式
     nat_mask 255.255.255.0 # 子網掩碼,這個掩碼是VIP的掩碼
     persistence_timeout 0        # 同一IP 0秒內的請求都發到同個real server
     protocol TCP # 定義協議
     
     # 後端應用服務器 IP PORT
     real_server 192.168.1.168 8123 { # 指定real server1的ip地址
         weight 3        # 配置節點權值,數值越大權重越高
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
 
     # 後端應用服務器 IP PORT
     real_server 192.168.1.146 8123 {
         weight 3
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
 }  

第四步,在另外一臺 192.168.1.146 上進行操作,

先安裝 keepalived ,然後也是進入到配置,修改配置文件。

 global_defs {
     notification_email {
         740610314@qq.com
     }
     notification_email_from sns-lvs@gmail.com
     smtp_server 192.168.1.112
     smtp_connection_timeout 30
     router_id LVS_BACKUP         # 設置lvs的id,在一個網絡應該是唯一的
 }
 vrrp_instance VI_1 {
     state BACKUP            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
     interface eno16780032            # 當前進行vrrp通訊的網絡接口卡(當前進行vrrp通訊的網絡接口卡)
     virtual_router_id 66        # 虛擬路由編號,主從要一致
     priority 99            # 優先級,數值越大,獲取處理請求的優先級越高
     advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.1.21        # 定義虛擬ip(VIP),可多設,每行一個
     }
 }
 # 定義對外提供的LVS的VIP以及port
 virtual_server 192.168.1.21 8123 {
     delay_loop 6             # 設置健康檢查時間,單位爲秒
     lb_algo wrr            # 設置負載調度的算法爲wrr
     lb_kind DR            # 設置lvs實現負載的機制,有NAT、TUN、DR三個模式
     nat_mask 255.255.255.0
     persistence_timeout 0        # 同一IP 0秒內的請求都發到同個real server
     protocol TCP
     real_server 192.168.1.168 8123 { # 指定real server1的ip地址
         weight 3        # 配置節點權值,數值越大權重越高
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
     real_server 192.168.1.146 8123 {
         weight 3
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
         }
     }
 }    

第五步,主從都啓動服務service keepalived start

 

單播配置

如果跨網段了,很可能無法訪問到這個IP,比如我的網段是23,這個時候就需要關閉多播,因爲數據未返回。一般情況下,上面的配置就已經支持nginx的高可用了。

192.168.1.168 使用如下配置:

 global_defs {
     # 郵件通知配置,發生故障時候通知的人員
     notification_email {
         740610314@qq.com # 定義收件人
     }
     notification_email_from sns-lvs@gmail.com # 定義發件人
     smtp_server 192.168.1.114 # SMTP服務器地址
     smtp_connection_timeout 30
     router_id LVS_MASTER         # 設置lvs的id,在一個網絡應該是唯一的,一般不用改,也可以寫成每個主機自己的主機名
 }
 vrrp_instance VI_1 {
     state MASTER            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
     interface ens192            # 當前進行vrrp通訊的網絡接口卡(當前centos的網卡),不知道就用 ifconfig 查一下
     virtual_router_id 66        # 虛擬路由編號,主從要一致
     priority 100            # 優先級,數值越大,獲取處理請求的優先級越高
     advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
     authentication { # 通信認證機制,這裏是明文認證還有一種是加密認證
         auth_type PASS
         auth_pass 1111 #密鑰
     }
     unicast_src_ip 192.168.1.168   #單播的源地址,寫本機上的ip即可
     unicast_peer {
         192.168.1.146   #如果有多個主機組成集羣,把其它主機ip都寫上
     }
     virtual_ipaddress { # 設置虛擬VIP地址,一般就設置一個,在LVS中這個就是爲LVS主機設置VIP的,這樣你就不用自己手動設置了
         192.168.1.21        # 定義虛擬ip(VIP),可多設,每行一個
         # IP/掩碼 dev 配置在哪個網卡
         # 192.168.200.16/24 dev eth1
     }
 }

192.168.1.146 上將配置修改爲如下:

 global_defs {
     notification_email {
         740610314@qq.com
     }
     notification_email_from sns-lvs@gmail.com
     smtp_server 192.168.1.112
     smtp_connection_timeout 30
     router_id LVS_BACKUP         # 設置lvs的id,在一個網絡應該是唯一的
 }
 vrrp_instance VI_1 {
     state BACKUP            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
     interface eno16780032            # 當前進行vrrp通訊的網絡接口卡(當前進行vrrp通訊的網絡接口卡)
     virtual_router_id 66        # 虛擬路由編號,主從要一致
     priority 99            # 優先級,數值越大,獲取處理請求的優先級越高
     advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     unicast_src_ip 192.168.1.146   #單播的源地址,寫本機上的ip即可
     unicast_peer {    #注意:花括號前有空格
         192.168.1.163   #如果有多個主機組成集羣,把其它主機ip都寫上
     }
     virtual_ipaddress {
         192.168.1.21        # 定義虛擬ip(VIP),可多設,每行一個
     }
 } 

 

常用命令

 // 啓動
 service keepalived start (建議用這個)
 systemctl start keepalived
 
 // 停止
 service keepalived stop (備用,有時候關閉不了)
 systemctl stop keepalived (建議用這個)
 
 // 重啓
 systemctl restart keepalived
 
 // 查看日誌
 tail -f /var/log/messages

至此,nginx的高可用配置完成,注意,當測試的時候,關閉了 keepalived 也可能會有一會負載還生效,但過一會就不行了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章