ip分配
ip | 备注 | |
10.1.1.51 | 服务1 | |
10.1.1.52 | 服务2 | |
10.1.1.53 | 虚拟ip |
nginx
# 创建目录 /opt/nginx 并拷贝安装文件到该目录
mkdir -p /opt/nginx
# 切换到安装目录
cd /opt/nginx
# 离线安装
yum localinstall -y nginx-1.24.0-1.el7.ngx.x86_64.rpm
# 自启动
systemctl enable --now nginx
# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
# 复制 安装文件到另一个服务
scp -r /opt/nginx/ root@10.1.1.52:/opt/
scp -r /opt/keepalive/ root@10.1.1.52:/opt/
# nginx的目录路径
nginx的sbin目录:/usr/sbin/nginx
静态文件目录:/usr/share/nginx/html
全局配置文件:/etc/nginx/nginx.conf
自定义配置文件目录:/etc/nginx/conf.d
keepalived-51-主
# 创建目录 /opt/keepalived 并拷贝安装文件到该目录
mkdir -p /opt/keepalived
# 切换到安装目录
cd /opt/keepalived
# 离线安装(需要rpm安装包)
yum localinstall -y *.rpm
# 复制原配置文件备份
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# 编辑配置文件,不同节点配置不同,注释部分按需修改
cat > /etc/keepalived/keepalived.conf << EOF
global_defs {
router_id NG_HA # 可自定义名称,不同keepalived集群的标识名不能相同!同集群内节点名称可相同
}
vrrp_script chk_nginx {
script "/etc/keepalived/checkNG.sh" # 检查服务启动的脚本
interval 3 # 心跳检测间隔
}
vrrp_instance VI_1 {
state BACKUP # 主从节点配置,从节点设置为:BACKUP(非抢占模式下,两个节点都设置为BACKUP)
interface ens192 # 绑定网卡,根据实际情况修改,可使用"ip a"命令获取网卡名
virtual_router_id 52 # 注意:同一网段中的VRID不能重复,同一个集群中的要保持一致
priority 100 # 优先级,主节点设置为:100、从节点设置为:90
nopreempt # 非抢占模式
advert_int 1 # 检查间隔时间
authentication {
auth_type PASS
auth_pass 2024
}
virtual_ipaddress {
10.1.1.53 # VIP,根据实际情况修改
}
track_script {
chk_nginx
}
}
EOF
# 添加健康检查脚本
vim /etc/keepalived/checkNG.sh
# 脚本内容 (检查nginx程序是否存在,如果不存在则尝试重启nginx,重启失败后,关闭当前节点的keepalived,让其它节点成为主节点)
#!/bin/bash
if [[ `ps -C nginx --no-header | wc -l` -eq 0 ]]; then
systemctl start nginx
sleep 2
if [[ `ps -C nginx --no-header | wc -l` -eq 0 ]]; then
systemctl stop keepalived
fi
fi
# 启动脚本增加权限
chmod +x /etc/keepalived/checkNG.sh
# 设置开机自启动并启动keepalived
systemctl enable --now keepalived
keepalived-52-从
与主节点的不同配置的地方,修改该配置部分的优先级 priority 参数低于主节点的。
# 编辑配置文件,不同节点配置不同,注释部分按需修改
cat > /etc/keepalived/keepalived.conf << EOF
global_defs {
router_id NG_HA # 可自定义名称,不同keepalived集群的标识名不能相同!同集群内节点名称可相同
}
vrrp_script chk_nginx {
script "/etc/keepalived/checkNG.sh" # 检查服务启动的脚本
interval 3 # 心跳检测间隔
}
vrrp_instance VI_1 {
state BACKUP # 主从节点配置,从节点设置为:BACKUP(非抢占模式下,两个节点都设置为BACKUP)
interface ens192 # 绑定网卡,根据实际情况修改,可使用"ip a"命令获取网卡名
virtual_router_id 52 # 注意:同一网段中的VRID不能重复,同一个集群中的要保持一致
priority 80 # 优先级,主节点设置为:100、从节点设置为:90
nopreempt # 非抢占模式
advert_int 1 # 检查间隔时间
authentication {
auth_type PASS
auth_pass 2024
}
virtual_ipaddress {
10.1.1.53 # VIP,根据实际情况修改
}
track_script {
chk_nginx
}
}
EOF
原理
基于VRRP协议来实现,VRRP虚拟路由冗余协议,主要用来解决单点故障问题。
keepalived高可用抢占式与非抢占式
抢占:
会发生两次切换,默认是抢占式,对于并发访问非常高的站点,不建议配置抢占式,因为至少会发生两次VIP地址漂移。在master和backup的配置不对等的时候,尤其是master性能高而backup性能低时,建议使用抢占式。
非抢占:
配置步骤建议如下:
两个节点的state都必须都配置为backup
两个节点都在vrrp_instance中添加nopreempt参数。
其中一个节点的优先级高于另一个节点的优先级。
两台服务器都设置为backup后,那么哪个节点为主节点就完全由优先级来决定了。
配置方法:
#Master
vrrp_instance VI_1 {
state BACKUP
priority 100
nopreempt
}
#Backup
vrrp_instance VI_1 {
state BACKUP
priority 80
nopreempt
}
参考: