Keepalived配置和测试过程for linux
安装环境:
两台server:System x3650 M3
Node1:硬盘:130G CPU:2颗E5620 @ 2.40GHz 内存:4G
Node2:硬盘:130G CPU:2颗E5620 @ 2.40GHz 内存:8G
1、 安装redhat 6.4系统
用U盘安装rhel-server-6.4-x86_64-dvd.iso
分区:
/boot 200M
/boot/efi 200M
Swap 4096M
/ 13000M
只安装Basic版本,不要安装桌面
需要在language里面选择chinese包
安装系统完成后设置网卡eth0
2、 设置keepalived
Node1:
! Configuration File for keepalived
global_defs {
router_id 234567 #router_id,配置一个网络唯一的ID
}
vrrp_instance VI_3 { #为keeplived实例号,一般一台服务器只有1个实例,不用更改
state BACKUP #为keepalived初始状态,此处需要设置成BACKUP
nopreempt #配置为非抢占模式,在node1切到node2,vip从node1飘到node2后,node1恢复后,服务不会再切回node1,而是继续让node2做MASTER,服务在node2上面继续跑
interface eth0 #为启用keepalived的接口,根据实际情况设置
virtual_router_id 40 #为keepalived虚拟ID,同一集群必须相同
priority 100 #服务优先级,MASTER设置为100,BACKUP设置为90
advert_int 1 #心跳区间设置为1秒
authentication {
auth_type PASS
auth_pass 10101010 #设置验证密码,同一集群必须相同
}
virtual_ipaddress {
172.16.0.120 dev eth0 label eth0:0 #设置服务IP,dev label可省略
}
notify_master "/etc/keepalived/notify.sh master" #切换成master,执行一次脚本
notify_backup "/etc/keepalived/notify.sh backup" #切换成backup,执行一次脚本
notify_fault "/etc/keepalived/notify.sh fault" #切换成fault,执行一次脚本
}
Node2:
! Configuration File for keepalived
global_defs {
router_id 123456
}
vrrp_instance VI_3 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 40
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 10101010
}
virtual_ipaddress {
172.16.0.120 dev eth0 label eth0:0
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
3、 设置notify. sh
Node1:
#!/bin/bash
#
case $1 in
master)
service httpd restart #此行为应用启动脚本,根据应用更改
echo "master" >>/etc/keepalived/log
;;
backup)
service httpd stop #此行为应用启动脚本,根据应用更改
echo "backup" >>/etc/keepalived/log
;;
fault)
service httpd stop #此行为应用启动脚本,根据应用更改
echo "fault" >>/etc/keepalived/log
;;
esac
Node2:
#!/bin/bash
#
case $1 in
master)
service httpd restart
echo "master" >>/etc/keepalived/log
;;
backup)
service httpd stop
echo "backup" >>/etc/keepalived/log
;;
fault)
service httpd stop
echo "fault" >>/etc/keepalived/log
;;
esac
4、 其他设置
关闭两个系统的防火墙
设置keepalived服务开机启动:chkconfig keepalived on
5、 进行keepalived服务切换试验
初始状态:
Node1:
Node2:
重启Node1上的keepalived服务:Vip从node1漂移到了node2
VIP掉了一个包(advert_int 1 #心跳区间设置为1秒)间隔是1秒
Node1上的httpd服务停止,Node1变成backup
Node2上的httpd服务启动,Node2变成master
重启Node2上的keepalived服务:
Vip从node2漂移到了node1
在重启keepalived的时候,每个节点的VIP会进行漂移,在VIP漂移到某个节点的时候,这个节点的httpd服务也相应会起来。而没有VIP节点的httpd服务会关闭。
比如:
Node1的IP:172.16.0.121
Node2的IP:172.16.0.122
VIP:172.16.0.120
Httpd的服务在哪个节点,那么就可以通过那个节点的IP和VIP共同访问Apache的测试网页。
6、 用插拔网线来测试服务漂移情况
拔出Node1上的网线:
服务漂到Node2上
插上Node1上的网线:
Node2的VIP没有漂回到Node1,因为在Node1上设置了非抢占模式
拔出Node2的网线
VIP漂到了Node1上
插上Node2的网线
VIP仍然在node1上,没有漂到node2上
测试OK
表示keepalived的非抢占模式成功
如果遇到非抢占模式不成功的话,因为这两台服务器都是通过交换机连接的,可以把连接交换机的端口设置为快速转发即可
int eth 1/0/1
stp disable
stp edged-port enable
因为可能是网络端口的延迟导致了非抢占不生效,比如说拔下node1的网线再插上,可能系统认为网络端口已经起来了,但是因为stp的存在,导致两台服务器网络之间的互信有延迟,node1可能认为node2是非存活状态,就把自己当做master拉起来了,等两端网络互信完成,就没有通过非抢占,而是直接比较优先级,node1优先级高,继续维持master状态。
所以这里加快了网络端口的转发速度,使网络端口在第一时间实现互通,node1第一时间认为node2是存活的,就应用了非抢占模式,node1变成了backup,node2还是做master。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22996654/viewspace-2121215/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22996654/viewspace-2121215/