本文只爲方便往後查閱,不對一些概念再作贅述,網上都有不少明確的解釋,也請你們先了解相關概念.html
兩臺搭建HA的服務器是華爲雲上的ECS(不要忘記開通VPC,保證咱們的服務器都處在一個內網環境),因爲華爲雲每臺機器只能綁定一個私有的浮動IP(VIP),因此本次示例只能實現一主一備(Master-Backup).nginx
環境:centos
Server1:192.168.0.70bash
Server2:192.168.0.71服務器
VIP:192.168.0.10負載均衡
建立etc下的keepalived目錄,編輯配置文件curl
yum -y install keepalived
mkdir /etc/keepalived
vi /etc/keepalived/keepalived.conf
配置文件內容以下測試
global_defs {
notification_email {
localhost@163.com
}
notification_email_from Keepalived@localhost
smtp_server 163@smtp.com
smtp_connect_timeout 30
router_id 192.168.0.70
}
#配置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 eth0
#發送心跳包的源IP,可以使用綁定的網卡IP,也可使用本服務器上的其餘IP
mcast_src_ip 192.168.0.70
#至關於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 {
192.168.0.10/24
}
#本vrrp_instance所引用的腳本配置,名稱就是vrrp_script 定義的容器名
track_script {
chk_nginx
}
#狀態切換,使用上述配置發送郵件通知
smtp_alert
}
BACKUP服務器的配置須要幾處修改網站
state MASTER改成 state BACKUP
mcast_src_ip 192.168.0.70改成backup服務器實際的IP mcast_src_ip 192.168.0.71
priority 100改成priority 99
添加Nginx監控腳本,監控Nginx的運行狀態,若是發現異常並不能重啓成功則關閉Keepalived,讓VIP漂移到備份服務器.url
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當作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地址192.168.0.70,保存後再次訪問本機查看是否已經更改.另外一臺服務器是一樣的步驟
登陸華爲雲,進入到管理控制檯,進入雲服務器的詳情頁面(若是你使用的是華爲雲ECS的話,其餘雲服務器提供商不曉得是否也是這樣)
點擊網卡選項,點擊管理私有IP地址,添加VIP192.168.0.10(注意兩臺服務器都要配置!)
啓動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配置負載均衡.