keepalived

(keepalived双机网络图)
 

1.通过yum安装keepalived软件
 

yum install keepalived -y


2.keepalived默认配置文件存放位置

/etc/keepalived/keepalived.conf

3.keepalived配置文件详解

模式1:通过keepalived检查脚本,脚本检查应用的方式使用。

通过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

check_port.sh脚本
 

#!/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


模式二:通过keepalived直接监听应用端口方式使用

配置文件:/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

 

推荐使用脚本+非抢占模式使用


4.开放防火墙端口

注意: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]# 


5.启动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实例定义块

  1. vrrp_sync_group:同步vrrp级,用于确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪
  2. group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致
  3. vrrp_instance:vrrp实例名 
    1> state:实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。 
    2> interface:对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。 
    3>mcast_src_ip:本机IP地址 
    4>virtual_router_id:虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。 
    5> priority:节点优先级,取值范围0~254,MASTER要比BACKUP高 
    6>advert_int:MASTER与BACKUP节点间同步检查的时间间隔,单位为秒 
    7>lvs_sync_daemon_inteface:负载均衡器之间的监控接口,类似于 HA HeartBeat的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口 
    8> authentication:验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP使用相同的密码才能正常通信。 
    9>smtp_alert:有故障时是否激活邮件通知 
    10>nopreempt:禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。 
    11>virtual_ipaddress:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。

keepalived.conf配置文件中加入以下内容

1.notify_master“想要执行的脚本路径” #表示当切换到master状态时,要执行的脚本

2.notify_backup “想要执行的脚本路径”#表示当切换到backup状态时,要执行的脚本

3.notify_fault“想要执行的脚本路径”#表示切换出现故障时要执行的脚本


 
暂无评论