nginx+keepalived搭建主备nginx

今天使用keepalived+nginx搭建了主备nginx,记录下搭建过程和出现的问题。

一、nginx编译安装

之前写过nginx编译安装的内容可以参考:nginx编译安装参考

二、keepalived编译安装

1.官网下载地址:keepalived官网下载地址

直接选择自己需要的版本下载。

2.编译安装:

上传下载下来的压缩包到服务器目录:

解压文件:

bash 复制代码
tar -zxvf keepalived-2.3.4.tar.gz

进入解压后的目录:

bash 复制代码
cd keepalived-2.3.4

编译keepalived:

bash 复制代码
./configure --prefix=/data/edwuser/keepalived2.3.4

--prefix=/data/edwuser/keepalived2.3.4参数指定编译目录

安装keepalived

bash 复制代码
make && make install 

安装结束后会在prefix指定目录生成文件夹。

进入安装目录的etc/keepalived会看到一个配置文件的模板文件keepalived.conf.sample

三、编辑自己的配置文件

使用这个文件为模板,配置我们自己的配置文件,先介绍下配置文件中几个模块和含义(网上随便搜):
***基础三个模块,global_defs全局模块,vrrp_instance配置vip模块,vrrp_script 脚本模块,用来检测nginx服务。
注:vrrp_script定义脚本后,在vrrp_instance模块必须加上track_script 参数。我就入了这个坑,导致脚本不生效。
global_defs模块参数
notification_email : keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id : 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。
vrrp_instance模块参数
state : 指定instance(Initial)的初始状态, MASTER 或者BACKUP,不是唯一性的,跟后面的优先级priority参数有关。
interface : 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,(注意自己系统,我的默认是ens33,有的是eth0)
mcast_src_ip : 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id : 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
priority: 设置本节点的优先级,优先级高的为master(1-255)
advert_int : 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
authentication : 定义认证方式和密码,主从必须一样
virtual_ipaddress : 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
track_script: 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
vrrp_script模块参数
告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script
script : 自己写的检测脚本。也可以是一行命令如killall -0 nginx
interval 2: 每2s检测一次
weight -5 : 检测失败(脚本返回非0)则优先级 -5
fall 2: 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 : 检测 1 次成功就算成功。但不修改优先级

版权声明:本文为CSDN博主「the丶only」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52270081/article/details/118341576***

根据大佬的解释来配置自己的配置文件:

bash 复制代码
主节点配置文件
global_defs {
   router_id Nginx_01
   script_security USER [user]
}
vrrp_script check_nginx {
    script "/data/edwuser/keepalived2.3.4/etc/keepalived/check_nginx.sh"
    interval 2
    weight -60
    fall 3
    rise 2
    user [user]
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
    	auth_type PASS
    	auth_pass [password]
    }
    virtual_ipaddress {
        [vip]
    }
    unicast_peer {
        [备节点ip]
    }
    accept
    track_script {
        check_nginx
    }
}
备节点配置文件
global_defs {
   router_id Nginx_02
   script_security USER [user]
}
vrrp_script check_nginx {
    script "/data/edwuser/keepalived2.3.4/etc/keepalived/check_nginx.sh"
    interval 2
    weight -5
    fall 3
    rise 2
    user [user]
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
	authentication {
    	auth_type PASS
    	auth_pass [password]
    }
    virtual_ipaddress {
        [vip]
    }
    unicast_peer {
        [主节点ip]
    }
    accept
    track_script {
        check_nginx
    }
}

由于是主备两个节点,所以要在两台服务器安装keepalived。安装步骤都一样,但是配置文件略有不同。
配置文件不同:

1.vrrp_instance VI_1中的 priority :

这个值表的是两台服务区的权重,主节点的权重要大于备用节点的权重。所以主节点权重我配置的150,备用节点配置的100.

2.vrrp_script check_nginx中的weight:

这个值表示当检查nginx状态出现问题的时候,给当前节点的权重值改变量。由于主节点的权重为150给weight主节点配置值为-60,当主节点的检查nginx脚本出现问题,也就是nginx宕机的时候。给当前权重150-60 = 90

所以90小于备用节点的100,所以会切换到备用节点。

3.unicast_peer指定单播ip:这个值是主备节点的通信ip。在我一开始没有配置这个ip,keepalived使用默认的组播。两个节点无论如何都没法通信。查看日志一直报错收不到信息。在配置后,keepalived会使用指定的ip进行通信。
配置文件注意点:

1.执行用户配置:

global_defs中的script_security USER [user]

vrrp_script check_nginx中的user [user]

这两个参数指定了check_nginx的脚本执行用户。如果不指定的话,keepalived会默认使用keepalived_script用户执行脚本,如果你没有创建过这个用户则会无法执行成功脚本。出现ip漂移等各种问题。

2.权重配置:

上面写过就是关于主节点和备用节点vrrp_instance VI_1中的 priorityvrrp_script check_nginx中的weight

四、编写自己的nginx检测脚本

bash 复制代码
#!/bin/bash
pidof nginx >/dev/null 2>&1
netstat -tlnp | grep -q ":8020"
if [ $? -eq 0 ]; then
	exit 0
else
    exit 1

监控nginx进程和我们用到的端口,如果有问题则返回1没问题则返回0。

五、修改启动脚本启动keepalived

在编译安装后,系统的/usr/lib/systemd/system/文件夹会生成systemctl启动使用的脚本。

在脚本启动后面增加参数,指定我们的配置文件。

bash 复制代码
-f /data/edwuser/keepalived2.3.4/etc/keepalived/keepalived.conf

到这里就基本准备完成了。

使用systemctl命令启动keepalived

bash 复制代码
sudo systemctl start keepalived

日志查看命令:

bash 复制代码
sudo grep -i "vrrp\|received advertisement\|MASTER\|BACKUP" /var/log/messages

这个是系统中的日志,其实可以指定输出到自己的日志文件但是我偷懒了。

下面是我测试的日志,当我把主节点nginx关闭以后,看日志可以发现主节点权重从150变成90。90小于100的备用节点权重,所以vip转移到备用节点。当我把主节点启动起来,主节点权重从90变成150.vip又会绑定回来。

相关推荐
MACKEI4 小时前
Nginx 静态图片访问故障快速排查手册
nginx
无敌糖果4 小时前
使用Nginx二级代理Jumpserver堡垒机
运维·nginx
peihexian4 小时前
ingress-nginx更换为f5 nginx gateway fabric
nginx·gateway·fabric
Joy T13 小时前
【AI运维】02 云上基础部署:ECS、OSS 与 Nginx 的体系化理解与实践
运维·nginx
Dreamboat-L13 小时前
云服务器上部署nginx
java·服务器·nginx
季__末15 小时前
WSL2安装配置
nginx
登山人在路上1 天前
Nginx负载均衡策略
服务器·nginx·负载均衡
刘火锅1 天前
Nginx HTTP基本认证配置技术文档
运维·nginx·http
Ancelin安心1 天前
计算机网络易混淆知识点总结
网络协议·tcp/ip·计算机网络·nginx·网络安全·docker·云原生