Centos7 下基於Nginx+Keepalived搭建高可用負載均衡(一.基於Keepalived搭建HA體系)

說明

本文只爲方便日後查閱,不對一些概念再做贅述,網上都有很多明確的解釋,也請大家先了解相關概念.

兩臺搭建HA的服務器是華爲雲上的ECS(不要忘記開通VPC,保證我們的服務器都處在一個內網環境),由於華爲雲每臺機器只能綁定一個私有的浮動IP(VIP),所以本次示例只能實現一主一備(Master-Backup).

環境:

Server1:172.16.124.130

Server2:172.16.124.131

       VIP:172.17.1.65

安裝Keepalived(兩臺服務器步驟相同,只有細微的配置差別)

創建etc下的keepalived目錄,編輯配置文件

yum -y install keepalived
mkdir /etc/keepalived
vi /etc/keepalived/keepalived.conf

masert配置文件內容如下:

[login01@nginx-masert conf.d]$ sudo cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from Keepalived@localhost
   smtp_server [email protected]
   smtp_connect_timeout 30
   router_id 172.16.124.130
}
#配置vrrp_script,主要用於健康檢查,以及檢查失敗後執行的動作。
vrrp_script chk_nginx {
#健康檢查腳本,當腳本返回值不爲0時認爲失敗
    script "/etc/keepalived/ck_ng.sh"
#檢查頻率,以下配置每2秒檢查1次
    interval 2
#當檢查失敗後,將vrrp_instance的priority減小5
    weight -5
#連續監測失敗3次,才認爲真的健康檢查失敗。並調整優先級
    fall 3
#連續監測2次成功,就認爲成功。但不調整優先級
    rise 2
}


#定義對外提供服務的VIP vrrp_instance配置
vrrp_instance VI_1 {
#指定vrrp_instance的初始狀態,是MASTER還是BackUP主要還是看優先級。
    state MASTER
#指定vrrp_instance綁定的網卡,最終會通過指定的網卡宣告VIP
    interface ens160
#發送心跳包的源IP,可使用綁定的網卡IP,也可以使用本服務器上的其他IP
    mcast_src_ip 172.16.124.130
#相當於VRID,用於在一個網內區分組播,需要組播域內內唯一。
    virtual_router_id 55
#本機的優先級,VRID相同的機器中,優先級最高的會被選舉爲MASTER
    priority 100
#心跳間隔,下面配置,MASTER會每隔1秒發送一個報文高職組內其他機器,自己還活着。
    advert_int 1
#定義主從的驗證方式以及密碼,一般使用PASS(最長8位,超過了只會識別前8位作爲密碼)
    authentication {
        auth_type PASS
        auth_pass 123456
    }
#VIP
    virtual_ipaddress {
    172.17.1.65/24
        }
#本vrrp_instance所引用的腳本配置,名稱就是vrrp_script 定義的容器名
  track_script {
       chk_nginx
    }
#狀態切換,使用上述配置發送郵件通知
  smtp_alert
}
[login01@nginx-masert conf.d]$ 

slaver配置文件內容如下:

 

[login01@nginx-slaver keepalived]$ sudo cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from Keepalived@localhost
   smtp_server [email protected]
   smtp_connect_timeout 30
   router_id 172.16.124.131
}
#配置vrrp_script,主要用於健康檢查,以及檢查失敗後執行的動作。
vrrp_script chk_nginx {
#健康檢查腳本,當腳本返回值不爲0時認爲失敗
    script "/etc/keepalived/ck_ng.sh"
#檢查頻率,以下配置每2秒檢查1次
    interval 2
#當檢查失敗後,將vrrp_instance的priority減小5
    weight -5
#連續監測失敗3次,才認爲真的健康檢查失敗。並調整優先級
    fall 3
#連續監測2次成功,就認爲成功。但不調整優先級
    rise 2
}


#定義對外提供服務的VIP vrrp_instance配置
vrrp_instance VI_1 {
#指定vrrp_instance的初始狀態,是MASTER還是BackUP主要還是看優先級。
    state BACKUP
#指定vrrp_instance綁定的網卡,最終會通過指定的網卡宣告VIP
    interface ens160
#發送心跳包的源IP,可使用綁定的網卡IP,也可以使用本服務器上的其他IP
    mcast_src_ip 172.16.124.131
#相當於VRID,用於在一個網內區分組播,需要組播域內內唯一。
    virtual_router_id 55
#本機的優先級,VRID相同的機器中,優先級最高的會被選舉爲MASTER
    priority 99
#心跳間隔,下面配置,MASTER會每隔1秒發送一個報文高職組內其他機器,自己還活着。
    advert_int 1
#定義主從的驗證方式以及密碼,一般使用PASS(最長8位,超過了只會識別前8位作爲密碼)
    authentication {
        auth_type PASS
        auth_pass 123456
    }
#VIP
    virtual_ipaddress {
    172.17.1.65/24
        }
#本vrrp_instance所引用的腳本配置,名稱就是vrrp_script 定義的容器名
  track_script {
       chk_nginx
    }
#狀態切換,使用上述配置發送郵件通知
  smtp_alert
}

[login01@nginx-slaver keepalived]$ 

BACKUP服務器的配置需要幾處修改

state MASTER改爲  state BACKUP
mcast_src_ip 172.16.124.130改爲backup服務器實際的IP mcast_src_ip 172.16.124.131
priority 100改爲priority 99

添加Nginx監控腳本,監控Nginx的運行狀態,如果發現異常並不能重啓成功則關閉Keepalived,讓VIP漂移到備份服務器.

vi /etc/keepalived/ck_ng.sh

配置內容如下

#!/bin/bash
#檢查nginx進程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#嘗試啓動一次nginx,停止5秒後再次檢測
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果啓動沒成功,就殺掉keepalive觸發主備切換
        service keepalived stop
    fi
fi

增加監控腳本的執行權限,設置keepalived開機啓動

chmod +x /etc/keepalived/ck_ng.sh
systemctl enable keepalived.service

安裝Nginx

這裏Nginx當做Server使用,方便查看VIP漂移後的結果

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx

設置Nginx開機啓動

systemctl enable nginx.service

啓動Nginx

service nginx start

訪問本機查看nginx是否正常

curl -i localhost

修改nginx的默認啓動頁,標識當前主機的IP地址

vi /usr/share/nginx/html/index.html

在Welcome to nginx!後加上IP地址172.16.124.130,保存後再次訪問本機查看是否已經更改.另一臺服務器是同樣的步驟

華爲雲中一個很重要的配置

登錄華爲雲,進入到管理控制檯,進入雲服務器的詳情頁面(如果你使用的是華爲雲ECS的話,其他雲服務器提供商不曉得是否也是這樣)

點擊網卡選項,點擊管理私有IP地址,添加VIP192.168.0.10(注意兩臺服務器都要配置!)

VIP漂移測試

啓動Keepalived

service keepalived start

 curl訪問VIP

curl -i 192.168.0.10

此時返回的爲主服務器的nginx默認頁面

重啓主服務器或停止Keepalived服務

reboot
或
service keepalived stop

在另一臺服務器上訪問VIP

curl -i 192.168.0.10

這個時候可以看到返回的內容已經變爲備份服務器的nginx默認頁192.168.0.71  說明VIP已經從主服務器漂移到了備份服務器

如果你使用reboot命令重啓了服務器,過了一會之後再次訪問VIP,發現又返回192.168.0.70的頁面內容,因爲主服務器已經重啓完成,keepalived啓動之後會重新把vip搶奪回來.

 

在測試過程中,可以查看服務器是否已綁定上vip,使用命令

ip a

在eth0網卡上可以看到除了本機內網IP外,還有一個VIP

總結

如果某臺服務器宕機或者keepalived和nginx出現問題,vip會自動漂移到另一臺備份服務器.

如果是自己測試練着玩的話,本機直接訪問vip就可以了.如果應用到生產環境,還需有一個外網IP映射到VIP,然後申請一個域名解析到這個外網IP.

本文主要實現高可用,nginx只是當做一個靜態網站的server.後面會基於此文記錄nginx配置負載均衡.

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