keepalived 部署 nginx 高可用案例

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
    }

参考:

http://t.csdnimg.cn/9VSuJ

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值