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高可用集群部署(主从热备模式)的主要内容,如果未能解决你的问题,请参考以下文章

Nginx+Keepalived负载集群高可用

keepalived+Nginx高可用集群部署(主从热备模式)

Vmware部署Nginx+KeepAlived集群双主架构

keepalived高可用lvs集群,主/备和主/主模型

Nginx+Keepalived高可用集群

Centos 7部署docker+nginx+keepalived实现高可用web集群