首页 > 系统相关 >keepalived+nginx实现高可用的案例详解(主主模式)

keepalived+nginx实现高可用的案例详解(主主模式)

时间:2024-09-27 21:48:47浏览次数:10  
标签:VI keepalived virtual nginx 192.168 IP 主模式 节点

文章目录


前言

keepalived主备模式和主主模式有什么区别

Keepalived 是用于实现高可用性和负载均衡的软件,通常用于配置虚拟路由冗余协议(VRRP)。在使用 Keepalived 时,可以配置两种常见的模式:主备模式 和 主主模式。它们在高可用性和负载均衡的实现上有不同的工作方式。下面详细解释这两种模式及它们的区别。

1. 主备模式(Master-Backup Mode)

概念:
主备模式是最常见的一种高可用性配置方式。在这种模式下,只有一个主节点(MASTER)在提供服务,其他节点作为备份节点(BACKUP),只有在主节点宕机或失效时,备份节点才会自动接管并提供服务。

工作流程:
主节点(MASTER):主节点运行正常时,它负责处理所有的流量或请求。它拥有指定的虚拟 IP 地址(VIP),客户端通过这个虚拟 IP 进行访问。
备节点(BACKUP):备节点处于待命状态,持续监控主节点的状态。如果主节点宕机或无法提供服务,备节点就会自动提升为主节点,接管虚拟 IP 并开始处理流量。
故障切换:当主节点恢复时,它可以再次成为主节点(根据优先级高低),备节点会退回到待命状态。

主要特点:
单点提供服务:在任何时候,只有一个节点(主节点)在提供服务。备份节点不处理流量,除非主节点失效。
高可用性(HA):这是典型的高可用性架构,目的是避免服务中断。
低资源利用率:备节点在大多数时候只是等待,没有实际工作,资源利用率相对较低。

场景举例:
一个简单的 Web 服务高可用性场景,主节点在正常情况下处理所有的 HTTP 请求,备份节点在主节点宕机时接管服务。
举例配置(简化版):

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.10.111
    }
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    virtual_ipaddress {
        192.168.10.111
    }
}

state MASTER 的节点负责处理流量,state BACKUP 的节点则等待主节点失效。

2. 主主模式(Active-Active Mode 或 Dual Master Mode)

概念:
在主主模式下,两个节点同时工作,都可以提供服务。它们各自处理部分流量,通常结合负载均衡来实现,同时提高资源利用率和服务的可用性。这里没有严格的“主”和“备”的区分,而是两个节点都处于活动状态。

工作流程:
两个节点同时处理流量:在主主模式下,两个节点共享流量。可以通过负载均衡策略(如轮询、最少连接等)来将客户端的请求分发到不同的节点上。
虚拟 IP(VIP)共享:两个节点可能共享多个虚拟 IP,每个节点管理不同的 VIP。
故障切换:如果其中一个节点宕机或失效,另一个节点可以接管其负责的虚拟 IP 和流量,继续提供服务。

主要特点:
负载均衡:主主模式的主要特点是负载均衡,两台服务器同时提供服务。
高资源利用率:因为两个节点都在工作,资源得到了充分利用。
高可用性(HA)+ 负载均衡(LB):除了高可用性之外,主主模式还能提供负载均衡功能。
复杂性:相对主备模式,配置和管理更加复杂,特别是在同步数据、会话保持等方面。

场景举例:
高并发的 Web 应用服务器。客户端的请求通过负载均衡算法分配给两台服务器,以减轻单台服务器的负担。
数据库集群:两个数据库节点同时提供读服务,写操作通过主节点进行。
举例配置(简化版):

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.10.111
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.10.112
    }
}

这里,两个节点分别作为不同 VRRP 实例的 MASTER,各自处理不同的虚拟 IP(192.168.10.111 和 192.168.10.112)。这就实现了两个节点同时工作。

主备模式 vs 主主模式 的区别
项目主备模式主主模式
节点角色一个主节点,其他节点为备节点两个节点都是主节点,均同时工作
流量处理只有主节点处理流量两个节点都处理流量(负载均衡)
资源利用率备节点不处理流量,资源利用率较低两个节点同时工作,资源利用率高
故障切换主节点失效时备节点接管一个节点失效时另一个节点接管该节点的任务
适用场景简单的高可用性场景,避免单点故障需要高可用性且负载较大的场景,如负载均衡
复杂性配置简单,管理容易配置复杂,管理需要负载均衡和同步机制
总结:

主备模式
强调高可用性,主要目的是避免服务中断,但在资源利用率上存在一些浪费,因为备份节点在正常情况下不处理流量。

主主模式
则不仅提供高可用性,还能够同时处理流量,解决资源利用的问题,并通过负载均衡来分摊负载。不过,主主模式的配置和管理更复杂,适用于负载较大的场景。

环境

主机名ip服务虚拟ip
ngx1192.168.10.11nginx+keepalived192.168.10.111
ngx2192.168.10.12nginx+keepalived192.168.10.111

案例实现具体步骤

在双主模式下,两台服务器都处于活动状态,并且各自绑定一个公网虚拟 IP。
当其中一台服务器发生故障时,另一台服务器会接管发生故障服务器的公网虚拟 IP。
配置步骤:
在两台服务器上安装 Nginx 和 Keepalived。
在两台服务器上都配置 Keepalived 为双主模式,设置相同的优先级。
配置健康检查脚本,用于检测 Nginx 服务是否运行正常。
配置两个虚拟 IP 地址(VIP),每个服务器一个。

ngx1

安装nginx和keepalived

yum -y install nginx keepalived

作为主端配置

vim /etc/keepalived/keepalived.conf

留下需要的配置即可
下面是配置完后的示例

global_defs {
   router_id LVS_DEVEL1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
}

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

解释:
这是一个使用 Keepalived 配置的示例文件。Keepalived 通常用于在 Linux 系统中配置高可用性(HA)和负载均衡。它实现了 VRRP(Virtual Router Redundancy Protocol)协议,用于管理虚拟 IP 地址的主备关系,以确保在主节点故障时备节点能够自动接管虚拟 IP。

1. global_defs 配置块

plaintext
global_defs {
   router_id LVS_DEVEL1
}

global_defs: 全局配置选项。
router_id: 这是一个全局唯一的路由器标识符,可以使用任意字符标识。通常用于日志文件中标识此节点。比如 LVS_DEVEL1 表示这个 Keepalived 配置的名称是 LVS_DEVEL1。
2. vrrp_instance 配置块
文件中有两个 vrrp_instance 配置块,分别命名为 VI_1 和 VI_2,表示两个不同的 VRRP 实例。

vrrp_instance VI_1
plaintext
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
}

vrrp_instance VI_1: 定义一个 VRRP 实例,实例名称为 VI_1。
state MASTER: 指定当前节点为该实例的主节点(MASTER)。在同一实例中,主节点和备节点(BACKUP)之间共享虚拟 IP 地址。
interface ens33: 指定 Keepalived 监控的网络接口(如 ens33)。这个接口是虚拟 IP 将绑定的物理网络接口。
virtual_router_id 51: 虚拟路由器的 ID,用于识别 VRRP 实例。这个 ID 应该在网络中是唯一的(通常范围为 1-255)。
priority 100: 优先级,取值范围为 1-255,数值越大优先级越高。这里设置了 100,因此在正常情况下,该节点将作为 MASTER。
advert_int 1: 设置 VRRP 心跳包的通告间隔时间(秒)。表示每 1 秒发送一次 VRRP 报文。
authentication:
auth_type PASS: 设置验证类型为密码验证。
auth_pass 1111: 设置密码。两台设备在同一个 VRRP 实例中进行通信时,密码需要相同。
virtual_ipaddress: 定义该实例管理的虚拟 IP 地址(VIP)。在该示例中是 192.168.10.111。

vrrp_instance VI_2
plaintext
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.112
    }
}

vrrp_instance VI_2: 定义了另一个 VRRP 实例,实例名称为 VI_2。
state BACKUP: 指定该节点在 VI_2 实例中的状态为备节点(BACKUP)。
virtual_router_id 52: 此实例的虚拟路由器 ID 与 VI_1 中的 51 不同,表明 VI_2 是一个独立的实例。
priority 99: 优先级设置为 99,表示在 VI_2 实例中,该节点的优先级比 VI_1 的 MASTER 节点优先级低,因此它不会成为 MASTER。
virtual_ipaddress: 定义该实例管理的虚拟 IP 地址(VIP)。在该示例中是 192.168.10.112。

配置文件整体解析
配置文件定义了两个 VRRP 实例 VI_1 和 VI_2,分别管理 192.168.10.111 和 192.168.10.112 两个虚拟 IP 地址。
VI_1 的 state 为 MASTER,优先级为 100,因此该节点在 VI_1 实例中为主节点。
VI_2 的 state 为 BACKUP,优先级为 99,因此该节点在 VI_2 实例中为备节点。
VI_1 和 VI_2 实例使用相同的网络接口(ens33)进行 VRRP 通信。
两个实例使用了相同的身份验证密码(auth_pass 为 1111),保证了通信的安全性。

然后创建一个测试页面

echo web1 > /usr/share/nginx/html/index.html

启动nginx和keepalived

systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived
ngx2

安装nginx和keepalived

yum -y install nginx keepalived
vim /etc/keepalived/keepalived.conf

留下需要的配置即可
下面是配置完后的示例

global_defs {
   router_id LVS_DEVEL2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
}

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.10.112
    }
}

然后创建一个测试页面

echo web2 > /usr/share/nginx/html/index.html

启动nginx和keepalived

systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived
验证

ngx1查看ip

ip add

可以看见ngx1为主的虚拟ip 192.168.10.11
在这里插入图片描述

ngx2查看ip

ip add

可以看见ngx2为主的虚拟ip 192.168.10.12
在这里插入图片描述

访问测试
192.168.10.111
在这里插入图片描述
关闭ngx1后

systemctl stop keepalived

虚拟地址消失

ip add

在这里插入图片描述
出现在ngx2上
在这里插入图片描述
同时访问也是ngx2的页面
在这里插入图片描述

同时也能访问192.168.10.112
在这里插入图片描述

192.168.10.112同理
就不多叙述了。

标签:VI,keepalived,virtual,nginx,192.168,IP,主模式,节点
From: https://blog.csdn.net/lwxvgdv/article/details/142596573

相关文章

  • 宝塔Nginx开启fastcgi_cache分别缓存WordPress移动和pc端
    FastCGI_cache是Nginx的缓存模块,能够从Nginx层面实现网页静态化,有效提高网站的并发能力、减少PHP运行时间和请求响应时间,大大提升页面加载速度。Fastcgi_cache能够直接在nginx层面提供缓存内容,而无需涉及PHP或WordPress,在没有第三方广告情况下加速效果很不错!网上不少此教程,但是没......
  • 一文读懂Ingress-Nginx以及实践攻略
    一文读懂Ingress-Nginx以及实践攻略目录1概念1.1什么是Ingress?1.1.1主要功能:1.2Ingress的组件1.3什么是ingress-nginx1.4ingress-nginx优点和限制1.5版本兼容性矩阵2实践:Ingressnginx部署2.1使用helm部署ingress-nginx2.1.1安装和配置Helm2.1.2配置和......
  • NGINX 代理grafana-server
    一、grafana修改配置在root_url后边添加路径/grafana(该路径可自定义,和nginx配置中保持一致即可)vim/etc/grafana/default.ini#后缀与nginx代理后缀保持一致root_url=%(protocol)s://%(domain)s:%(http_port)s/grafana#允许跨域allowed_origins=*#允许iframe嵌入all......
  • vue项目部署到nginx后一刷新页面就404
    在Vue项目部署到Nginx服务器上时,遇到刷新页面显示404的问题,通常是因为Nginx无法正确地处理Vue路由。Vue应用的路由是前端路由,依赖于JavaScript来动态解析URL,当直接访问除根路径外的URL时,Nginx默认会尝试在服务器上找到对应的文件或目录,如果找不到就会返回404错误。为了解决这个问......
  • FastDFS+Nginx+fastdfs-nginx-module集群搭建
    一、实验环境说明 操作系统:Centos6.6x64FastDFS相关版本:fastdfs-5.05fastdfs-nginx-module-v1.16libfastcommon-v1.0.7web服务器软件:nginx-1.7.8角色分配:2个tracker,地址分别为:10.1.1.24310.1.1.244两块磁盘2个group:G1:10.1.1.24510.1.1......
  • nginx: 限流中连接和请求的区别:
    一,关于limit_req和limit_conn的区别whatisthedifference betweenconnectionandrequest? connection是连接,即常说的tcp连接,通过三次握手而建立的一个完整状态机。建立一个连接,必须得要三次握手。断开连接时要有四次挥手的操作.request是指请求,即http请求,tcp连接是......
  • Nginx 配置
    nginx配置文件的的组成Nginx配置文件主要由以下部分组成:全局块、events块、http块.......等组成。全局块:nginx的全局配置作用:从配置文件开始到event块之间的内容,主要会设置影响nginx服务整体运行的配置指令。主要配置包括:运行nginx服务的用户(组)、允许生成的worker_process......
  • nginx: 限制每个ip的并发连接数
    一,limit_conn_zonelimit_conn_zone$binary_remote_addrzone=perip:10m; limit_conn模块用于限制每个客户端的并发连接数,以防止资源被单一客户端耗尽。说明: #定义一个共享内存区域,用于存储连接状态#$binary_remote_addr是客户端的IP地址#zone=perip:10m定义名为......
  • Ubuntu 安装Mysql+Redis+Nginx
    一、安装MySql1.新系统需要安装一下更新aptupdate-yaptdist-upgrade-yaptinstall-ywget2.安装mysql,并修改配置aptinstall-ymysql-servermysql配置文件通常位于vi/etc/mysql/mysql.conf.d/mysqld.cnf在[mysqld]把bind改成0.0.0.0,增加连接数,修改mode,开......
  • 【保姆式】linux nginx安装及配置教程+防火墙设置
    linux版本:CentOS-7-x86_64-DVD-1708文章目录1.换个源先1.前置准备(看过前两博客可以直接跳过)2.步骤二:对系统本身的yum源进行备份3.步骤三:下载阿里云CentOS7镜像源配置文件4.步骤四:删除除阿里及备份外的所有cent源文件5.步骤五:清除旧的YUM缓存6.步骤六:创建新......