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: 全局配置標識,表面下面的區域{}是全局配置
配置好了就能夠直接啓動了
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