keepalived實現高可用

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

同樣也是放在後臺執行

相關文章
相關標籤/搜索