06 July 2014
Keepalived是一個routing software,
它可以做到load balancing和high-availability,
load balancing會倚靠lvs (linux virtual server, ipvsadm)來做到(但這篇只會做HA,下篇再講怎麼做load balancing),
而high-availability是靠VRRP protocol來達成,
那什麼是VRRP(Virtual Router Redundancy Protocol )?
簡單的說,就是為了當某個router故障,然後可以快速的failover,
Keepalivied就是利用這protocol來達到HA.

假設我們有兩檯web server,
IP分別為
  1. 10.1.190.142
  2. 10.1.190.143

在兩檯都安裝好keepalived的情況下,
被設定為"MASTER"的那檯機器,會去binding 一個我們所指定的virtual ip!
這裡先假設virtual ip為10.1.190.150

1. Install the packages

首先先ssh到第一檯和第二檯上,安裝等等會用到的幾個packages,
  1. keepalived
  2. nginx: 你也可以選擇你想要用的web server
  3. postfix: optional, 安裝postfix的目的在於,server壞掉時,會寄信通知你
apt-get install keepalived nginx postfix


2. Set up environment

安裝好以後,先確認你的nginx是有起來的,
開browser去打一下web server就可以簡單確認!

接著先到第一檯機器上去進行keepalived的config設定
vim /etc/keepalived/keepalived.conf

內容如下:
global_defs {
notification_email {
kenyang@xxx.com
}
notification_email_from xxxx@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id host1 # 用來識別是哪檯機器,如果postfix有安裝,在寄信的時候,title就會跟你說是哪檯機器有問題
}

vrrp_instance VI_1 { # VI_1 可以改成自己想要的string

state MASTER # MASTER意思是這檯為主要的機器

interface eth0 # 把virtual ip binding在eht0上

virtual_router_id 1 # 0~255之間,用來識別是哪一個instance
priority 100

virtual_ipaddress {
10.1.190.150/24
}

smtp_alert # 當有問題時要發信通知
}


接著就到第二檯上去進行設定,
其實內容大致上和第一檯一模一樣,
只有router_id, state, priority需要變動
內容如下,
global_defs {
... same with host1 ...
router_id host2
}

vrrp_instance VI_1 { # VI_1 可以改成自己想要的string
... same with host 1 ....
state BACKUP
priority 50
}

完成設定以後,分別在兩檯機器上打開keepalived,
service keepalived start


3. Verify

最後就來驗證ha是work的,
先到第一檯上去,因為第一檯設定為MASTER,
因此理論上第一檯除了自己的IP (10.1.190.142)以外,
還要拿到這個virtual ip (10.1.190.150),
打下面的指令可以驗證,
root@host1:~$ ip a | grep eth0 | grep inet
inet 10.1.190.142/24 brd 10.1.190.255 scope global eth0
inet 10.1.190.150/24 scope global secondary eth0

接著打開web browser去連virtual ip (10.1.190.150),
都會導到第一檯的nginx去!
這時候把第一檯關機!
root@host1:~$ shutdown now

此時第二檯應該要拿到virtual ip,
一樣打下面的指令做驗證
root@host2:~$ ip a | grep eth0 | grep inet
inet 10.1.190.143/24 brd 10.1.190.255 scope global eth0
inet 10.1.190.150/24 scope global secondary eth0

然後再打開web browser去連virtual ip (10.1.190.150),
此時看到的內容會是第二檯nginx上的內容!


除此之外,如果postfix有設定成功,
應該是會收到mail跟你說host2進入了MASTER模式,
標題是:[host2] VRRP Instance VI_1 - Entering MASTER state
內容是:=> VRRP Instance is now owning VRRP VIPs <= 下一篇再教怎麼用keepalived做load balance.



blog comments powered by Disqus