Keepalived
实验环境:server1.example.com
server2.example.com
server3.example.com
server4.example.com
keepalived:server1 server4 server端:server2 server3
安装包:keepalived-1.2.20.tar.gz
解压进入编译:./configure —prefix=/usr/local/keepalived
为了方便修改链接:
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cd /etc/keepalivedvim keepalived.conf
server1端:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost 接收警报的 email 地址,可以添加多个
}
notification_email_from keepalived@localhost 设置邮件的发送地址
smtp_server 127.0.0.1 设置 smtp server 地址
smtp_connect_timeout 30 设置连接 smtp 服务器超时时间
router_id LVS_DEVEL load balancer 的标识 ID,用于 email 警报
}
vrrp_instance VI_1 {
state MASTER 备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态
interface eth0 HA 监测网络接口
virtual_router_id 51 主、备机的 virtual_router_id 必须相同,取值 0-255
priority 100 主机的优先级,备份机改为 50,主机优先级一定要大于备机
advert_int 1 主备之间的通告间隔秒数
authentication { 主备切换时的验证
auth_type PASS 设置验证类型,主要有 PASS 和 AH 两种
auth_pass 1111 设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
}
virtual_ipaddress { 设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
172.25.254.100
}
}
virtual_server 172.25.254.100 80 { 定义虚拟服务器
delay_loop 6 每隔 6 秒查询 realserver 状态
lb_algo rr lvs 调度算法,这里使用轮叫
lb_kind DR LVS 是用 DR 模式
# persistence_timeout 50 会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒的时间限制。
protocol TCP 指定转发协议类型,有 tcp 和 udp 两种
real_server 172.25.254.2 80 { 配置服务节点
weight 1 配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
TCP_CHECK { realserve 的状态检测设置部分,单位是秒
connect_timeout 3 3 秒无响应超时
nb_get_retry 3 重试次数
delay_before_retry 3 重试间隔
}
}
real_server 172.25.254.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
server4端:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100
}
}
virtual_server 172.25.254.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 172.25.254.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.254.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
开启服务:keepalived
server2 server3:
ip addr add 172.25.254.100/32 dev eth0
yum install -y arptables_jf
arptables -A IN -d 172.25.254.100 -j DROP
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2(3)
/etc/init.d/arptables_jf save
测试:
1. 高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。
2. 负载均衡测试:访问 http://172.25.254.100,看到页面在两个 realserver 上切换表示成功!
你也可以通过 ipvsadm -Lnc 查看详细连接情况!
3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,
然后屏蔽故障节点,同时将服务转移到正常节点来执行。
加入ftp
在server2和server3上安装vsftpd并开启服务
编辑server1和server2上keepalived.conf并追加内容:
virtual_server 172.25.254.100 21 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 172.25.254.2 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.254.3 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
重启keepalived并利用lftp进行测试