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又会绑定回来。

相关推荐
Arya_aa17 小时前
四:部署前端和后端
nginx
Java面试题总结18 小时前
一文搞定 Linux Nginx 从安装、启动到 nginx.conf 全配置详解(新手也能看懂)
linux·运维·nginx
MiNG MENS1 天前
nginx 代理 redis
运维·redis·nginx
珊瑚怪人1 天前
一个域名问题
nginx
dxdz1 天前
一文搞定 Linux Nginx 从安装、启动到 nginx.conf 全配置详解(新手也能看懂)
nginx
遇见火星1 天前
Nginx 负载均衡配置模板:轮询、权重、IP哈希、最少连接
tcp/ip·nginx·负载均衡
untE EADO2 天前
Nginx代理到https地址忽略证书验证配置
运维·nginx·https
Treh UNFO2 天前
nginx的重定向
大数据·数据库·nginx
理人综艺好会2 天前
nginx了解
运维·nginx
likeGhee2 天前
docker创建nginx+keepalived+nacos集群(仅测试环境)
nginx·docker