nginx keepalived高可用(私网)
keepalived高可用(私网)
部署在整个集群中的一个高可用软件,作用是创建一个VIP(虚拟IP),在整个集群中有且只有一个机器上生成VIP,当这台机器出现问题时,keepalived将自动将VIP切换至其他的某一台服务器上。
一、部署keepalived:
1.server1、server2安装keepalived
yum install keepalived -y
2.修改配置文件。
吧原来的清空了,然后在吧这个复制过去修改
server1:
#全局配置
global_defs {
#身份识别(全局唯一)
router_id lb01
}
# 配置VRRP协议
vrrp_instance VI_1 {
# 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
state BACKUP
nopreempt
# 绑定网卡
interface eth0
# 虚拟路由标示,可以理解为分组
virtual_router_id 50
# 优先级(数字越大,权重越大)
priority 100
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 1111
}
# 设置VIP
virtual_ipaddress {
# 虚拟的VIP地址
192.168.159.33
}
}
server2:
#全局配置
global_defs {
#身份识别(全局唯一)
router_id lb02
}
# 配置VRRP协议
vrrp_instance VI_1 {
# 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
state BACKUP
nopreempt
# 绑定网卡
interface eth0
# 虚拟路由标示,可以理解为分组
virtual_router_id 50
# 优先级(数字越大,权重越大)
priority 90
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 1111
}
# 设置VIP
virtual_ipaddress {
# 虚拟的VIP地址
192.168.159.33
}
}
注意:vip地址必须和绑定网卡地址一个网段
3.重启测试
server1、server2:
systemctl restart keepalived
用ip a查看ip地址。
二、抢占士和非抢占式
state BACKUP (所有的机器全部设置成BACKUP)
#开启非抢占式
nopreempt
解决了那些问题:
当master宕机切换到backup的时候会短暂一小段时间无法访问,当master恢复服务时候切换回来又宕机一小段时间,如果全部设置问backup那么就没有master切换过去除非宕机要不然不会切换回来了
三、高可用时如果出现脑裂问题时怎么解决
在配置文件添加
1、通过一个脚本判断
#每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
vrrp_script check_web {
# 指定脚本路径
script "/etc/keepalived/check.sh"
# 5秒钟执行一次
interval 5
}
#调用计划的脚本
track_script {
check_web
}
例:
#全局配置
global_defs {
#身份识别(全局唯一)
router_id lb01
}
#每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
vrrp_script check_web {
# 指定脚本路径
script "/etc/keepalived/check.sh"
# 5秒钟执行一次
interval 5
}
# 配置VRRP协议
vrrp_instance VI_1 {
# 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
state BACKUP
nopreempt
# 绑定网卡
interface eth0
# 虚拟路由标示,可以理解为分组
virtual_router_id 50
# 优先级(数字越大,权重越大)
priority 100
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 1111
}
# 设置VIP
virtual_ipaddress {
# 虚拟的VIP地址
192.168.159.33
}
#调用计划的脚本
track_script {
check_web
}
}
脚本:
[root@lb01 ~]# cat /etc/keepalived/check.sh
#!/bin/bash
#1.判断端口
#2.通过进程的方式
ps -aux | grep [n]ginx
if [ $? -ne 0 ] ; then
/usr/local/nginx/sbin/nginx
sleep 3;
ps -aux | grep [n]ginx
if [ $? -ne 0 ] ; then
systemctl stop keepalived
fi
fi