將多臺服務器搭建成一個集羣來運行應用程序,能夠避免單點故障,還能提高服務器的承載能力linux
linux集羣按功能能夠劃分爲兩大類:高可用和負載均衡。nginx
高可用集羣:一般是兩條服務器,一臺工做,另一臺做爲冗餘,當一臺服務器宕機不能提供服務了,就會有其餘服務器頂替。經常使用的軟件有heartbeat和keepalived,但heartbeat已經好久沒有跟新了。vim
負載均衡集羣:把用戶的請求分攤到多臺服務器上面。實現負載均衡的開源軟件有LVS、keepalived、haproxy、Nginx等,商業的負載均衡設備 F五、NetScaler。bash
VRRP協議是實現路由高可用的一種通訊協議,在這個協議裏會把多臺功能相同的路由器組成一個組,這個組會有一個主角色(masteer)和多個備用角色(backup)。工做的時候主角色會經過組播的形式向各個備用角色發送VRRP協議的數據包,當備用角色收不到主角色發來的VRRP數據包的時候,就會認爲主已經宕機了,這個時候就會須要根據優先級來讓一個備用角色成爲新的主。服務器
keepalived就是採用VRRP協議來實現高可用集羣,keepalived有三個模塊:core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件加載和解析。check模塊負責健康檢查。vrrp模塊用來實現VRRP協議。負載均衡
1. 準備兩臺linux機器,在兩臺機器上都下載keepalived,一臺作主角色,另外一臺作備用角 [root@xinylinux-1 ~]# yum install -y keepalived [root@xinylinux-2 ~]# yum install -y keepalived測試
2. 兩臺機器上都要安裝Nginx [root@xinylinux-1 ~]# yum install -y nginxspa
另外一臺之前已經安裝了源碼包日誌
3. 編輯主角色(master)的keepalived配置文件router
[root@xinylinux-2 ~]# vim /etc/keepalived/keepalived.conf
文件內容:
global_defs {
notification_email {
aming@aminglinux.com
}
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh" //自定義腳本監控Nginx服務
interval 3 //每隔3秒執行一次這個腳本
}
vrrp_instance VI_1 {
state MASTER //角色爲主
interface ens33 //針對哪一個網卡監聽VIP
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com //自定義密碼
}
virtual_ipaddress {
192.168.188.100 //定義VIP,即虛擬IP
}
track_script {
chk_nginx //定義監控腳本
}
}
4. 定義一個監控Nginx服務的腳本
[root@xinylinux-2 ~]# vim /usr/local/sbin/check_ng.sh
腳本內容爲:
#!/bin/bash
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量,
#若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
5. 腳本更改權限
[root@xinylinux-2 ~]# chmod 755 /usr/local/sbin/check_ng.sh
6. 啓動主上的keepalived,
[root@xinylinux-2 ~]# systemctl start keepalived
[root@xinylinux-2 ~]# ps aux |grep keepalived
root 1731 0.0 0.1 118652 1400 ? Ss 22:00 0:00 /usr/sbin/keepalived -D
root 1732 0.0 0.3 127516 3304 ? S 22:00 0:00 /usr/sbin/keepalived -D
root 1733 0.1 0.2 127456 2848 ? S 22:00 0:00 /usr/sbin/keepalived -D
root 1830 0.0 0.0 112720 976 pts/0 R+ 22:00 0:00 grep --color=auto keepalived
7.配置備用角色keepalived配置文件
和主的內容差很少,只要把state 改成BACKUP,priority的數值要比主上的小,VIP改一下。就能夠了
8.編輯監控腳本
內容:
#!/bin/bash
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量,
#若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived
if [ $n -eq "0" ]; then
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
9.啓動keepalived服務
而後測試