(keepalived双机网络图)
yum install keepalived -y
/etc/keepalived/keepalived.conf
通过shell脚本检查应用的进程是否存在,如果不存在则停止keepalived服务,达到让本机失去抢占VIP的机会。剩下的其他机器根据优先级占用VIP;
注意:每个机器的优先级必须不同;每个机器状态默认均为BACKUP(BACKUP不会在高优先级启动的时候瞬间抢占VIP,主要用于数据库方面的数据同步,如果瞬间抢回中间未同步完全的数据将会出现问题);
! Configuration File for keepalived
global_defs {
router_id 10086 #用户标识本节点的名称,通常为hostname
}
vrrp_script check_redis {#创建一个vrrp_script脚本,检查配置
script "/etc/keepalived/check_redis.sh" #在脚本中杀死keepalived的进程
interval 2 #检查脚本的频率,单位(秒)
}
vrrp_instance VI_1 {
state BACKUP #配置为BACKUP节点,一般有三个配置可选MASTER(主机)、BACKUP(备机)
nopreempt #不抢占模式,必须配合BACKUP。在配置了该模式后优先级则失去作用。谁先启动谁就是MASTER,失败后必须杀死当前keepalived进程,再次重启不会立即抢占资源。实际场合中推荐使用该方式而不是使用优先级的抢占模式。抢占模式会出现一些数据同步的问题。
interface eth0 #虚拟IP使用的网卡名称
virtual_router_id 51 #VRRP组名,多个节点的设置值必须一样,以指明各个节点属于同一个VRRP组
priority 90 #节点的优先级(1-254之间的值)
advert_int 1 #组播信息发送间隔,多个节点设置必须一样
authentication {#设置验证信息,同一个组的多个节点设置必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {#指定虚拟IP(即VIP)同一个组的多个节点必须设置一致
192.168.1.100
}
track_script {
check_redis #执行指定vrrp_script脚本
}
}
check_redis.sh脚本:
#!/bin/sh
CHECK_PROCESS=`ps -C redis-server --no-heading| wc -l`
if [ $CHECK_PROCESS -eq 0 ];then
echo "Redis is stop"
sleep 2
CHECK_PROCESS=`ps -C redis-server --no-heading| wc -l`
if [ $CHECK_PROCESS -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
#!/bin/bash
#keepalived 监控端口脚本
#使用方法:
#在keepalived的配置文件中
#vrrp_script check_port {#创建一个vrrp_script脚本,检查配置
# script "/etc/keepalived/check_port.sh 6379" #配置监听的端口
# interval 2 #检查脚本的频率,单位(秒)
#}
CHK_PORT=$1
echo $CHK_PORT
if [ "$CHK_PORT" != "" ];then
PORT_PROCESS=`lsof -i:$CHK_PORT|wc -l`
if [ $PORT_PROCESS -eq 0 ];then
echo "Port $CHK_PORT Is Not Used,End."
sleep 2
PORT_PROCESS=`lsof -i:$CHK_PORT|wc -l`
if [ $PORT_PROCESS -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
else
echo "Check Port Cant Be Empty!"
fi
配置文件:/etc/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id 10086
}
vrrp_script check_redis {
script "</dev/tcp/127.0.0.1/6379" #修改最后的redis端口6379为自己需要监听的端口,理论上可以监听远程端口
interval 2 #检查脚本的频率,单位(秒)
weight -30 #端口检查失败,优先级减少30,默认减少2[注意:两台主机配置的weight相同时候必须保证weight的值大于priority差值]
}
vrrp_instance VI_1 {
state MASTER#BACKUP
interface eth0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
192.168.2.110
}
track_script {
check_redis
}
}
每个主机配置的内容仅仅优先级不能相同,其他保持一致。这里默认使用的MASTER,所以在优先级高的节点恢复之后会立即抢占VIP。如果不希望立即抢回VIP则配置BACKUP,BACKUP则是当前VIP机器的keepalived服务挂掉再去寻找高优先级的主机。
整个过程可以通过一下命令查看日志:
tail -f /var/log/message
推荐使用脚本+非抢占模式使用
注意:keepalived默认使用端口122进行通讯,必须开放112端口,或者停用防火墙.保证各个主机之间112端口的连通性
CentOS6中iptables配置开放112端口
#iptables -I INPUT -p 112 -j ACCEPT
保存规则并重启防火墙
service iptables save
service iptables restart
查看iptables端口开放情况
[root@template keepalived]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT 112 -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@template keepalived]#
启动命令:
service keepalived start
查看启用状态
service keepalived status
设置开机启动
chkconfig keepalived on
keepalived其他详细配置说明
全局定义块
1、email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用nagios全面监控代替。
2、lvs_id:lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。
3、router_id:用户标识本节点的名称,通常为hostname
4、花括号{}:用来分隔定义块,必须成对出现。如果写漏了,keepalived运行时不会得到预期的结果。由于定义块存在嵌套关系,因此很容易遗漏结尾处的花括号,这点需要特别注意。
VRRP实例定义块
keepalived.conf配置文件中加入以下内容
1.notify_master“想要执行的脚本路径” #表示当切换到master状态时,要执行的脚本
2.notify_backup “想要执行的脚本路径”#表示当切换到backup状态时,要执行的脚本
3.notify_fault“想要执行的脚本路径”#表示切换出现故障时要执行的脚本
http://blog.xqlee.com/article/252.html