nginx+keepalived双主模式双主热备

2024-01-11 05:44

本文主要是介绍nginx+keepalived双主模式双主热备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、双主模式原理

1. nginx+keepalived主备模式缺点

2. 主备模式和双主模式的区别

二、配置文件

1. nginx01的keepalived.conf

2. nginx02的keepalived.conf

3. 检测nginx存活脚本文件nginx_check.sh

三、测试准备

1. 启动nginx01、nginx02

2. 启动keepalived

3. 查看网卡信息

四、测试

1. 测试VIP访问

2. 测试nginx检测脚本

3. 模拟nginx01宕机

4. 模拟nginx01修复宕机


主机名真实IPVIP
nginx0111.0.1.3111.0.1.29
nginx0211.0.1.3211.0.1.30

一、双主模式原理

1. nginx+keepalived主备模式缺点

双机主备存在一个问题,不管keepalived存活在哪台设备上,总有一台设备是空闲的,资源利用率并不高,双主模式可以很好解决该问题。

双主模式可以实现以下效果:

11.0.1.29 VIP1 默认访问11.0.1.31

11.0.1.30 VIP2 默认访问11.0.1.32

当其中一个nginx宕机,两个虚拟IP仍然可以正常使用,此时存活的nginx同是绑定2个虚拟IP

2. 主备模式和双主模式的区别

双主与主备的核心区别就是,主备模式只有一个vrrp实例(默认抢占模式:1个master1个backup),双主机需要两个虚拟IP,两个vrrp实例,两者互为主备,vrrp1实例中(nginx01为master,nginx02为backup)、vrrp2实例中(nginx01为backup,nginx02为master)

二、配置文件

1. nginx01的keepalived.conf

[root@nginx01 sbin]# cat /etc/keepalived/keepalived.conf
global_defs {router_id real-server1script_user rootenable_script_security}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2
}vrrp_instance VI_1 {state MASTERinterface ens33   virtual_router_id 151 priority 100 advert_int 5  authentication {auth_type  PASSauth_pass  1111}virtual_ipaddress {  11.0.1.29}track_script {                                                                                  chk_nginx}}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 152priority 50advert_int 5authentication {auth_type  PASSauth_pass  2222}virtual_ipaddress {11.0.1.30}track_script {chk_nginx}
}

2. nginx02的keepalived.conf

[root@nginx02 sbin]# cat /etc/keepalived/keepalived.conf
global_defs {router_id real-server2script_user rootenable_script_security}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 151priority 50advert_int 5authentication {auth_type  PASSauth_pass  1111}virtual_ipaddress {11.0.1.29}track_script {                                                                                  chk_nginx}}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 152priority 100advert_int 5authentication {auth_type  PASSauth_pass  2222}virtual_ipaddress {11.0.1.30}track_script {chk_nginx}
}

3. 检测nginx存活脚本文件nginx_check.sh

[root@nginx01 sbin]# cat /etc/keepalived/nginx_check.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confsleep 2counter=$(ps -C nginx --no-heading|wc -l)if [ "${counter}" = "0" ]; thensystemctl stop keepalivedfi
fi

三、测试准备

1. 启动nginx01、nginx02

cd /usr/local/ngins/sbin
./nginx

请确保真实IP可以访问到nginx01、nginx02

2. 启动keepalived

systemctl start keepalived

3. 查看网卡信息

nginx01的网卡信息

[root@nginx01 sbin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:60:05:0e brd ff:ff:ff:ff:ff:ffinet 11.0.1.31/24 brd 11.0.1.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 11.0.1.29/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::a344:1c87:5caf:42cd/64 scope link noprefixroute valid_lft forever preferred_lft forever

nginx02的网卡信息

[root@nginx02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:b9:97:26 brd ff:ff:ff:ff:ff:ffinet 11.0.1.32/24 brd 11.0.1.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 11.0.1.30/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::4ae3:fc87:6344:7062/64 scope link noprefixroute valid_lft forever preferred_lft forever

可以看出VIP成功绑定到各自的真实服务器IP

四、测试

1. 测试VIP访问

2. 测试nginx检测脚本

关闭nginx01上的nginx服务,查看脚本是否可以正常重启nginx

[root@nginx01 sbin]# ./nginx -s stop
[root@nginx01 sbin]# ps -aux | grep nginx
root       3598  0.0  0.0  20540   612 ?        Ss   22:48   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     3600  0.0  0.0  20984  1304 ?        S    22:48   0:00 nginx: worker process
root       3650  0.0  0.0 112824   988 pts/0    R+   22:48   0:00 grep --color=auto nginx

重启成功,脚本生效。

3. 模拟nginx01宕机

停止nginx01上的keepalived进程或者直接将nginx01关机(效果一样),模拟nginx01宕机

[root@nginx01 sbin]# systemctl stop keepalived

nginx02网卡信息

nginx01网卡信息

访问nginx01的VIP11.0.1.29,但实际是11.0.1.32响应,因为VIP1漂移到nginx02上,此时nginx02同时绑定VIP1、VIP2。即使nginx01宕机,ngin01的VIP11.0.1.29仍然可以正常使用

4. 模拟nginx01修复宕机

重启nginx01的keepalived(或开机)

访问恢复正常 

模拟nginx02宕机效果也是一样,不再重复实验。

参考文档: 

玩转企业集群运维管理系列(十二):Keepalived 双主、非抢占模式及脑裂问题详解-腾讯云开发者社区-腾讯云

这篇关于nginx+keepalived双主模式双主热备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593341

相关文章

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式