keepalived配置主從備份


keepalived是一個用於做雙機熱備(HA)的軟件,常和haproxy聯合起來做熱備+負載均衡,達到高可用。

運行原理

keepalived通過選舉(看服務器設置的權重)挑選出一台熱備服務器做MASTER機器,MASTER機器會被分配到一個指定的虛擬ip,外部程序可通過該ip訪問這台服務器,如果這台服務器出現故障(斷網,重啟,或者本機器上的keepalived crash等),keepalived會從其他的備份機器上重選(還是看服務器設置的權重)一台機器做MASTER並分配同樣的虛擬IP,充當前一台MASTER的角色。

選舉策略

選舉策略是根據VRRP協議,完全按照權重大小,權重最大(0~255)的是MASTER機器,下面幾種情況會觸發選舉

1. keepalived啟動的時候

2. master服務器出現故障(斷網,重啟,或者本機器上的keepalived crash等,而本機器上其他應用程序crash不算)

3. 有新的備份服務器加入且權重最大

配置實例

服務器兩台,兩台機器要通局域網,虛擬IP會被設置在他們共有的局域網內,不通的話兩台機器各設置各的虛擬IP

192.168.1.41     Ubuntu 10.04.1 LTS (32位)

192.168.1.135   Red Hat Enterprise Linux Server release 6.1 (Santiago)(64位)

下載源碼安裝,兩台服務器都要安裝和配置

注意可能需要安裝popt庫

ubuntu

sudo apt-get install libpopt-dev

redhat

sudo yum install popt-devel.x86_64

 

解壓安裝

tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/usr/local/keepalived 
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創建配置文件存放路徑

mkdir -p /etc/keepalived/

打開配置文件

emacs  /etc/keepalived/keepalived.conf

 

下面是每台服務器上的配置文件,配置項完全一樣,配置的值按在本機的具體情況,我這里就貼redhat的

global_defs
{
    notification_email
    {
        baifanmvp@163.com
    }
    notification_email_from baifanmvp@163.com
    smtp_server 127.0.0.1
    stmp_connect_timeout 30
    router_id lnmp_node1
}

vrrp_instance lnmp {
    state MASTER
    interface em1
    virtual_router_id 100
    priority 170
    advert_int 5
    track_interface {
        em1
    }

    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200
    }
}
  • global_defs: 全局配置標識,表面下面的區域{}是全局配置

  • notification_email: 里面填郵箱地址,如果keepalived在發生諸如切換操作時會的發郵件到配置上的郵箱,郵件地址可以多個,每行一個
  • notification_email_from:表示發送通知郵件時郵件源地址是誰
  • smtp_server:表示發送email時使用的smtp服務器地址,可以填127.0.0.1
  • smtp_connect_timeout:連接smtp超時時間
  • vrrp_instance:各服務器上實例配置域,這里按本服務器的具體情況填值
  • state:本實例啟動狀態,MASTER/SLAVE,不管填MASTER/SLAVE,最終還是要看本機器的權重。
  • interface:實例綁定的網卡,因為在配置虛擬IP的時候必須是在已有的網卡上添加的,這里按本機情況而定
  • virtual_router_id:這里設置VRID,如果兩台機器是同一個備份組,設置一樣
  • priority:設置本節點的優先級,優先級高的為master,不能超過255
  • advert_int:組播信息發送間隔,同一個備份組兩個機器設置必須一樣,默認是1S
  • authentication:驗證域,同組的機器auth_type(驗證類型)和auth_pass(驗證密碼)必須一樣
  • virtual_ipaddress:VIP,為master機器設置的虛擬地址,和實例綁定的網卡(interface)設置到一個網段

配置好了就可以直接啟動了

ubuntu下啟動

/usr/local/keepalived/sbin/keepalived

redhat下可以按照ubuntu的啟動方式,也可以按照下面這樣啟動

sudo /etc/init.d/keepalived restart

啟動好以后可以用 ip a 命令看虛擬IP的綁定情況,我的配置是192.168.1.135上的權重高,所以VIP綁定到135上面

(ape2!1076)~(h135:135)ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether d4:ae:52:6c:74:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.135/24 brd 192.168.1.255 scope global em1
    inet 192.168.1.200/32 scope global em1
    inet6 fe80::d6ae:52ff:fe6c:7469/64 scope link 

這時候就可以用192.168.1.200這個IP訪問135這台機器了

 

出現的問題記錄:

1. 在配好主從備份之后,發現虛擬IP能ping通,但是訪問虛擬IP對應機器上的服務(不是apache或者mysql之類的公用軟件)卻不成功,這是因為要訪問的服務綁定了主機上的一個實體IP不是INADDR_ANY地址,所以連接不上。

2.記得設置防火牆和關閉selinux策略

關閉selinux

vi /etc/sysconfig/selinux
修改:
SELINUX=disabled
#setenforce 0

配置iptables,添加VRRP通訊支持

iptables -A INPUT -d 224.0.0.18 -j ACCEPT

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM