keepalived配置主從備份

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

運行原理node

keepalived經過選舉(看服務器設置的權重)挑選出一臺熱備服務器作MASTER機器,MASTER機器會被分配到一個指定的虛擬ip,外部程序可經過該ip訪問這臺服務器,若是這臺服務器出現故障(斷網,重啓,或者本機器上的keepalived crash等),keepalived會從其餘的備份機器上重選(仍是看服務器設置的權重)一臺機器作MASTER並分配一樣的虛擬IP,充當前一臺MASTER的角色。mysql

選舉策略linux

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

1. keepalived啓動的時候apache

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

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

配置實例負載均衡

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

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
相關文章
相關標籤/搜索