集群從功能實現上分高可用和負載均衡:
高可用集群,即“HA"集群,也常稱作“雙機熱備”。
當提供服務的機器宕機,備胎將接替繼續提供服務;
實現高可用的開源軟件有:heartbeat、keepalived。,keepalived還有負載均衡的功能。
核心原理都是通過心跳線連接兩台服務器,一台用於提供服務,當這台機子宕機了,另外一台服務器頂替。;
- 負載均衡集群,需要有一台服務器作為分發器,它負責把用戶的請求分發給后端的服務器處理,在這個集群里,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少為2台,實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F5、Netscaler。
keepalivied工作原理:
keepalived通過VRRP(Virtual Router Redundancy Protocl,虛擬路由冗余協議)來實現高可用。
- 它是實現路由高可用的一種通信協議,在這個協議里會將多台功能相同的路由器組成一個小組,這個小組里會有1個master角色和N(N>=1)個backup角色。
- master會通過組播的形式向各個backup發送VRRP協議的數據包,當backup收不到master發來的VRRP數據包時,就會認為master宕機了。此時就需要根據各個backup的優先級來決定誰成為新的mater。
- Keepalived要有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。
環境: master:192.168.123.128 keepalive+Nginx
backup:192.168.123.129 keepalive+Nginx
VIP(Virtual IP):192.168.123.100 虛擬IP;
nginx的安裝 在這里就不說了,這里主要說的不是這個;
安裝keepalive:
yum install -y keepalived
修改配置文件:
vim /etc/keepalived/keepalived.conf
keepalived.conf內容如下:

global_defs { notification_email { 1012447978@qq.com } notification_email_from Alexandre.Cassen@firewall.loc 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" interval 3 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass gys } virtual_ipaddress { 192.168.123.100 } track_script{ chk_nginx } }
自定義腳本,監控Nginx服務:
vim /usr/local/sbin/check_ng.sh
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,並且再次檢測進程數量 # 如果還為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
附權,否則keepalived無法調用
chmod 777 /usr/local/sbin/check_ng.sh
啟動keepalived
systemctl start keepalived
根據上面的配置文件;如果本機的Nginx沒有啟動,keepalived啟動的時候會把Nginx拉起來。
查看nginx是否起成功
ps -ef|grep nginx
查看keepalived是否起成功
ps -ef|grep keepalived
Master配置完成后,129上配置backup;
vim /etc/keepalived/keepalived.conf
內容如下:

global_defs { notification_email { gys@qq.com } notification_email_from Alexandre.Cassen@firewall.loc 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" interval 3 } vrrp_instance VI_1 { state backup interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass gys } virtual_ipaddress { 192.168.123.100 } track_script{ chk_nginx } }
監控腳本內容如下

#!/bin/bash # 時間變量 用於記錄日志 d=`date --date today +%Y%m%d_%H:%M:%S` # 計算Nginx進程數量 n=`ps -C nginx --no-heading|wc -l` # 如果進程為0,則啟動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
附權:
chmod 777 /usr/local/sbin/check_ng.sh
啟動keepalived
systemctl start keepalived
本實例中,可以模擬出master宕機后,訪問vip地址,可以過度到backup上,但是無法通過keepalived來拉起Nginx。
如果有人知道怎么回事,麻煩告訴我一聲;