keepalived+Nginx高可用集群部署(主从热备模式)
Posted 张志翔 ̮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived+Nginx高可用集群部署(主从热备模式)相关的知识,希望对你有一定的参考价值。
keepalived+nginx架构模式:
keepalived安装版本2.2.7和nginx安装版本1.20.2
keepalived安装参考:安装部署,nginx安装参考:安装部署
1、首先查看本机网卡
命令:
ip -brief address show
2、创建Nginx重启检测脚本
脚本放在/etc/keepalives目录下,脚本名称check_nginx.sh
脚本内容:
#!/bin/bash
A ='ps -C nginx --no-header | wc -l'
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
# nginx位置
/data/nginx/nginx-1/sbin/nginx
# 等待3秒再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ 'ps -C nginx --no-header | wc -l' -eq 0 ]; then
killall keepalived
fi
fi
增加脚本运行权限
chmod +x /etc/keepalived/check_nginx.sh
3、keepalived.conf配置
主机配置
! Configuration File for keepalived
global_defs
# 邮件通知,当keepalived发生切换时需要发送email给具体邮箱地址(收件人)
notification_email
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
# 设置发件人的邮箱信息
notification_email_from Alexandre.Cassen@firewall.loc
# 指定smtp服务地址
smtp_server 192.168.200.1
# 指定smpt服务链接超时时间
smtp_connect_timeout 30
# 运行keepalived服务器的一个标识(填写主机名就行),可以作用发送邮件的主题信息
router_id LVS_DEVEL
# 检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思时,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。默认不跳过检查。
vrrp_skip_check_adv_addr
# 严格遵守VRRP协议
vrrp_strict
# 在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
vrrp_garp_interval 0
# 在一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_gna_interval 0
# vrrp实例部分VI_1是实例的名称
vrrp_instance VI_1
# 设置当前实例是master(主机)或backup(备机)路由器
state MASTER
# 用哪个网卡来发送消息
interface enp4s0
# VI_1实例的唯一标识值 0-255之间任意值
virtual_router_id 56
# 优先级,数值越高级别越高
priority 100
# 定时向外发送arrp通告信息,主要用于心跳机制。1秒
advert_int 1
# 认证相关信息
authentication
# 认证类型
auth_type PASS
# 认证密码
auth_pass 1111
# 配置虚拟IP地址,可以配置多个供用户访问
virtual_ipaddress
1x.xx.xx.100
#新增监控的脚本
track_script
# 这里可以指定多个脚本
check_nginx # 追踪 nginx 脚本
# 在keepalived配置文件中写入监听nginx脚本,这里是加载声明脚本
vrrp_script check_nginx
script "/etc/keepalived/check_nginx.sh" # 脚本位置
interval 2 # 每隔两秒运行上一行脚本
weight -20 # 如果脚本运行失败,则权重-20
在 vrrp_instance 中新增监控的脚本
备机配置
! Configuration File for keepalived
global_defs
# 通知邮件,当keepalived发生切换时需要发送email给具体邮箱地址(收件人)
notification_email
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
# 设置发件人的邮箱信息
notification_email_from Alexandre.Cassen@firewall.loc
# 指定smtp服务地址
smtp_server 192.168.200.1
# 指定smpt服务链接超时时间
smtp_connect_timeout 30
# 运行keepalived服务器的一个标识(填写主机名就行),可以作用发送邮件的主题信息
router_id LVS_DEVEL
# 检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思时,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。默认不跳过检查。
vrrp_skip_check_adv_addr
# 严格遵守VRRP协议
vrrp_strict
# 在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
vrrp_garp_interval 0
# 在一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_gna_interval 0
# vrrp实例部分VI_1是实例的名称
vrrp_instance VI_1
# 设置当前实例是master(主机)或backup(备机)路由器
state BACKUP
# 用哪个网卡来发送消息包
interface enp4s0
# VI_1实例的唯一标识值 0-255之间任意值
virtual_router_id 56
# 优先级,数值越高级别越高
priority 100
# 定时向外发送arrp通告信息,主要用于心跳机制。1秒
advert_int 1
# 认证相关
authentication
# 认证类型
auth_type PASS
# 认证密码
auth_pass 1111
# 配置虚拟IP地址,可以配置多个供用户访问
virtual_ipaddress
1x.xx.xx.100
#新增监控的脚本
track_script
# 这里可以指定多个脚本
check_nginx # 追踪 nginx 脚本
# 在keepalived配置文件中写入监听nginx脚本,这里是加载声明脚本
vrrp_script check_nginx
script "/etc/keepalived/check_nginx.sh" # 脚本位置
interval 2 # 每隔两秒运行上一行脚本
weight -20 # 如果脚本运行失败,则权重-20
在 vrrp_instance 中新增监控的脚本
注意:
1)主机和备机Keepalived.conf配置中virtual_router_id、authentication、virtual_ipaddress都要一样。
2)virtual_ipaddress配置的虚拟ip需和实际物理ip需在同一个网段,如实际物理ip是:192.168.21.11,虚拟ip可配置为192.168.21.100。
3)主机和备机区别在于state,interface 节点配置不一样,主机(state MASTER)备机(state BACKUP),interface(网卡名称本人两台网卡都一致)其余都一样。
4、配置两台web服务器
修改nginx下的index.html文件
vim /data/nginx/hrml/index.html
编辑index.html的内容,分别修改为<h1>Welcome to nginx-1!</h1>和<h1>Welcome to nginx-2!</h1>。
主机index.html
备机index.html
5、效果验证
关闭防火墙,同时启动主机和备机的nginx和keepalived
systemctl stop firewalld 关闭防火墙
firewall-cmd --state 查看防火墙状态
主机启动
启动备机
主机和备机启动后用ip addr指令查看一下,可以看到主机enp4s0网卡下生成配置好的虚拟IP:1x.xx.xx.100,备机没有(查看IP,此时备节点不会有VIP(只有当主挂了的时候,VIP才会飘到备节点)
打开页面输入虚拟IP:1x.xx.xx.100,访问正常
6、主机宕机备机自动切换演示
杀死主机中keepalived和nginx
重新访问虚拟IP:1x.xx.xx.100,切换正常
用ip addr指令查看一下备机,可以看到主机enp4s0网卡下生成配置好的虚拟IP(VIP飘到备节点上了)
以上是关于keepalived+Nginx高可用集群部署(主从热备模式)的主要内容,如果未能解决你的问题,请参考以下文章
keepalived+Nginx高可用集群部署(主从热备模式)