Keepalived配置及典型应用案例

使用源码先安装keepalived 1.2.6

cd /usr/local/src

wget 

tar zxf keepalived-1.2.6.tar.gz 

cd keepalived-1.2.6

./configure --prefix=/usr/local/keepalived 

make

make install

所设keepalived安装到/usr/local/keepalived, 则所有配置文件均位于此目录之下。 我一直没搞明白一个问题,Linux默认总是将程序安装到/usr/local目录下,所有程序共享了/usr/local/sbin目录。这对一些人的操作习惯是有影响的。为何不考虑使用每个软件一个独立的目录呢?

1.  建立服务启动脚本,以便使用service命令控制之
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

chmod +x /etc/init.d/keepalived

因为我们使用非默认路径(/usr/local)安装keepalived, 故需要修改几处路径,以保证keepalived能正常启动, 需要修改的文件如下:

2. 修改/etc/init.d/keepalived, 寻找大约15行左右的. /etc/sysconfig/keepalived, 修改为:
.  /usr/local/keepalived/etc/sysconfig/keepalived, 即指向正确的文件位置

同时在上述行下添加以下内容(将keepavlied主程序所在路径导入到环境变量PATH中):

PATH="$PATH:/usr/local/keepalived/sbin"

export PATH

3. 修改/usr/local/keepalived/etc/sysconfig/keepalived文件,设置正确的服务启动参数
KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived/etc/keepalived/keepalived.conf"

4. 经过以上修改,keepalived基本安装即可完成,启动测试之:
service keepalived restart

5. 切勿忘记将此服务设置为开机启动

chkconfig keepalived on

默认的配置文件中,指定了两个数个虚拟IP : 192.168.200.16  192.168.200.17  192.168.200.18

可使用ip addr命令验证之。

以上实验只需要一台主机,因为当前节点被指定为主节点,且没有收到其它节点的VRRP组播信息,故自动绑定了虚拟IP。

参考案例一:主-备模式
在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不可用时,备用节点接管虚拟IP,提供正常服务。

节点A 192.168.0.11 (主节点), 节点B 192.168.0.12(备用节点)  虚拟IP(对外提供服务的IP 192.168.0.200 

要求默认情况下由节点A提供服务,当节点A不可用时,由节点B提供服务(即虚拟IP漂移至节点B)。

节点A上的配置文件/usr/local/keepalived/etc/keepalived/keepalived.conf

global_defs {

notification_email {

root@localhost

}

notification_email_from root@local host

smtp_server localhost

smtp_connect_timeout 30

router_id  NodeA

}

默认的配置文件中,使用第三方smtp服务器,但这在现实中几乎没有意义(需要验证的原因),我们将其指定为localhost, 将通知信息的发送交给本地sendmail服务处理。查阅说明文档得知route_id配置是为了标识当前节点,我将其设置为NodeA。当然两个节点的此项设置可相同,也可不相同。

vrrp_instance VI_1 {

state MASTER   #指定A节点为主节点 备用节点上设置为BACKUP即可

interface eth0   #绑定虚拟IP的网络接口

virtual_router_id 51  #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组

priority 100   #主节点的优先级(1-254之间),备用节点必须比主节点优先级低

advert_int 1   #组播信息发送间隔,两个节点设置必须一样

authentication {   #设置验证信息,两个节点必须一致

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {   #指定虚拟IP, 两个节点设置必须一样

192.168.200.16/24

192.168.200.17 /24

192.168.200.18 /24

}

}

默认的配置文件中,竟然没有子网掩码,从而导致使用了默认子网掩码255.255.255.255,如果导致无法从其它机器访问虚拟IP(keepalived虚拟IP无法ping通)。

按同样的方法配置节点B并修改配置文件,可将A节点的配置文件复制到B节点,并修改以下几项:
router_id  NodeB

state   BACKUP

priority   99

其它项不必修改。

测试及验证:拔掉节点A的网线,就发现虚拟IP已经绑定到节点B上,再恢复A节点的网线,虚拟IP又绑定回节点A之上。

但是这种方式存在恼裂的可能,即两个节点实际都处于正常工作状态,但是无法接收到彼此的组播通知,这时两个节点均强行绑定虚拟IP,导致不可预料的后果。
这时就需要设置仲裁,即每个节点必须判断自身的状态(应用服务状态及自身网络状态),要实现这两点可使用自定义shell脚本实现,通过周期性地检查自身应用服务状态,并不断ping网关(或其它可靠的参考IP)均可。当自身服务异常、或无法ping通网关,则认为自身出现故障,就应该移除掉虚拟IP(停止keepalived服务即可)。主要借助keepalived提供的vrrp_script及track_script实现:

在keepalived的配置文件最前面加入以下代码,定义一个跟踪脚本:
vrrp_script check_local { #定义一个名称为check_local的检查脚本

script "/usr/local/keepalived/bin/check_local.sh" #shell脚本的路径

interval 5  #运行间隔

}

再在vrrp_instance配置中加入以下代码使用上面定义的检测脚本:

track_script {

check_local

}

我们在/usr/local/keepalived/bin/check_local.sh定义的检测规则是:

1.  自身web服务故障(超时,http返回状态不是200)

2.  无法ping通网关

3.  产生以上任何一个问题,均应该移除本机的虚拟IP(停止keepalived实例即可)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/271dd6ed2da826cfb654d31a65ac1f56.html