高可用与负载均衡实验项目准备主机名ipvip角色server1192.168.88.142192.168.36.100调度器VSserver2192.168.88.146192.168.36.100真实服务器RSserver3192.168.88.144192.168.36.100真实服务器RSserver4192.168.88.145测试机修改ip名解析ip地址vim/etc/sysconfig/network-scripts/ifcfg-eth0hostnamectl set-hostname server3vim/etc/hostsLVS 负载均衡基础ipvsadm 规则详解LVSLinux Virtual Server是 Linux 内核自带的四层负载均衡器它的管理工具是 ipvsadm。本文面向新手梳理最常用的 LVS 规则操作帮助快速上手。LVS 的规则分为两层层级说明示例虚拟服务VIP对外提供服务的入口 IP:Port192.168.88.100:80真实服务器RIP后端实际处理请求的服务器192.168.88.142:80命令语法结构ipvsadm 的命令结构遵循“增删改查”的逻辑操作虚拟服务VIP真实服务器RIP添加-A-a删除-D-d修改-E-e查看-L-L-tTCP 协议-u 表示 UDP-srr调度算法为轮询Round Robin常用调度算法·rr轮询依次分发·wlc加权最少连接推荐生产环境·sh源地址哈希同一客户端始终访问同一台 RS添加真实服务器RIPipvsadm -a -t vip -r 真实服务器ip -g参数含义-g转发模式DR直接路由-m转发模式NAT网络地址转换-i转发模式TUN隧道权重设置加权算法时需要ipvsadm -a -t 192.168.88.100:80 -r 192.168.88.146:80 -g -w 2-w 2 表示权重为 2权重越高分配的流量越多。查看当前规则ipvsadm -ln-n 不解析 IP 和端口显示数字速度更快删除规则# 删除单个真实服务器注意不带 -g/-m/-i ipvsadm -d -t 192.168.88.100:80 -r 192.168.88.146:80 # 删除整个虚拟服务 ipvsadm -D -t 192.168.88.100:80 # 清空所有规则 ipvsadm -C三种工作模式对比特性NAT-mDR-gTUN-i调度器位置在请求和响应路径中间仅处理请求仅处理请求RS 是否需要绑定 VIP❌ 不需要✅ 必须绑定在 lo 回环网卡✅ 必须配置隧道RS 网关要求必须指向调度器 IP指向标准网关不要指向调度器指向标准网关数据流向请求和响应都经过调度器请求经调度器响应直回客户端请求经调度器响应直回客户端性能一般调度器可能成为瓶颈高响应不经过调度器较高支持跨网段典型场景内网环境RS 和调度器在同一网段最常用适合大多数 Web 服务RS 和调度器不在同一网段保存与恢复规则# 保存规则到文件ipvsadm-save/etc/sysconfig/ipvsadm# 恢复规则ipvsadm-restore/etc/sysconfig/ipvsadmDR模式下的LVS配置实例假设VIP192.168.88.142:80RS1192.168.88.146:80RS2192.168.88.144:801、VS调度器配置·ipvsadm#安装yuminstall-yipvsadm pvsadm-ln#在调度器上绑定 VIPipaddradd192.168.88.100/24 dev ens32#添加虚拟服务器ipvsadm-A-t192.168.88.100:80-srr#添加真实服务器RSipvsadm-a-t192.168.88.100:80-r192.168.88.144:80-g#删除某个真实服务器ipvsadm-d-t192.168.88.100:80-r192.168.88.146:80-g#修改配置ipvsadm-E-t192.168.88.100:80-swlc ipvsadm-e-t192.168.88.100:80-r192.168.88.146-m-w3ipvsadm-e-t192.168.88.100:80-r192.168.88.144-m-w3#保存配置ipvsadm-save/etc/sysconfig/ipvsadm#恢复配置ipvsadm-restore/etc/sysconfig/ipvsadm2、RS真实服务器配置yuminstall-yhttpdechoserver2/var/www/html/index.html systemctlenablehttpd#添加vipipa a192.168.88.100/24 dev eth0 yuminstallarptables##向INPUT链添加一条规则 针对IP为192.168.88.100的arp包##对匹配的报文执行丢弃arptables-AINPUT-d192.168.88.100-jDROP##向OUTPUT链添加一条规则 针对ip为192.168.88.100的arp包##对匹配的报文执行修改操作 将匹配的报文源地址修改为192.168.88.146正常接口地址arptables-AOUTPUT-s192.168.88.100-jmangle --mangle-ip-s192.168.88.146##保存规则arptables-save/etc/sysconfig/arptables systemctlenablearptables3、测试端curl192.168.88.100#for表示测试10次foriin{1..10};docurl192.168.88.100;donearptables是一个用于管理 ARP (Address Resolution Protocol) 数据包过滤规则的 Linux 命令行工具。它的设计和用法与广为人知的iptables 非常相似但作用的网络层次不同专门用于处理第 2 层数据链路层的 ARP 请求和响应。核心工作·接受 (ACCEPT)允许符合规则的 ARP 数据包通过。·丢弃 (DROP)直接丢弃符合规则的 ARP 数据包不作任何回应。·继续 (CONTINUE)继续检查链中的下一条规则。·返回 (RETURN)停止在当前链中匹配返回到调用它的链。为什么需要 arptables在 LVS-DR 架构中有一个关键特征所有的真实服务器RS和负载均衡器Director都配置了相同的虚拟 IP 地址VIP。这会引发一个严重的问题·当客户端请求 VIP 时需要通过 ARP协议来获取 VIP 对应的 MAC 地址。·由于网络中有多台服务器都配置了 VIP当 ARP 广播请求“谁拥有 VIP”时所有的 RS 都会收到这个广播并且默认情况下它们都会尝试去响应声称自己拥有这个 IP。·这会导致 ARP 缓存混乱。客户端或上游路由器可能会将 VIP 的请求错误地发送给某一个 RS从而绕过负载均衡器Director使 LVS 集群失效。arptables 的解决方案1、阻止响应 VIP 的 ARP 请求arptables -A INPUT -d 192.168.88.100 -j DROP这条规则会丢弃DROP所有发往本机、且目标 IP 地址是 VIP 的 ARP 请求数据包。简单来说就是让 RS 对“询问 VIP MAC 地址”的广播请求充耳不闻不作任何响应。2、修改从 VIP 发出的 ARP 响应arptables -A OUTPUT -s 192.168.88.100 -j mangle --mangle-ip-s 192.168.88.146这条规则会篡改mangle所有从本机发出、且源 IP 地址是 VIP 的 ARP 响应数据包。它会将响应包中的源 IP 地址从 VIP 修改为当前 RS 自己的真实 IP 地址RIP。LVS NAT模式它通过地址转换来实现负载均衡。在这种模式下负载均衡器Director扮演着网关的角色所有进出真实服务器RS的流量都必须经过它。核心原理DNAT SNAT目标地址转换 (DNAT)当客户端请求到达负载均衡器时负载均衡器会将数据包的目标IP地址从虚拟IPVIP修改为后端某一台真实服务器的IPRIP。源地址转换 (SNAT)当真实服务器处理完请求并返回响应给负载均衡器后负载均衡器在将响应发回给客户端之前会将数据包的源IP地址从RIP修改回VIP。优缺点分析·优点节省公网IP只有负载均衡器需要一个公网IPVIP后端的真实服务器可以使用私有IP地址有效节约了IP资源。安全性高真实服务器隐藏在负载均衡器之后客户端无法直接访问提高了后端服务的安全性。支持端口转换可以将外部请求的VIP:Port映射到内部RS的不同端口上例如将VIP:80映射到RS1:8080和RS2:9000。·缺点性能瓶颈这是NAT模式最主要的缺点。由于所有请求和响应的数据包都必须经过负载均衡器进行地址转换当访问量巨大时负载均衡器会成为整个系统的性能瓶颈。理论上一个100M网络的负载均衡器最多能支撑22台后端服务器。RS网关限制所有真实服务器的默认网关都必须指向负载均衡器的内网IPDIP这在某些复杂的网络拓扑中可能不够灵活。配置要求负载均衡器Director必须至少有两块网卡。一块连接外网WAN配置公网IPVIP另一块连接内网LAN配置私有IPDIP。真实服务器RS可以是任何支持TCP/IP的操作系统。它们只需要配置内网IPRIP并将默认网关指向负载均衡器的DIP。内核参数在负载均衡器上必须开启内核的IP转发功能通过 echo 1 /proc/sys/net/ipv4/ip_forward 或在sysctl.conf中设置 net.ipv4.ip_forward1 来实现。NAT模式下LVS配置实例Director端1、添加网卡假设eth0–对内 eth1–对外VIP:eth1192.168.30.100GATEWAY:eth0192.168.88.142RS1:192.168.88.144RS2192.168.88.1462、开启路由vim/etc/sysctld/lvs.conf#保存退出后,开启转发功能systemctl-systemipaddr del192.168.88.100/24 dev eth04、加载nat模块modprobe iptable_nat#lvs规则ipvsadm-A-t192.168.30.128:80-srr#对外网址ipvsadm-a-t192.168.30.128:80-r192.168.88.146:80-mipvsadm-a-t192.168.30.128:80-r192.168.88.144:80-mRS端ipaddr del192.168.88.100/24 dev eth0 arptables-Farptables-save arptables-save/etc/sysconfig/arptablesipr default via192.168.88.2 dev eth0 proto static metric100#删除原有路由配置ipr d default via192.168.88.2#必须指向调度器ip,以此类推所有的RS都这样配置ipr a default via192.168.88.142测试另开服务器1、ip配置确保与外网网段一致nmcli c reload nmcli c up eth0 systemctl restart networkipaddr del192.168.88.145 dev eth0curl192.168.30.128#如果测试不成功可以重启一下虚拟机keepalivedLinux 下的高可用HA和负载均衡解决方案主要基于VRRPVirtual Router Redundancy Protocol虚拟路由冗余协议实现。它最初为LVSLinux Virtual Server提供健康检查后来独立发展为通用的服务高可用工具。核心架构组件作用VRRP Stack实现主备切换管理 VIP虚拟IP漂移Checkers对后端服务/本机服务做健康检查IPVSLVS 内核调度器接口四层负载均衡Notify状态变更时执行自定义脚本VRRP工作原理VRID虚拟路由器标识1-255同一组主备必须相同VIP虚拟 IP 地址对外提供服务的统一入口Master主节点持有 VIP处理流量Backup备节点监听 Master随时准备接管使用场景数据库连接池防止空闲连接被服务端或防火墙切断。长轮询 / WebSocket维持浏览器与服务器的实时通道。微服务间通信如 gRPC 的 keepalive 配置检测对端健康状态。SSH / VPN 隧道防止 NAT 超时导致隧道中断。典型配置主备模式Master (priority 100) Backup (priority 90)双主模式两台机器互为主备各持一个 VIP健康检查TCP_CHECK 或自定义脚本如 check_nginx.sh与 Nginx/HAProxy 结合最常见的负载均衡高可用架构DR keepalive主备模式配置示例·环境规划角色IP 地址说明VIP192.168.88.100虚拟IP对外提供服务Director-Master192.168.88.143Keepalived Master LVSDirectorDirector-Backup192.168.88.144Keepalived Backup LVS DirectorRS1192.168.88.145Real Server 1 (Nginx)RS2192.168.88.146Real Server 2 (Nginx)MASTER主节点#清除资源 ip a d 192.168.88.100 dev eth0 ipvsadm -C安装并配置yum install -y keepalived yum install -y mailx vim /etc/keepalived/keepalived.conf systemctl restart keepalived备用节点配置和主节点的不同之处检验keepalivedsystemctl enable --now keepalived测试keepalived健康检测例1、systemctl stop httpd ipvsadm-lnsystemctl restart httpd例2、关掉server1服务看资源会不会转移到server4拓展七层负载均衡主备节点配置示例·安装haproxy并进行配置yuminstall-yhaproxyvim/etc/haproxy/haproxy.cfg·启动haproxy#查看80端口占用情况ss-tlnp|grep:80 systemctl stop httpdsystemctl start haproxy.service#backup配置yuminstall-yhaproxy#从server1 copy配置文件scp/etc/haproxy/haproxy.cfg server4:/etc/haproxy#sever1 vim /etc/rsyslog.confsystemctl restart rsyslog.servicevim keepalived.confvim /opt/check_haproxy.sh chmod x /opt/check_haproxy.sh #保留权限复制到server4 scp -p /opt/check_haproxy.sh scp /etc/keepalived/keepalived.conf server4:/etc/keepalived systemctl stop haproxy.service systemxtl restart keepalivednetstat-tnlp|grep:80server4端systemctl stop haproxy.service容易出现的错误后端服务器没有开启web服务HAProxy 只是一个转发器它需要后面有真正的 Web 服务器如 Nginx、Apache、Tomcat在运行。如果后端机器上没有运行这些服务或者服务挂了就会报这个错。·检查 HAProxy 配置文件Pacemarker高可用Pacemaker 是 Linux 下企业级的集群资源管理器CRM与 Corosync集群通信层配合实现多节点集群的高可用。在单机部署中如果服务器宕机业务就会中断。Pacemaker 是一个 集群资源管理器CRM, Cluster Resource Manager它可以自动检测节点故障并将服务如 IP、Web 服务器、数据库快速切换到备用节点实现业务高可用。关键组件概念说明节点Node集群中的一台服务器如 server1、server4资源Resource需要管理的高可用服务如 VIP、Nginx、MySQL、共享存储挂载点资源代理RA, Resource Agent启动/停止/监控资源的脚本如ocf:heartbeat:IPaddr2、systemd:httpd组Group将多个资源捆绑在一起保证它们运行在同一节点并按顺序启动约束Constraint控制资源的启动顺序、是否同居、位置偏好等STONITH脑裂保护机制故障时强制重启/关机故障节点生产环境必须测试可禁用主节点备节点共享存储·主机配置免密ssh-keygen ssh-copy-id server4#server4上检验sshserver1双节点配置在所有节点上安装集群软件server1,server4yuminstall-ypacemaker pcs psmisc policycoreutils - python可能出现的问题·磁盘空间不足解决方法找出占用空间很大的进程ls -l /proc/*/fd/* 2/dev/null | grep (deleted) | grep -v /proc/self通常是rsyslogsystemctl restart rsyslog其次清理journal日志#查看占用 journalctl --disk-usage #压缩 journalctl --vacuum-size200M最后清空/var/log下的日志文件#找到大于100M的大文件 find /var/log -type f -size 100M -exec ls -lh {} \; #使用重定向清空 /var/log/secure /var/log/messages /var/log/maillog /var/log/cron检查磁盘占用df -h启动pcsd服务systemctlenable--nowpcsd.service#将系统用户hacluster密码设置为westosechowestos|passwd--stdinhacluster设置 hacluster 用户密码所有节点pcs cluster auth server1 server4 pcs cluster setup--namehacluster server1 server4启动集群pcs cluster start--allpcs clusterenable--all校验集群#-L 从当前正在运行的集群中实时获取配置并进行检查#-V 开启详细输出模式展示更详尽的检查过程和结果crm_verify-L-V·无输出或仅显示Configuration OK表示当前集群配置验证通过没有发现错误。·输出error (错误)表示发现了必须修复的严重问题否则集群将无法正常运行。·输出warning (警告)表示发现了潜在问题通常不会立即影响集群运行但建议你根据实际情况评估并决定是否修复。STONITH:集群节点发生断裂或故障STONITH强制重启或断电故障节点默认启动。解决方法#禁用STONITH (测试环境pcs propertysetstonith-enabledfalse集群状态查看pcs statusDaemon(守护进程 Status在Pacemaker集群中Daemon是只后台持续运行的核心服务进程。他们是集群的大脑和神经必须全部正常运行集群才能工作。守护进程作用失败后果pcsd集群管理接口负责接收pcs 命令、在节点间同步配置、提供Web UI 接口。无法执行 pcs 远程命令节点间认证失效。corosync集群通信引擎负责节点间的心跳检测判断谁活着和消息传递同步状态。节点之间“失联”引发脑裂或分区。pacemaker集群资源管理器大脑负责决策谁该运行 VIP、谁该挂载磁盘、故障转移节点挂了自动切换。资源不启动故障不切换。创建集群资源资源代理ocf:heratbeat:IPaddr2核心作用在集群节点之间提供一个“浮动”的虚拟IP地址192.168.88.100确保这个IP始终跟随集群中处于Active状态的服务节点。具体作用·启动Start当集群决定让某个节点比如 server1拥有这个资源时IPaddr2 脚本会执行 ifconfig 或 ip addr add 命令将VIP 192.168.88.100 绑定到 server1 的网卡上。·监控Monitor集群会按照你设定的间隔interval30s持续检查该 VIP 是否还存活在当前的节点上。·故障转移Failover如果持有 VIP 的 server1 宕机了Pacemaker 会检测到异常并立即在备选节点server4上执行 Start 操作将 VIP 漂移到 server4 上。同时IPaddr2 还会自动发送 免费 ARPgratuitous ARP通知同一网络内的交换机/路由器更新 IP 和 MAC 地址的映射表让客户端能快速找到新的服务器。pcs resource create vip ocf:heartbeat:IPaddr2ip192.168.88.100opmonitorinterval30s pcs statuspcs常用操作1、为某一节点添加Apache服务资源pcs resource create WebSite systemd:httpdopmonitorinterval1min2、强制资源运行在同一节点增加资源组pcs resource groupaddwebgroup vip WebSite3、让某一节点处于待机状态pcsnodestandby server44、恢复节点从“待机”到“活跃”pcsnodeunstandby server45、删除集群资源#删除资源组组里的资源被释放独立出来pcs resource delete vip#删除集群资源pcs resource group remove webgroup配置iscsi存储和mysql数据库详细服务端和客户端配置见主页–Linux文件资源管理的iscsi部分其次服务端安装数据库软件将 /var/lib/mysql 目录的所有者Owner和所属组Group都设置为 mysql原因是MySQL 服务进程mysqld在运行时会使用一个叫做 mysql 的系统用户身份。如果数据目录 /var/lib/mysql 的属主是 root那么 MySQL 进程将没有权限在该目录下创建数据库文件、表结构或写入日志导致mysql服务启动失败并报错 Permission denied权限被拒绝或 Can’t create test file。客户端格式化磁盘mkfs.xfs-f/dev/sdd#假如出现Read-only file system#在服务端set attribute readonly0#或者blockdev --setrw /dev/sdcyum install -y mariadb-server #挂载存储 #确保/var/lib/mysql为空或者将他备份 mount /dev/sdd /var/lib/mysql #修改属性 chown mysqlmysql /var/lib/mysql #如果目录中有旧数据系统必须递归修改 chown -R mysql:mysql /var/lib/mysqlserver4只需导入存储yum install -y mariadb-server常见错误找不到scsci磁盘/block1、服务端argetLUN没有create /backstores/block/demo,acl没有写入服务端iqn。2、客户端没有建立会话·清空会话记录iscsiadm -m node -u·清空节点iscsiadm -m discovery -t sendtargets -p 192.168.88.142·重新连接iscsiadm -m discovery -t sendtargets -p 192.168.88.142·重新登陆iscsiadm -m discovery -t sendtargets -p 192.168.88.142 lsblk添加iscsi存储和mariadb数据库pcs resource create vip ocf:heartbeat:IPaddr2 ip192.168.88.100 op monitor interval30s pcs resource create iscsidb ocf:heartbreat:Filesystem device/dev/sdc director/var/lib/mysql fstypexfs op monitor interval1min pcs resource create mariadb systemd:mariadb op monitor interval1min pcs resource group add dbgroup vip iscsidb mariadb
Linux 高可用架构实战:LVS 负载均衡、Keepalived 与 Pacemaker 集群完全指南
高可用与负载均衡实验项目准备主机名ipvip角色server1192.168.88.142192.168.36.100调度器VSserver2192.168.88.146192.168.36.100真实服务器RSserver3192.168.88.144192.168.36.100真实服务器RSserver4192.168.88.145测试机修改ip名解析ip地址vim/etc/sysconfig/network-scripts/ifcfg-eth0hostnamectl set-hostname server3vim/etc/hostsLVS 负载均衡基础ipvsadm 规则详解LVSLinux Virtual Server是 Linux 内核自带的四层负载均衡器它的管理工具是 ipvsadm。本文面向新手梳理最常用的 LVS 规则操作帮助快速上手。LVS 的规则分为两层层级说明示例虚拟服务VIP对外提供服务的入口 IP:Port192.168.88.100:80真实服务器RIP后端实际处理请求的服务器192.168.88.142:80命令语法结构ipvsadm 的命令结构遵循“增删改查”的逻辑操作虚拟服务VIP真实服务器RIP添加-A-a删除-D-d修改-E-e查看-L-L-tTCP 协议-u 表示 UDP-srr调度算法为轮询Round Robin常用调度算法·rr轮询依次分发·wlc加权最少连接推荐生产环境·sh源地址哈希同一客户端始终访问同一台 RS添加真实服务器RIPipvsadm -a -t vip -r 真实服务器ip -g参数含义-g转发模式DR直接路由-m转发模式NAT网络地址转换-i转发模式TUN隧道权重设置加权算法时需要ipvsadm -a -t 192.168.88.100:80 -r 192.168.88.146:80 -g -w 2-w 2 表示权重为 2权重越高分配的流量越多。查看当前规则ipvsadm -ln-n 不解析 IP 和端口显示数字速度更快删除规则# 删除单个真实服务器注意不带 -g/-m/-i ipvsadm -d -t 192.168.88.100:80 -r 192.168.88.146:80 # 删除整个虚拟服务 ipvsadm -D -t 192.168.88.100:80 # 清空所有规则 ipvsadm -C三种工作模式对比特性NAT-mDR-gTUN-i调度器位置在请求和响应路径中间仅处理请求仅处理请求RS 是否需要绑定 VIP❌ 不需要✅ 必须绑定在 lo 回环网卡✅ 必须配置隧道RS 网关要求必须指向调度器 IP指向标准网关不要指向调度器指向标准网关数据流向请求和响应都经过调度器请求经调度器响应直回客户端请求经调度器响应直回客户端性能一般调度器可能成为瓶颈高响应不经过调度器较高支持跨网段典型场景内网环境RS 和调度器在同一网段最常用适合大多数 Web 服务RS 和调度器不在同一网段保存与恢复规则# 保存规则到文件ipvsadm-save/etc/sysconfig/ipvsadm# 恢复规则ipvsadm-restore/etc/sysconfig/ipvsadmDR模式下的LVS配置实例假设VIP192.168.88.142:80RS1192.168.88.146:80RS2192.168.88.144:801、VS调度器配置·ipvsadm#安装yuminstall-yipvsadm pvsadm-ln#在调度器上绑定 VIPipaddradd192.168.88.100/24 dev ens32#添加虚拟服务器ipvsadm-A-t192.168.88.100:80-srr#添加真实服务器RSipvsadm-a-t192.168.88.100:80-r192.168.88.144:80-g#删除某个真实服务器ipvsadm-d-t192.168.88.100:80-r192.168.88.146:80-g#修改配置ipvsadm-E-t192.168.88.100:80-swlc ipvsadm-e-t192.168.88.100:80-r192.168.88.146-m-w3ipvsadm-e-t192.168.88.100:80-r192.168.88.144-m-w3#保存配置ipvsadm-save/etc/sysconfig/ipvsadm#恢复配置ipvsadm-restore/etc/sysconfig/ipvsadm2、RS真实服务器配置yuminstall-yhttpdechoserver2/var/www/html/index.html systemctlenablehttpd#添加vipipa a192.168.88.100/24 dev eth0 yuminstallarptables##向INPUT链添加一条规则 针对IP为192.168.88.100的arp包##对匹配的报文执行丢弃arptables-AINPUT-d192.168.88.100-jDROP##向OUTPUT链添加一条规则 针对ip为192.168.88.100的arp包##对匹配的报文执行修改操作 将匹配的报文源地址修改为192.168.88.146正常接口地址arptables-AOUTPUT-s192.168.88.100-jmangle --mangle-ip-s192.168.88.146##保存规则arptables-save/etc/sysconfig/arptables systemctlenablearptables3、测试端curl192.168.88.100#for表示测试10次foriin{1..10};docurl192.168.88.100;donearptables是一个用于管理 ARP (Address Resolution Protocol) 数据包过滤规则的 Linux 命令行工具。它的设计和用法与广为人知的iptables 非常相似但作用的网络层次不同专门用于处理第 2 层数据链路层的 ARP 请求和响应。核心工作·接受 (ACCEPT)允许符合规则的 ARP 数据包通过。·丢弃 (DROP)直接丢弃符合规则的 ARP 数据包不作任何回应。·继续 (CONTINUE)继续检查链中的下一条规则。·返回 (RETURN)停止在当前链中匹配返回到调用它的链。为什么需要 arptables在 LVS-DR 架构中有一个关键特征所有的真实服务器RS和负载均衡器Director都配置了相同的虚拟 IP 地址VIP。这会引发一个严重的问题·当客户端请求 VIP 时需要通过 ARP协议来获取 VIP 对应的 MAC 地址。·由于网络中有多台服务器都配置了 VIP当 ARP 广播请求“谁拥有 VIP”时所有的 RS 都会收到这个广播并且默认情况下它们都会尝试去响应声称自己拥有这个 IP。·这会导致 ARP 缓存混乱。客户端或上游路由器可能会将 VIP 的请求错误地发送给某一个 RS从而绕过负载均衡器Director使 LVS 集群失效。arptables 的解决方案1、阻止响应 VIP 的 ARP 请求arptables -A INPUT -d 192.168.88.100 -j DROP这条规则会丢弃DROP所有发往本机、且目标 IP 地址是 VIP 的 ARP 请求数据包。简单来说就是让 RS 对“询问 VIP MAC 地址”的广播请求充耳不闻不作任何响应。2、修改从 VIP 发出的 ARP 响应arptables -A OUTPUT -s 192.168.88.100 -j mangle --mangle-ip-s 192.168.88.146这条规则会篡改mangle所有从本机发出、且源 IP 地址是 VIP 的 ARP 响应数据包。它会将响应包中的源 IP 地址从 VIP 修改为当前 RS 自己的真实 IP 地址RIP。LVS NAT模式它通过地址转换来实现负载均衡。在这种模式下负载均衡器Director扮演着网关的角色所有进出真实服务器RS的流量都必须经过它。核心原理DNAT SNAT目标地址转换 (DNAT)当客户端请求到达负载均衡器时负载均衡器会将数据包的目标IP地址从虚拟IPVIP修改为后端某一台真实服务器的IPRIP。源地址转换 (SNAT)当真实服务器处理完请求并返回响应给负载均衡器后负载均衡器在将响应发回给客户端之前会将数据包的源IP地址从RIP修改回VIP。优缺点分析·优点节省公网IP只有负载均衡器需要一个公网IPVIP后端的真实服务器可以使用私有IP地址有效节约了IP资源。安全性高真实服务器隐藏在负载均衡器之后客户端无法直接访问提高了后端服务的安全性。支持端口转换可以将外部请求的VIP:Port映射到内部RS的不同端口上例如将VIP:80映射到RS1:8080和RS2:9000。·缺点性能瓶颈这是NAT模式最主要的缺点。由于所有请求和响应的数据包都必须经过负载均衡器进行地址转换当访问量巨大时负载均衡器会成为整个系统的性能瓶颈。理论上一个100M网络的负载均衡器最多能支撑22台后端服务器。RS网关限制所有真实服务器的默认网关都必须指向负载均衡器的内网IPDIP这在某些复杂的网络拓扑中可能不够灵活。配置要求负载均衡器Director必须至少有两块网卡。一块连接外网WAN配置公网IPVIP另一块连接内网LAN配置私有IPDIP。真实服务器RS可以是任何支持TCP/IP的操作系统。它们只需要配置内网IPRIP并将默认网关指向负载均衡器的DIP。内核参数在负载均衡器上必须开启内核的IP转发功能通过 echo 1 /proc/sys/net/ipv4/ip_forward 或在sysctl.conf中设置 net.ipv4.ip_forward1 来实现。NAT模式下LVS配置实例Director端1、添加网卡假设eth0–对内 eth1–对外VIP:eth1192.168.30.100GATEWAY:eth0192.168.88.142RS1:192.168.88.144RS2192.168.88.1462、开启路由vim/etc/sysctld/lvs.conf#保存退出后,开启转发功能systemctl-systemipaddr del192.168.88.100/24 dev eth04、加载nat模块modprobe iptable_nat#lvs规则ipvsadm-A-t192.168.30.128:80-srr#对外网址ipvsadm-a-t192.168.30.128:80-r192.168.88.146:80-mipvsadm-a-t192.168.30.128:80-r192.168.88.144:80-mRS端ipaddr del192.168.88.100/24 dev eth0 arptables-Farptables-save arptables-save/etc/sysconfig/arptablesipr default via192.168.88.2 dev eth0 proto static metric100#删除原有路由配置ipr d default via192.168.88.2#必须指向调度器ip,以此类推所有的RS都这样配置ipr a default via192.168.88.142测试另开服务器1、ip配置确保与外网网段一致nmcli c reload nmcli c up eth0 systemctl restart networkipaddr del192.168.88.145 dev eth0curl192.168.30.128#如果测试不成功可以重启一下虚拟机keepalivedLinux 下的高可用HA和负载均衡解决方案主要基于VRRPVirtual Router Redundancy Protocol虚拟路由冗余协议实现。它最初为LVSLinux Virtual Server提供健康检查后来独立发展为通用的服务高可用工具。核心架构组件作用VRRP Stack实现主备切换管理 VIP虚拟IP漂移Checkers对后端服务/本机服务做健康检查IPVSLVS 内核调度器接口四层负载均衡Notify状态变更时执行自定义脚本VRRP工作原理VRID虚拟路由器标识1-255同一组主备必须相同VIP虚拟 IP 地址对外提供服务的统一入口Master主节点持有 VIP处理流量Backup备节点监听 Master随时准备接管使用场景数据库连接池防止空闲连接被服务端或防火墙切断。长轮询 / WebSocket维持浏览器与服务器的实时通道。微服务间通信如 gRPC 的 keepalive 配置检测对端健康状态。SSH / VPN 隧道防止 NAT 超时导致隧道中断。典型配置主备模式Master (priority 100) Backup (priority 90)双主模式两台机器互为主备各持一个 VIP健康检查TCP_CHECK 或自定义脚本如 check_nginx.sh与 Nginx/HAProxy 结合最常见的负载均衡高可用架构DR keepalive主备模式配置示例·环境规划角色IP 地址说明VIP192.168.88.100虚拟IP对外提供服务Director-Master192.168.88.143Keepalived Master LVSDirectorDirector-Backup192.168.88.144Keepalived Backup LVS DirectorRS1192.168.88.145Real Server 1 (Nginx)RS2192.168.88.146Real Server 2 (Nginx)MASTER主节点#清除资源 ip a d 192.168.88.100 dev eth0 ipvsadm -C安装并配置yum install -y keepalived yum install -y mailx vim /etc/keepalived/keepalived.conf systemctl restart keepalived备用节点配置和主节点的不同之处检验keepalivedsystemctl enable --now keepalived测试keepalived健康检测例1、systemctl stop httpd ipvsadm-lnsystemctl restart httpd例2、关掉server1服务看资源会不会转移到server4拓展七层负载均衡主备节点配置示例·安装haproxy并进行配置yuminstall-yhaproxyvim/etc/haproxy/haproxy.cfg·启动haproxy#查看80端口占用情况ss-tlnp|grep:80 systemctl stop httpdsystemctl start haproxy.service#backup配置yuminstall-yhaproxy#从server1 copy配置文件scp/etc/haproxy/haproxy.cfg server4:/etc/haproxy#sever1 vim /etc/rsyslog.confsystemctl restart rsyslog.servicevim keepalived.confvim /opt/check_haproxy.sh chmod x /opt/check_haproxy.sh #保留权限复制到server4 scp -p /opt/check_haproxy.sh scp /etc/keepalived/keepalived.conf server4:/etc/keepalived systemctl stop haproxy.service systemxtl restart keepalivednetstat-tnlp|grep:80server4端systemctl stop haproxy.service容易出现的错误后端服务器没有开启web服务HAProxy 只是一个转发器它需要后面有真正的 Web 服务器如 Nginx、Apache、Tomcat在运行。如果后端机器上没有运行这些服务或者服务挂了就会报这个错。·检查 HAProxy 配置文件Pacemarker高可用Pacemaker 是 Linux 下企业级的集群资源管理器CRM与 Corosync集群通信层配合实现多节点集群的高可用。在单机部署中如果服务器宕机业务就会中断。Pacemaker 是一个 集群资源管理器CRM, Cluster Resource Manager它可以自动检测节点故障并将服务如 IP、Web 服务器、数据库快速切换到备用节点实现业务高可用。关键组件概念说明节点Node集群中的一台服务器如 server1、server4资源Resource需要管理的高可用服务如 VIP、Nginx、MySQL、共享存储挂载点资源代理RA, Resource Agent启动/停止/监控资源的脚本如ocf:heartbeat:IPaddr2、systemd:httpd组Group将多个资源捆绑在一起保证它们运行在同一节点并按顺序启动约束Constraint控制资源的启动顺序、是否同居、位置偏好等STONITH脑裂保护机制故障时强制重启/关机故障节点生产环境必须测试可禁用主节点备节点共享存储·主机配置免密ssh-keygen ssh-copy-id server4#server4上检验sshserver1双节点配置在所有节点上安装集群软件server1,server4yuminstall-ypacemaker pcs psmisc policycoreutils - python可能出现的问题·磁盘空间不足解决方法找出占用空间很大的进程ls -l /proc/*/fd/* 2/dev/null | grep (deleted) | grep -v /proc/self通常是rsyslogsystemctl restart rsyslog其次清理journal日志#查看占用 journalctl --disk-usage #压缩 journalctl --vacuum-size200M最后清空/var/log下的日志文件#找到大于100M的大文件 find /var/log -type f -size 100M -exec ls -lh {} \; #使用重定向清空 /var/log/secure /var/log/messages /var/log/maillog /var/log/cron检查磁盘占用df -h启动pcsd服务systemctlenable--nowpcsd.service#将系统用户hacluster密码设置为westosechowestos|passwd--stdinhacluster设置 hacluster 用户密码所有节点pcs cluster auth server1 server4 pcs cluster setup--namehacluster server1 server4启动集群pcs cluster start--allpcs clusterenable--all校验集群#-L 从当前正在运行的集群中实时获取配置并进行检查#-V 开启详细输出模式展示更详尽的检查过程和结果crm_verify-L-V·无输出或仅显示Configuration OK表示当前集群配置验证通过没有发现错误。·输出error (错误)表示发现了必须修复的严重问题否则集群将无法正常运行。·输出warning (警告)表示发现了潜在问题通常不会立即影响集群运行但建议你根据实际情况评估并决定是否修复。STONITH:集群节点发生断裂或故障STONITH强制重启或断电故障节点默认启动。解决方法#禁用STONITH (测试环境pcs propertysetstonith-enabledfalse集群状态查看pcs statusDaemon(守护进程 Status在Pacemaker集群中Daemon是只后台持续运行的核心服务进程。他们是集群的大脑和神经必须全部正常运行集群才能工作。守护进程作用失败后果pcsd集群管理接口负责接收pcs 命令、在节点间同步配置、提供Web UI 接口。无法执行 pcs 远程命令节点间认证失效。corosync集群通信引擎负责节点间的心跳检测判断谁活着和消息传递同步状态。节点之间“失联”引发脑裂或分区。pacemaker集群资源管理器大脑负责决策谁该运行 VIP、谁该挂载磁盘、故障转移节点挂了自动切换。资源不启动故障不切换。创建集群资源资源代理ocf:heratbeat:IPaddr2核心作用在集群节点之间提供一个“浮动”的虚拟IP地址192.168.88.100确保这个IP始终跟随集群中处于Active状态的服务节点。具体作用·启动Start当集群决定让某个节点比如 server1拥有这个资源时IPaddr2 脚本会执行 ifconfig 或 ip addr add 命令将VIP 192.168.88.100 绑定到 server1 的网卡上。·监控Monitor集群会按照你设定的间隔interval30s持续检查该 VIP 是否还存活在当前的节点上。·故障转移Failover如果持有 VIP 的 server1 宕机了Pacemaker 会检测到异常并立即在备选节点server4上执行 Start 操作将 VIP 漂移到 server4 上。同时IPaddr2 还会自动发送 免费 ARPgratuitous ARP通知同一网络内的交换机/路由器更新 IP 和 MAC 地址的映射表让客户端能快速找到新的服务器。pcs resource create vip ocf:heartbeat:IPaddr2ip192.168.88.100opmonitorinterval30s pcs statuspcs常用操作1、为某一节点添加Apache服务资源pcs resource create WebSite systemd:httpdopmonitorinterval1min2、强制资源运行在同一节点增加资源组pcs resource groupaddwebgroup vip WebSite3、让某一节点处于待机状态pcsnodestandby server44、恢复节点从“待机”到“活跃”pcsnodeunstandby server45、删除集群资源#删除资源组组里的资源被释放独立出来pcs resource delete vip#删除集群资源pcs resource group remove webgroup配置iscsi存储和mysql数据库详细服务端和客户端配置见主页–Linux文件资源管理的iscsi部分其次服务端安装数据库软件将 /var/lib/mysql 目录的所有者Owner和所属组Group都设置为 mysql原因是MySQL 服务进程mysqld在运行时会使用一个叫做 mysql 的系统用户身份。如果数据目录 /var/lib/mysql 的属主是 root那么 MySQL 进程将没有权限在该目录下创建数据库文件、表结构或写入日志导致mysql服务启动失败并报错 Permission denied权限被拒绝或 Can’t create test file。客户端格式化磁盘mkfs.xfs-f/dev/sdd#假如出现Read-only file system#在服务端set attribute readonly0#或者blockdev --setrw /dev/sdcyum install -y mariadb-server #挂载存储 #确保/var/lib/mysql为空或者将他备份 mount /dev/sdd /var/lib/mysql #修改属性 chown mysqlmysql /var/lib/mysql #如果目录中有旧数据系统必须递归修改 chown -R mysql:mysql /var/lib/mysqlserver4只需导入存储yum install -y mariadb-server常见错误找不到scsci磁盘/block1、服务端argetLUN没有create /backstores/block/demo,acl没有写入服务端iqn。2、客户端没有建立会话·清空会话记录iscsiadm -m node -u·清空节点iscsiadm -m discovery -t sendtargets -p 192.168.88.142·重新连接iscsiadm -m discovery -t sendtargets -p 192.168.88.142·重新登陆iscsiadm -m discovery -t sendtargets -p 192.168.88.142 lsblk添加iscsi存储和mariadb数据库pcs resource create vip ocf:heartbeat:IPaddr2 ip192.168.88.100 op monitor interval30s pcs resource create iscsidb ocf:heartbreat:Filesystem device/dev/sdc director/var/lib/mysql fstypexfs op monitor interval1min pcs resource create mariadb systemd:mariadb op monitor interval1min pcs resource group add dbgroup vip iscsidb mariadb