Keepalived基於VRRP協議,能夠實現服務器高可用,避免服務器的單點故障。nginx
VRRP協議全稱叫作虛擬路由冗餘協議,能夠由多臺服務器組成一個服務器組,構成一個對外表現爲獨立的一臺有惟一IP地址和提供相同服務的服務器。服務器組中會競選出一臺主服務器,也就是MASTER端,由他負責ARP響應和轉發數據包,其他皆是備份服務器,就是BACKUP端。若是MASTER端服務器發生故障掛了,則會競選出某一臺BACKUP服務器爲新的MASTER端--由權重值控制,對外提供的IP地址(也就是虛擬IP)會綁定至新的MASTER端。對客戶端來講整個過程是無知覺的,從而實現高可用。安全
服務器組間經過多播的方式由MASTER端發送數據給BACKUP端,當BACKUP端收不到MASTER端的報文時,則會競選出新的MASTER端。優先級由配置的權重值控制,同時爲了保證安全性。通訊方式默認都採起加密。bash
IP | 角色 |
192.168.0.205 | MASTER |
192.168.0.206 | BACKUP |
192.168.0.207 | VIP |
Keepalived安裝服務器
在兩臺機器上分別安裝網絡
tar -zxvf keepalived-1.2.19.tar.gz cd keepalived-1.2.19 yum install gcc yum install openssl-devel ./configure --prefix=/usr/local/keepalived Keepalived configuration ------------------------ Keepalived version : 1.2.19 Compiler : gcc Compiler flags : -g -O2 Extra Lib : -lssl -lcrypto -lcrypt Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : No fwmark socket support : Yes Use VRRP Framework : Yes Use VRRP VMAC : Yes SNMP support : No SHA1 support : No Use Debug flags : No make make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
Keepalived配置文件負載均衡
通常主備之間只須要配置實例時的state mcast_src_ip 和priority不一樣就能夠了socket
! Configuration File for keepalived global_defs { notification_email { haha@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP #主配置MASTER備配BACKUP interface eth0 #綁定的網卡 virtual_router_id 51 mcast_src_ip 192.168.0.206 #多播的地址,一般都是本機真實ip priority 50 #權重 通常主配100 備50 advert_int 1 #多播數據報文發送時間間隔 authentication {#主備間通訊加密信息 auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.207/24 } }
因爲keepalived是實現服務器級別的高可用的,對於應用自己不會作。因此應用掛了怎麼辦。那這種狀況通常用負載均衡,但若是須要的話也能夠本身寫腳本,如下爲例:
ide
#!/bin/bash while true do if [ `ps -ef|grep nginx|grep -v grep|grep -v $0|wc -l` -eq 0 ] then echo 'stop keepalived ' /etc/init.d/keepalived stop fi sleep 3 done
後臺執行就能夠了加密
nohup check_nginx.sh &
假設起了一個nginx做爲應用功能,而後判斷本機提供的服務有沒有掛,若是nginx掛了,中止掉keepalived,那麼天然vip就綁定到備機上了,後續則人工干預修正就OK了。
spa
第二種狀況,若是因爲網絡緣由,備機沒有收到主機發送的vrrp多播數據包,那麼備機就會綁定上vip。可是其實主機仍然正常工做。那麼就會出現裂腦狀況。如何避免的話能夠這麼作。在備機上掃描下主機的應用端口。若是掃描通同時本身又綁定了vip。就關閉本身的keepalived。
#!/bin/bash while true do nc -z -vv 192.168.0.205 80#掃描主機應用端口 if [ $? -eq 0 -a `ip addr |grep 192.168.0.207|wc -l ` -eq 1 ] then /etc/init.d/keepalived stop echo 'stop keepalived because of spilt brain' fi sleep 5 done
同樣也是放在後臺執行