24-Nginx高可用(基于Keepalived实现双主热备)

双机主备存在的问题

但是使用这样的一个双机主备是存在一些问题的, 就是需要采购两台云服务器, 价格比较贵, 如果主节点从来不发生故障的话, 所有的流量其实一致都是在主节点上的, 备用机,永远都用不上. 存在资源浪费的情况

为了解决双机主备存在的问题, 推出了双主热备

双主热备

虚拟出两个虚拟IP, 两台Nginx互相为主备关系, 达成双主热备的架构

我是用的依旧是

主: 192.168.247.136

备: 192.168.247.137

虚拟IP: 140,141

140虚拟IP 主=136, 备=137

141虚拟IP 主=137, 备=136

修改主机配置文件

! Configuration File for keepalived

global_defs {
   # 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一
   router_id keep_136
}

# 检测Nginx的进程
vrrp_script check_nginx_alive {
    # 检测脚本
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    # 每2秒运行一次
    interval 2
    # 如果脚本运行成功, 则升级权重+10, 如果配置为-10, 那么脚本运行失败权重-10
    weight 10
}


# 计算机的节点
vrrp_instance VI_1 {
    # 节点状态, MASTER代表主节点 BACKUP代表备用节点
    state MASTER
    # 使用ens33网卡
    interface ens33
    # 虚拟路由ID, 保持MASTER和BACKUP一致
    virtual_router_id 51
    # 优先级/权重 100 谁的优先级高, 在MASTER宕机后, 谁就能成为MASTER
    priority 100
    # 主备之间的心跳周期 1秒
    advert_int 1
    # 认证授权, 防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 追踪Nginx脚本
    track_script {
        check_nginx_alive
    }
    # 虚拟IP
    virtual_ipaddress {
        192.168.247.140
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.141
    }
}

修改备用机配置文件

! Configuration File for keepalived

global_defs {
   # 主节点宕机后通知的邮箱
#   notification_email {
#     acassen@firewall.loc
#     failover@firewall.loc
#     sysadmin@firewall.loc
#   }
#   notification_email_from Alexandre.Cassen@firewall.loc
#   smtp_server 192.168.200.1
#   smtp_connect_timeout 30
   # 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一
   router_id keep_137
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
}

# 计算机的节点
vrrp_instance VI_1 {
    # 节点状态, MASTER代表主节点 BACKUP代表备用节点
    state BACKUP
    # 使用ens33网卡
    interface ens33
    # 虚拟路由ID, 保持MASTER和BACKUP一致
    virtual_router_id 51
    # 优先级/权重 100 谁的优先级高, 在MASTER宕机后, 谁就能成为MASTER
    priority 80
    # 主备之间的心跳周期 1秒
    advert_int 1
    # 认证授权, 防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP
    virtual_ipaddress {
        192.168.247.140
#        192.168.200.17
#        192.168.200.18
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.141
    }
}

如果是正式环境部署的话, 记得在137上加上nginx自动拉起脚本

重启Keepalived并进行测试

136和137都重启

systemctl restart keepalived.service

136绑定了140

137绑定了141

访问140

140ok

访问141

141ok

手动停止136的Keepalived, 模拟故障

140自动切换为141, ok

启动140的Keepalived

自动切换回master, ok

手动停止137的Keepalived,模拟故障

141自动切换为140, ok

启动141的Keepalived

自动切回141, ok

成功完成双主热备架构

posted @ 2022-09-06 18:58  彼岸舞  阅读(156)  评论(0编辑  收藏  举报