keepalived
keepalived介绍
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点 的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可 以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。
VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故 障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。 所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功 能,另一方面也可实现系统网络服务的高可用功能。
三大功能:
管理LVS负载均衡软件 实现LVS集群节点的健康检查中 作为系统网络服务的高可用性(failover)
Keepalived高可用故障切换转移原理
Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。 在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息, 用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就 因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP 资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服 务,恢复到原来的备用角色。 VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是 为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器 的。
安装
需要在实现高可用的 Nginx或其它 服务器上都安装 KeepAlived。keepalived 程序可以实现进程级的检测,注意 keepalived 检测的是 keepalived 进程。具体解释可以参考 (3)使用教程。
Nginx 的安装存在两种方法:可以直接在线安装,例如 yum install keepalived;也可以从 Keepalived for Linux 下载源码后编译安装。
配置文件
因为我是使用 yum 直接在线安装的,keepalived 的配置文件默认在 /etc/keepalived/keepalived.conf 下。我们需要在所有高可用节点内都进行配置。
下面只介绍最简单的必要配置,参数介绍详见注释。
主服务器和备份服务器的 keepalived 配置文件有一点不同。下面是主服务器的 keepalived.conf 文件内容,直接替代默认的 keepalived.conf 配置文件即可。
global_defs {
notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
acassen@firewall.loc # 收件人邮箱1
failover@firewall.loc # 收件人邮箱2
sysadmin@firewall.loc # 收件人邮箱3
}
notification_email_from Alexandre.Cassen@firewall.loc #邮件发件人
smtp_ server 192.168.32.128 #主服务器的ip地址。邮件服务器地址
smtp_connect_timeout 30 # 超时时间
router_id LVS_DEVEL # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script check_nginx {
script "/usr/local/src/nginx_check.sh" #检测脚本存放的路径
interval 2 # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
weight 2 #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
interface ens33 # 通信端口 通过ip addr可以看到,根据自己的机器配置
virtual_router_id 51 # vrrp实例id keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同
priority 100 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;
authentication { # 服务器之间通信密码
auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth pass 1111
}
virtual_ipaddress { # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.91.138,那么虚拟ip可以设置为192.168.91.139~255,前面三个数得一致
192.168.32.50 # 定义虚拟ip(VIP),可多设,每行一个
}
track_script {
check_nginx
}
}
备份服务器的 keepalived 配置文件:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_ server 192.168.32.130 #备份服务器的ip地址
smtp_connect_timeout 30
router_id LVS_DEVEL # LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script check_nginx {
script "/usr/local/src/nginx_check.sh" #检测脚本
interval 2 # (检测脚本执行的间隔)2s
weight 2 #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 51 # 虚拟路由编号,主、备机的virtual_router_id必须相同
priority 90 #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数),每隔1s发送一次心跳
authentication { # 校验方式, 类型是密码,密码1111
auth type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth pass 1111
}
virtual_ipaddress { # 虛拟ip
192.168.32.50 # 定义虚拟ip(VIP),可多设,每行一个
}
track_script {
check_nginx
}
}
将上面的两个配置文件分别替换主备服务器的 keepalived 配置文件。
上面的配置文件中我们配置了检测脚本的名称和位置,即 /usr/local/src/nginx_check.sh,根据配置我们需要往主备服务器的 /usr/local/src 目录下分别创建一个 nginx_check.sh 脚本文件,文件内容如下:
#! /bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx
/export/server/nginx/sbin/nginx #通过Nginx的启动脚本来重启nginx
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移
systemctl stop keepalived
fi
fi
上面的检测脚本的作用是,当检测到 nginx 挂掉但如果此时 keepalived 没挂掉,该脚本会主动尝试重启nginx服务,如果实在重启不了nginx,该脚本会主动关闭 keepalived 好让备份服务器的 nginx 替代上来。
配置文件编辑好之后,可以使用 systemctl start keepalived 启动高可用服务。
nginx+keepalived
环境准备
1、两台Nginx服务器和两台web服务器
两台nginx,一主一备:192.168.101.3和192.168.101.4 这两台nginx都实现反向代理来代理下面那两台tomcat
两台tomcat服务器:192.168.101.5、192.168.101.6
ps:IP地址不需要于本文中一样,自行配置!
2、安装keepalived
分别在主备nginx上安装keepalived,这里就讲解keepalived的安装了。
3、配置虚拟IP(vip:192.168.101.100)
配置Nginx高可用
1、配置主nginx
修改主nginx下/etc/keepalived/keepalived.conf文件,配置主Nginx。
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 1
weight -10
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
# advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
track_script {
check_nginx
}
}
2、配置备nginx
修改备nginx下/etc/keepalived/keepalived.conf文件,配置备Nginx
配置备nginx**时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致**
! Configuration File for keepalived
global_defs {
router_id BACKUP
script_user root
enable_script_security
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 1
weight -10
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
# advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
track_script {
check_nginx
}
以防止nginx挂掉,keepalived还活着,虚拟IP在死掉的nginx服务器上无法切换,创建检测脚本让keepalived每一秒运行一下防止无法切换。
创建vim /etc/keepalived/check_nginx.sh 并添加x权限,,权限不要给太高755就行
#! /bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx
/export/server/nginx/sbin/nginx #通过Nginx的启动脚本来重启nginx
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移
systemctl stop keepalived
fi
fi