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

news/2024/9/25 13:08:57/

文章目录

    • keepalived
      • 什么是keepalived
      • keeepalived的工作原理
      • keepalived的特点
    • 实现过程
      • 配置步骤:
      • 环境
      • 具体步骤
        • ngx1
        • ngx2
        • 效果测试


keepalived

什么是keepalived

Keepalived 是一个高可用性(High Availability, HA)工具,主要用于 Linux 系统上。它最初是为 LVS(Linux Virtual Server)设计的,但现在已经广泛应用于多种场景中,帮助用户实现服务的负载均衡和故障转移。简单来说,Keepalived 让你可以确保你的服务在遇到故障时,能够迅速切换到备用节点,保持服务的持续可用。

keeepalived的工作原理

Keepalived 的核心工作原理是 VRRP(Virtual Router Redundancy Protocol)。通过 VRRP,Keepalived 可以管理一个或多个虚拟 IP 地址。这些 IP 地址可以在多个服务器之间动态切换。具体流程如下:

节点角色: 在一个 Keepalived 集群中,节点可以是主节点(MASTER)或备份节点(BACKUP)。主节点负责处理流量,而备份节点则在主节点故障时接管流量。

心跳检测: Keepalived 定期发送“心跳”消息,检查主节点的健康状态。如果主节点无法响应,备份节点会自动接管虚拟 IP 地址,接收流量。

优先级设置: 每个节点可以设置一个优先级,优先级高的节点在正常情况下会成为主节点。如果主节点故障,备份节点会根据优先级接管。

虚拟 IP 地址: Keepalived 管理的虚拟 IP 地址对外可用,客户端只需访问这个 IP,系统会自动将请求转发到当前的主节点。

keepalived的特点

高可用性: Keepalived 通过自动故障转移机制,确保服务在主节点故障时不会中断。

负载均衡: 结合 Nginx 等负载均衡器,Keepalived 可以有效分配流量,优化资源利用。

简单易用: Keepalived 的配置相对简单,可以快速上手,适合多种场景。

灵活性: 支持多种配置选项,包括优先级、虚拟 IP 地址等,可以根据需求调整。

监控功能: 可以通过自定义脚本实现健康检查,确保服务的正常运行。

实现过程

在主从模式下,一台服务器作为主服务器(Master),另一台作为备份服务器(Slave)。正常情况下,主服务器绑定一个公网虚拟 IP 并提供负载均衡服务,而备份服务器处于空闲状态。当主服务器发生故障时,备份服务器会接管主服务器的公网虚拟 IP 并提供服务。

配置步骤:

在两台服务器上安装 Nginx 和 Keepalived。
在主服务器上配置 Keepalived 为主模式(MASTER),设置较高的优先级。
在备份服务器上配置 Keepalived 为备份模式(BACKUP),设置较低的优先级。
配置健康检查脚本,用于检测 Nginx 服务是否运行正常。
配置虚拟 IP 地址(VIP),该地址将在主服务器和备份服务器之间漂移。

环境

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

具体步骤

ngx1

安装nginx和keepalived

yum -y install nginx keepalived

作为主端配置

vim /etc/keepalived/keepalived.conf

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

global_defs {router_id LVS_DEVEL1
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.111}
}

然后创建一个测试页面

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

启动nginx和keepalived

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

查看有没有虚拟ip

ip add

在这里插入图片描述

ngx2

安装nginx和keepalived

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

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

global_defs {router_id LVS_DEVEL2
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.111}
}

然后创建一个测试页面

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

启动nginx和keepalived

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

查看ip

ip add

可以看到ngx2现在是没有虚拟ip的
在这里插入图片描述

效果测试

访问虚拟ip
可以看到MASTER主机上nginx的web页面
在这里插入图片描述
现在断开ngx1的网络

nmcli c down ens33

在ngx2上查看ip

ip add

可以看到虚拟ip已经到ngx2上面了
在这里插入图片描述
访问ip
也可以看到是ngx2的nginx的web页面了
在这里插入图片描述
然后返回ngx1,启动网卡

nmcli c up ens33

查看ip

ip add

可以看到虚拟ip已经回到ngx1上了
在这里插入图片描述

同时ngx2的虚拟ip已经消失了
在这里插入图片描述

访问ip也是ngx1的web页面了
在这里插入图片描述
完事


http://www.ppmy.cn/news/1530295.html

相关文章

传输大咖45 | 跨国传输大文件的高效、安全传输系统

企业的跨国合作以成为常态。在跨国合作过程中,大量数据需要在不同国家和地区之间传输。然而,在进行跨国大文件传输时,企业往往会遇到诸如速度慢、安全性低、数据合规性问题以及缺乏有效的日志审计和权限管理等一系列挑战。 跨国传输大文件面临…

UI自动化测试的边界怎么定义?

标题:定义UI自动化测试的边界:从0到1的详细指南 引言: UI自动化测试是现代软件开发过程中至关重要的一环。为了确保自动化测试的有效性和准确性,我们需要明确定义测试的边界。本文将从0到1为您提供一篇详细且规范的指南&#xf…

引用和指针的区别

引用(reference)和指针(pointer)都是 C 中用来间接访问内存中对象的机制,但它们有一些重要的区别。以下是它们在语法、用法和特性上的详细区别。 下面从7个方面来详细说明引用和指针的区别 1. 定义与语法区别 引用&…

C++ asio异步网络库学习记录

最近几天在学习asio异步网络库,今天整理下前几日学习asio库同步读写demo的案例,明天我会整理asio配置的过程。 之前也学习过winsocket,但是不论是winsock还是asio都经历这样几个阶段: 服务端: socket创建socket套接字…

STM32CubeIDE | 使用HAL库的ADC读取内部传感器温度

1、cubemx配置 1.1、系统配置 1.2、GPIO配置 PB2设置为“GPIO_Output” user label设置为“LED” 1.3、串口配置 模式选择为“Asynchronous”,其他默认 1.4、时钟树配置 全部保持默认 2、ADC配置 通道选择“Temperature Sensor Channel”,其他默认 …

14年408-计算机网络

第一题: 解析:OSI体系结构 OSI由下至上依次是:物理层-网络链路层-网络层-运输层-会话层-表示层-应用层。 因此直接为会话层提供服务的是运输层。答案选C 第二题: 解析:数据链路层-交换机的自学习和帧转发 主机a1向交换…

中电金信:源启智能视觉分析系统~助力各行业破局升级,释放新质生产力

作为人工智能与计算机视觉的交叉范畴,智能视觉模仿人类视觉机能,来对各种形式的视觉输入予以处理、理解以及决策。当下,智能视觉已然发展为应用广泛、市场覆盖面大且形式多元的产业方向,获得了国家政策的强力支持。数字化时代搭台…

GIS开发之如何使用OpenLayers,Leaflet,Mapbox,Cesium,ArcGIS, Turf.js 与 D3.js

1、OpenLayers: 描述:OpenLayers是一个高性能、开源的JavaScript库,用于在Web上创建富有的地图应用。它支持多种地图数据源,包括从瓦片服务到矢量数据,并提供了大量的交互功能。特点:功能强大、灵活易用&a…