Keepalived简介
Keepalived是Linux下一个轻量级别的高可用解决方案。高可用:广义来讲,是指整个系统的高可用行;狭义的来讲就是主机的冗余和接管。
它与HeartBeat实现类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供HA软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。
Keepalive服务的两大用途:healthcheck和failover
ha failover功能:实现LB Master主机和Backup主机之间故障转移和自动切换
这是针对有两个负载均衡器Direator同时工作而采取的故障转移措施,当主负载均衡器失效或者出现故障时,备份的负载均衡器(BACKUP)将自动接管主负载均衡器的所有工作(vip资源以及相关服务):一旦主负载均衡器故障恢复,MASTER又会接管回它原来的工作,二备份复杂均衡器(BACKUP)会释放master是小事它接管的工作,此时两者将恢复到最初各自的角色
工作原理:
编辑
环境准备
主机1: 192.168.133.131
主机2: 192.168.133.132
VIP: 192.168.133.130
操作系统 | IP | 角色 | 备注 | |
centos7 7.9.2009 | 192.168.133.130 | vip(虚拟ip) | ||
192.168.133.131 | keepalived+nginx1 | |||
192.168.133.132 | keepalived+nginx2 |
安装nginx
略
安装keepalived
服务安装
yum方式直接安装即可,该方式会自动安装依赖:
yum -y install keepalived
yum方式安装的会生产配置文件在/etc/keepalived下:
keepalived.conf
两台服务器均需要安装keepalived
服务配置
- 先准备nginx的检测脚本
cat
/etc/keepalived/check_nginx.sh 内容如下
#bin/bash
counter=$(ps -C nginx |grep -v PID |wc -l) #取命令结果赋值给变量
if [ $counter==0 ];then #判断变量里的值如果等于0
systemctl start nginx #尝试启动nginx
sleep 5
counter=$(ps -C nginx |grep -v PID |wc -l)
if [ $counter==0 ];then #在判断变量里的值如果还等于0
systemctl stop keepalived
fi
fi
脚本授权 chmod +x
/etc/keepalived/check_nginx.sh
2 .准备keepalived的配置
192.168.133.131配置如下:
配置前先备份原有配置,原有配置项较多,有些不需要。
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
输入如下配置:
! Configuration File for keepalived
#检测脚本定义
vrrp_script check_nginx { #脚本模块
script "/etc/keepalived/check_nginx.sh" #脚本路径
interval 2 #检测脚本时间2秒
weight 10 #优先级
}
global_defs {
router_id master-ip
vrrp_skip_check_adv_addr
script_user root
enable_script_security
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 51 # 虚拟路由编号,主从要一致
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication { #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx #(调用检测脚本)
}
virtual_ipaddress {
192.168.133.130 # 定义虚拟ip(VIP),可多设,每行一个
}
}
192.168.133.132 配置如下:
! Configuration File for keepalived
vrrp_script check_nginx { #脚本模块
script "/etc/keepalived/check_nginx.sh" #脚本路径
interval 2 #检测脚本时间2秒
weight 10 #优先级
}
global_defs {
router_id slave-ip
vrrp_skip_check_adv_addr
script_user root
enable_script_security
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.133.130
}
}
启动keepalived
systemctl start keepalived
启动完成不报错即可
验证是否绑定虚拟ip
通过命令 ip a s 查看
[root@mytest ~]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:cb:60:2d brd ff:ff:ff:ff:ff:ff
inet 192.168.133.131/24 brd 192.168.133.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.133.130/32 scope global ens33
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:31:8e:87:f1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
发现存在ip 为192.168.133.130的ip,配置到此完成
验证
停止keepalived服务,或者shutdown主机,发现ip漂移至备节点
[root@mytest ~]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a6:72:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.133.132/24 brd 192.168.133.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.133.130/32 scope global ens33
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:34:ac:b9:31 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever