Keepalived 安装与配置
原文大部分内容摘自 https://blog.csdn.net/yinwenjie/article/details/47130609
本文简单记录 Keepalived 软件的安装配置操作.
准备两台服务器,分别安装好 nginx web 服务器.
再分别独立安装Keepalived系统
我们的目标是“在一台工作的Nginx崩溃的情况下,系统能够检测到,并自动将请求切换到另外一台备份的Nginx服务器上”。所以,之前安装的两台Nginx,一台是Master服务器是主要的工作服务器,另一台是备份服务器,在Master服务器出现问题后,由后者接替其工作。如下图所示(外网的请求使用一个由keepalived控制的虚拟的浮动IP进行访问):
使用yum 安装好 keepalived.
下面的脚本代码为检测 nginx 服务器是否正常运行,如果没有运行则尝试启动 nginx,休眠2s后再次检测nginx运行状态,如果为运行,则退出此主机上的 keepalived,由其他 keepalived 接管.
#!/bin/sh
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
systecmctl start nginx
fi
sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
systecmctl stop keepalived
fi
keepalived 配置
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
#节点id,每个节点都不同
router_id LVS_V1
}
#检测 nginx 运行状态的脚本
vrrp_script chknginx {
script "/opt/checknginx.sh"
interval 10
}
# instance setting
vrrp_instance VI_1 {
# 节点角色,MASTER(一个) 和 BACKUP(多个),按角色选中填写
state BACKUP
interface eth1
# 这里一定是一样的
virtual_router_id 52
# 这里的优先级比Master节点低
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟ip,对外提供,客户端访问此ip即为访问 keepalived 中MASTER 所在主机
virtual_ipaddress {
192.168.1.100
}
track_script {
chknginx
}
}
Keepalived 非抢占模式
keepalived的切换可以是自动的,但是却做不到毫秒级别,他怎么都需要几秒钟的时间进行切换
这就有一个问题,虽然在主节点出现问题我们转向备份节点时,这个延时无可避免,但是在我们修复主节点后,实际上并没有必要再马上做一次切换,所以Keepalived提供了一种非抢占模式,来满足这个要求
此模式下keepalived 的配置
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
router_id LVS_V1
}
vrrp_script chknginx {
script "/opt/checknginx.sh"
interval 10
# 一旦节点失效,节点的优先级就减少2
# 有多少个keepalived节点,就填写多少数量。
# 这样保证这个节点的优先级比其他节点都低
weight -2
# fall 表示多少次检查失败,就算节点失效。默认1
#fall 1
}
vrrp_instance VI_1 {
#state状态都是BACKUP表示是主要工作节点。
state BACKUP
interface eth1
virtual_router_id 52
# 这个关键配置项,设置为“非抢占”模式
nopreempt
# 每个节点的优先级一定要不一样
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟地址和绑定的端口,如果有多个,就绑定多个
#dev 是指定浮动IP要绑定的网卡设备号
virtual_ipaddress {
192.168.61.100
}
#设置的检查脚本
#关联上方的“vrrp_script chknginx”
track_script {
chknginx
}
}
什么东东?