OpenEuler系统常用服务(十)

张开发
2026/4/13 11:38:13 15 分钟阅读

分享文章

OpenEuler系统常用服务(十)
LVS Keepalived Nginx 高可用集群实现方案摘要本文档详细阐述了在OpenEuler操作系统上利用yum包管理器构建一个高可用、高性能的Web服务集群的方案。该方案的核心组件包括LVSLinux Virtual Server作为四层负载均衡器、Keepalived提供LVS的高可用性防止单点故障、以及Nginx作为七层反向代理和应用服务器。方案涵盖了理论基础、系统架构设计、详细的安装配置步骤包含关键配置文件示例、流程图说明以及必要的测试验证方法。目标是实现一个能够处理高并发流量、具备故障自动转移能力、易于维护的Web服务平台。关键词LVS、Keepalived、Nginx、高可用、负载均衡、OpenEuler、DR模式、yum第一部分理论基础高可用性 (High Availability, HA)定义指系统或服务能够在规定的时间范围内持续提供服务的能力。目标是最大限度地减少因硬件故障、软件错误、网络问题或维护操作导致的停机时间。通常通过冗余设计和故障自动转移来实现。指标通常用可用性百分比表示如99.9%年停机时间约8.76小时、99.99%年停机时间约52.6分钟。实现原理消除单点故障 (SPOF)。关键组件如负载均衡器、应用服务器、数据库都需要冗余备份并配备监控和自动切换机制。负载均衡 (Load Balancing)目的将网络流量或计算任务分配到多个服务器上以提高系统的整体处理能力扩展性、响应速度性能和可靠性避免单台服务器过载。层级四层负载均衡 (L4)工作在OSI模型的传输层TCP/UDP。主要基于IP地址和端口进行流量分发。速度快效率高对应用透明。代表LVS。七层负载均衡 (L7)工作在OSI模型的应用层HTTP/HTTPS。可以解析应用层协议如HTTP头部根据内容URL、Cookie、Header等进行更智能的路由。功能强大可实现会话保持、内容优化等。代表Nginx, HAProxy。算法轮询 (Round Robin)、加权轮询 (Weighted Round Robin)、最少连接 (Least Connections)、源IP哈希 (Source IP Hash) 等。核心组件介绍LVS (Linux Virtual Server):概念由章文嵩博士开发的内置于Linux内核的IP层四层负载均衡技术。它将一组物理服务器Real Servers, RS虚拟化为一个高性能、高可用的虚拟服务器Virtual Server, VS。客户端只访问虚拟IP (Virtual IP, VIP)。工作模式NAT (Network Address Translation):LVS修改请求和响应的IP地址。RS网关必须指向LVS。进出流量都经过LVS容易成为瓶颈。TUN (IP Tunneling):LVS将请求封装在IP隧道包中发送给RSRS直接响应客户端。需要RS支持隧道协议和配置特殊路由。跨机房适用。DR (Direct Routing):本方案采用模式。LVS只修改请求帧的MAC地址将请求转发给RS。RS配置VIP在loopback接口上并配置ARP抑制。RS直接响应客户端。性能最高但要求LVS和RS在同一个二层网络同一VLAN。调度算法LVS支持多种调度算法如rr, wrr, lc, wlc, lblc, lblcr, dh, sh, sed, nq。Keepalived:作用提供LVS服务的高可用性。基于VRRP (Virtual Router Redundancy Protocol) 协议实现。多个Keepalived节点通常两个组成一个虚拟路由器组共享一个VIP。通过优先级选举出一个主节点 (Master)负责处理流量。主节点故障时备节点 (Backup) 自动接管VIP和服务如LVS配置的同步。功能VIP漂移、服务健康检查对RS、LVS自身进程等、状态切换脚本执行。Nginx:角色在本方案中部署在Real Server上。七层负载均衡 (可选):如果后端还有多个应用实例如Tomcat集群Nginx可进一步进行七层负载均衡。反向代理:接收LVS转发来的请求代理到后端应用服务器或自身处理静态请求。Web服务器:处理静态文件请求HTML, CSS, JS, 图片等。优点高性能、高并发、低内存占用、丰富的功能模块如Rewrite, Gzip, SSL, Cache。方案架构与工作原理目标构建一个无单点故障、可水平扩展的Web服务入口。架构图 (请在此处插入流程图文字描述如下)----------------------------------------------------- | Internet Clients | | (访问 http://www.example.com, DNS解析到VIP) | --------------------------|-------------------------- | (请求目标: VIP) v ----------------------------------------------------- | Keepalived LVS 集群 | | ----------------- ----------------- | | | Node1 (Master) |--| Node2 (Backup) | | VRRP协议选举Master | | - Keepalived | | - Keepalived | | 主节点持有VIP | | - LVS (ipvsadm) | | - LVS (ipvsadm) | | 主节点配置LVS规则 | --------|-------- --------|-------- | | | | (心跳线) | ----------|----------------------|------------------- | (LVS DR模式转发请求) | (备节点监听准备接管) v v (仅当主节点故障时接管) ----------------------------------------------------- | Real Server 集群 | | -------------- -------------- --------------| | | RS1 | | RS2 | | RS3 || | | - Nginx | | - Nginx | | - Nginx || | | - 配置VIP (lo)| | - 配置VIP (lo)| | - 配置VIP (lo)|| | | - ARP抑制 | | - ARP抑制 | | - ARP抑制 || | ------|------- ------|------- ------|-------| | | | | | | ---------------------------------- | (响应直接返回客户端不经过LVS) --------------------------|-------------------------- | (响应源IP: RS的VIP) v ----------------------------------------------------- | Internet Clients | -----------------------------------------------------工作流程:客户端请求用户通过浏览器访问域名如http://www.example.com)DNS将该域名解析到LVS集群的虚拟IP (VIP)。VIP访问客户端向VIP发送HTTP(S)请求。Keepalived选举Keepalived节点间通过VRRP协议通信选举出一个主节点Master。主节点拥有VIP配置在其物理网卡上并激活其LVS配置。备节点Backup监听主节点状态。LVS负载均衡 (DR模式)主LVS节点接收到目标为VIP的请求包。根据配置的调度算法如wlcLVS选择一个Real Server (RS)。LVS不修改请求包的IP地址源IP仍是客户端IP目标IP仍是VIP而是只修改二层帧头将目标MAC地址改为选中的RS的MAC地址然后将数据帧发送到局域网。Real Server处理选中的RS配置了VIP在loopback接口上的网卡接收到该数据帧。由于目标MAC地址是自己的物理MAC地址网卡接收该帧。数据帧被传递到TCP/IP协议栈。协议栈发现目标IP地址VIP配置在本机的lo接口上因此认为这个包是发给自己的由本机的网络服务这里是Nginx处理。Nginx处理请求可能作为反向代理转发给后端应用或直接处理静态文件。Real Server响应Nginx生成响应包。响应包的源IP地址是VIP因为RS的lo接口配置了VIP目标IP是客户端IP。由于RS配置了ARP抑制通常通过内核参数arp_ignore和arp_announce它不会响应对VIP的ARP请求也不会向外宣告自己拥有VIP。RS直接将响应包发送给客户端通常通过其默认网关响应包不经过LVS节点。客户端收到的响应看起来是直接来自VIP。故障转移 (Failover):Keepalived持续监控主节点的状态自身进程、LVS服务状态、网络连通性等。如果主节点故障如宕机、网络中断、LVS进程退出Keepalived备节点检测到VRRP心跳丢失或优先级降低。备节点提升自己为新的主节点接管VIP将其配置到自己的物理网卡上并激活自己配置的LVS规则通常通过配置同步或脚本加载。客户端流量开始流向新的主LVS节点集群服务恢复。整个过程对客户端透明可能感知到短暂延迟或连接重置。Real Server健康检查 (可选):Keepalived除了监控LVS节点本身还可以配置对Real Server如Nginx端口的健康检查。如果某个RS失效Keepalived主节点会将其从LVS的可用服务器池中移除不再向其转发流量。当RS恢复后再将其添加回池中。方案优势高可用LVS层通过Keepalived实现主备切换消除负载均衡器单点故障。RS层通过多节点冗余单个RS故障不影响整体服务。高性能LVS DR模式性能接近硬件负载均衡器RS响应直接返回客户端减轻LVS压力。Nginx高效处理HTTP请求。可扩展可以方便地水平扩展Real Server的数量以适应增长的流量。成本低基于开源软件和通用服务器硬件。灵活性Nginx提供强大的七层处理能力。方案限制二层网络依赖DR模式要求LVS Director和所有Real Server必须在同一个二层广播域同一个VLAN/子网否则MAC地址改写无法被RS接收。ARP配置RS需要正确配置VIP和ARP抑制参数否则可能导致ARP冲突。VIP配置RS配置VIP在lo接口仅用于接收目标为VIP的包和发送源为VIP的包不用于实际通信。故障转移时间Keepalived切换通常需要几秒钟期间可能有短暂服务中断或连接丢失。第二部分系统环境与准备操作系统OpenEuler 20.03 LTS SP3 (或更高兼容版本)。所有节点均使用此系统。节点规划 (示例):LVS Keepalived 节点 (2台):主机名lvs-keepalived-01, lvs-keepalived-02物理IP (DIP): 192.168.10.10/24 (lvs1), 192.168.10.11/24 (lvs2) - 用于节点间通信和管理。虚拟IP (VIP): 192.168.10.100/24 - 客户端实际访问的IP。角色运行Keepalived和LVS (ipvsadm)。一台为Master一台为Backup。Real Server 节点 (至少2台, 示例3台):主机名nginx-rs-01, nginx-rs-02, nginx-rs-03物理IP (RIP): 192.168.10.20/24 (rs1), 192.168.10.21/24 (rs2), 192.168.10.22/24 (rs3)虚拟IP (VIP): 192.168.10.100/32 - 配置在loopback接口 (lo:0 或 lo:1)。角色运行Nginx处理实际的Web请求。网络要求:所有节点LVS和RS必须位于同一个子网192.168.10.0/24和同一个VLAN二层互通。所有节点需要能访问互联网用于yum安装或配置本地yum源。确保防火墙firewalld或iptables规则允许节点间必要的通信VRRP组播、健康检查端口、LVS转发流量、Nginx端口。建议关闭所有节点的SELinux (setenforce 0; 编辑/etc/selinux/config设置SELINUXpermissive或disabled)以简化排错生产环境需谨慎评估。确保所有节点时间同步使用ntp或chronyd。软件包:将通过yum安装LVS: 内核自带ip_vs模块管理工具ipvsadm。Keepalived:keepalived。Nginx:nginx(OpenEuler官方源或Nginx官方源)。用户权限:使用root用户或在sudo权限下执行安装和配置命令。第三部分详细部署步骤1. 基础配置 (所有节点)设置主机名:# 在 lvs-keepalived-01 上 hostnamectl set-hostname lvs-keepalived-01 # 在 lvs-keepalived-02 上 hostnamectl set-hostname lvs-keepalived-02 # 在 nginx-rs-01/02/03 上 hostnamectl set-hostname nginx-rs-01 # 依此类推编辑/etc/hosts文件添加所有节点的IP和主机名映射192.168.10.10 lvs-keepalived-01 192.168.10.11 lvs-keepalived-02 192.168.10.20 nginx-rs-01 192.168.10.21 nginx-rs-02 192.168.10.22 nginx-rs-03配置网络:确认物理网卡如ens33已正确配置DIP/RIP。仅Real Server节点:配置VIP到loopback接口。创建一个新的loopback接口配置文件 (如/etc/sysconfig/network-scripts/ifcfg-lo:0)DEVICElo:0 IPADDR192.168.10.100 NETMASK255.255.255.255 ONBOOTyes或者使用临时命令重启失效ip addr add 192.168.10.100/32 dev lo label lo:0配置ARP抑制 (仅Real Server节点):这是DR模式的关键防止RS响应VIP的ARP请求。编辑/etc/sysctl.conf添加或修改以下行net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.ipv4.conf.default.arp_ignore 1 net.ipv4.conf.default.arp_announce 2 net.ipv4.conf.lo.arp_ignore 1 net.ipv4.conf.lo.arp_announce 2使配置生效sysctl -p关闭防火墙或配置规则 (所有节点):临时关闭firewalld (测试用)systemctl stop firewalld systemctl disable firewalld # 生产环境不推荐禁用需配置规则生产环境建议配置规则LVS节点允许VRRP协议通常组播地址224.0.0.18协议112/vrrp、允许健康检查端口如TCP 80。RS节点允许VIP上的服务端口如TCP 80、允许LVS节点的健康检查如果Keepalived配置了对RS的检查。示例命令 (调整接口和端口)firewall-cmd --permanent --add-rich-rulerule protocol valuevrrp accept firewall-cmd --permanent --add-port80/tcp firewall-cmd --reload禁用SELinux (可选, 所有节点):setenforce 0 sed -i s/SELINUXenforcing/SELINUXpermissive/g /etc/selinux/config # 或 disabled配置时间同步 (所有节点):yum install chrony -y systemctl enable --now chronyd chronyc sources # 检查同步状态2. 安装软件在 LVS Keepalived 节点 (lvs-keepalived-01, 02) 上:yum install keepalived ipvsadm -ykeepalived: 提供VRRP和健康检查功能。ipvsadm: 用于管理和监控LVS规则。在 Real Server 节点 (nginx-rs-01, 02, 03) 上:yum install nginx -ynginx: Web服务器和反向代理。3. 配置 Keepalived (LVS节点)主节点 (lvs-keepalived-01) 配置文件/etc/keepalived/keepalived.conf:! Configuration File for keepalived global_defs { router_id LVS_KA_MASTER # 标识本节点主备应不同 } vrrp_instance VI_1 { state MASTER # 初始状态主节点为MASTER interface ens33 # 绑定VRRP协议的物理网卡 virtual_router_id 51 # 虚拟路由器ID同一组集群必须相同 (1-255) priority 100 # 优先级主节点高于备节点 (如100 90) advert_int 1 # VRRP组播通告间隔(秒) authentication { auth_type PASS # 认证类型 auth_pass your_password_here # 认证密码主备必须相同 } virtual_ipaddress { 192.168.10.100/24 dev ens33 # 虚拟IP地址配置到物理网卡上 } # 配置LVS虚拟服务器和Real Server池 virtual_server 192.168.10.100 80 { delay_loop 6 # 健康检查间隔(秒) lb_algo wlc # 负载均衡调度算法 (加权最小连接) lb_kind DR # LVS工作模式 (Direct Routing) persistence_timeout 0 # 会话保持时间(秒)0表示不保持 protocol TCP # 服务协议 # 真实服务器配置 (Real Server 1) real_server 192.168.10.20 80 { weight 1 # 权重 # TCP方式健康检查 TCP_CHECK { connect_timeout 3 # 连接超时(秒) nb_get_retry 3 # 重试次数 delay_before_retry 3 # 重试间隔(秒) connect_port 80 # 检查端口 } } # 真实服务器配置 (Real Server 2) real_server 192.168.10.21 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } # 真实服务器配置 (Real Server 3) real_server 192.168.10.22 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } }备节点 (lvs-keepalived-02) 配置文件/etc/keepalived/keepalived.conf:! Configuration File for keepalived global_defs { router_id LVS_KA_BACKUP } vrrp_instance VI_1 { state BACKUP # 初始状态为备 interface ens33 virtual_router_id 51 priority 90 # 优先级低于主节点 advert_int 1 authentication { auth_type PASS auth_pass your_password_here } virtual_ipaddress { 192.168.10.100/24 dev ens33 } virtual_server 192.168.10.100 80 { delay_loop 6 lb_algo wlc lb_kind DR persistence_timeout 0 protocol TCP real_server 192.168.10.20 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.10.21 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.10.22 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } }启动 Keepalived 服务 (两个LVS节点):systemctl enable --now keepalived systemctl status keepalived # 检查状态在主节点 (lvs-keepalived-01) 上执行ip addr show ens33应该能看到VIP (192.168.10.100) 被添加到ens33接口。在备节点 (lvs-keepalived-02) 上执行ip addr show ens33应该不看到VIP (除非主节点故障)。检查LVS规则是否生效 (主节点上)ipvsadm -Ln输出应类似IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:80 wlc - 192.168.10.20:80 Route 1 0 0 - 192.168.10.21:80 Route 1 0 0 - 192.168.10.22:80 Route 1 0 04. 配置 Nginx (Real Server节点)配置 Nginx (所有RS节点):编辑/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf(示例配置):server { listen 80; # 监听端口 server_name localhost; # 或实际域名 location / { root /usr/share/nginx/html; index index.html index.htm; } # 为了区分测试可以在每个RS的index.html中标记自己 # location / { # return 200 This is RS: $hostname\n; # } }* 创建或修改测试页面 /usr/share/nginx/html/index.html**最好在每个RS上放置略有不同的内容**如包含主机名以便测试负载均衡是否生效。 * 启动Nginxsystemctl enable --now nginx systemctl status nginx* 验证Nginx本地访问在每台RS上 curl http://localhost 或 curl http://192.168.10.20 (用其自身RIP) 应能看到测试页面。重要确保RS上的Nginx监听的是0.0.0.0:80或*:80而不是特定的IP地址。因为它需要接收目标地址为VIP (192.168.10.100) 的请求包。5. 验证ARP抑制 (RS节点)在RS节点上尝试arping -I lo -c 1 192.168.10.100。由于arp_ignore1lo接口不应该响应这个ARP请求。在RS节点上尝试arping -I ens33 -c 1 192.168.10.100。由于arp_announce2ens33接口在向外宣告时会使用其物理IPRIP作为源IP而不会宣告VIP。第四部分测试与验证基本功能测试:VIP可达性:从集群外部或内部非集群节点ping192.168.10.100应该通由当前Master LVS节点响应。Web服务访问:使用浏览器或curl http://192.168.10.100。应该能访问到Nginx的测试页面。多次刷新观察返回的内容如果每个RS的页面不同应该能看到内容在变化或通过ipvsadm -Ln观察连接数变化证明负载均衡生效。LVS规则验证 (Master节点):ipvsadm -Ln # 查看LVS规则和连接状态 ipvsadm -Lnc # 查看连接详细信息当有访问流量时ActiveConn和InActConn计数会增加。Keepalived主备切换测试:查看状态:在两台LVS节点上运行systemctl status keepalived或journalctl -u keepalived -f观察哪个是Master。模拟主节点故障:方法1在主节点 (lvs-keepalived-01) 上停止Keepalived服务systemctl stop keepalived方法2断开主节点的网络如ifdown ens33。观察备节点:在备节点 (lvs-keepalived-02) 上再次运行ip addr show ens33应该能看到VIP (192.168.10.100) 现在配置在它的ens33上。运行ipvsadm -Ln应该能看到LVS规则已经激活。查看Keepalived日志 (journalctl -u keepalived)应该能看到状态切换为MASTER的记录。测试服务:再次访问http://192.168.10.100服务应仍然可用可能短暂中断。恢复主节点:恢复主节点的网络或启动Keepalived。观察VIP是否漂移回主节点主节点日志变MASTER备节点变BACKUPVIP在主节点上。Real Server故障测试:在某一台RS节点 (如nginx-rs-01) 上停止Nginxsystemctl stop nginx在当前Master LVS节点上等待健康检查周期delay_loop定义如6秒后运行ipvsadm -Ln。观察故障的RS (如192.168.10.20) 的状态应该被标记为不可用可能显示为- 192.168.10.20:80 Route 1 0 0但无新连接分配给它或根据Keepalived配置可能直接被移除。访问VIP流量应该只被分发到其他正常的RS上。恢复故障RS的Nginx服务。观察它是否被自动加回LVS池。压力测试 (可选):使用工具如ab(Apache Benchmark) 或wrk对VIP进行压力测试观察集群处理能力。第五部分监控与维护监控:LVS节点状态:Keepalived进程状态、VIP持有状态、LVS规则状态。Real Server状态:Nginx进程状态、端口监听状态、系统资源CPU、内存、网络。服务健康:Web服务可用性、响应时间。工具:Zabbix, Prometheus Grafana, Nagios 等。关注ipvsadm的输出、Keepalived日志、Nginx日志和状态页 (stub_status)。日志:Keepalived:/var/log/messages或journalctl -u keepalived。关注状态切换、健康检查失败信息。Nginx:/var/log/nginx/access.log,/var/log/nginx/error.log。维护:添加/移除RS:修改Keepalived配置文件 (real_server块)重启Keepalived服务 (或使用reload如果支持)。确保RS正确配置VIP和ARP抑制。升级软件:逐个节点进行避免同时中断服务。注意配置备份。备份配置:定期备份/etc/keepalived/keepalived.conf,/etc/nginx/nginx.conf等重要配置文件。第六部分总结本方案成功地在OpenEuler系统上利用yum安装的LVS (DR模式)、Keepalived和Nginx构建了一个高性能、高可用的Web服务集群。通过LVS实现高效的四层负载均衡Keepalived保障了LVS服务本身的高可用性Nginx则作为灵活可靠的反向代理和Web服务器处理应用请求。方案详细阐述了理论基础、架构设计、网络要求、软件安装、配置文件示例Keepalived主备配置、Nginx基础配置、ARP抑制设置、部署步骤以及全面的测试验证方法。该架构能够有效应对单点故障提升服务的可用性和可扩展性适用于需要高并发访问和业务连续性的Web应用场景。注意事项生产环境务必仔细配置防火墙规则和安全策略避免禁用SELinux。根据实际业务需求调整Keepalived的健康检查参数、LVS调度算法和权重。考虑Nginx后端的应用服务器如Tomcat的高可用性本方案主要关注入口层的高可用。定期进行故障切换演练和压力测试。

更多文章