一、什么是集群集群把多台独立服务器节点通过网络连接起来组成一个整体对外提供服务。 外部客户端看起来如同一台高性能服务器内部多机协同实现负载分担、故障冗余、算力扩容。二、集群主流分类分类 1按照用途1. 负载均衡集群 LB作用分发用户请求到后端多个节点特点所有节点同时对外提供服务典型产品Nginx、LVS、F5、HAProxy场景Web 网站、接口服务、网关2. 高可用集群 HA俗称主备集群作用防止单点故障故障自动切换模式Active/Passive主备也有双活 Active/Active典型软件Keepalived、PacemakerCorosync场景数据库主备、存储、核心业务系统3. 高性能计算集群 HPC作用多节点并行运算提升算力特点任务拆分给多个节点同时计算最后汇总结果场景气象模拟、仿真建模、大数据科学计算4. 分布式存储集群作用多节点共同组成统一存储池数据分片多副本典型Ceph、MinIO、GlusterFS特点数据分散存放支持扩容、数据自愈三、LVS 作用核心定义LVS 是Linux 内核层面的四层负载均衡软件工作在传输层 TCP/UDP由章文嵩开发集成在 Linux 内核性能极高。核心作用将客户端请求分发到后端多台真实服务器RS实现负载均衡集群。关键要点层级四层负载均衡基于 IP 端口转发只处理数据包的 IP、端口不解析 HTTP 协议。 对比Nginx 是七层负载均衡可以解析 http、host、url、cookie。角色划分VSDirector 调度器LVS 服务器RSReal Server 后端真实业务服务器三大核心功能① 请求调度根据调度算法把用户流量分配给不同后端 RS ② 集群屏蔽对外只暴露一个虚拟 IPVIP用户只访问 VIP感知不到后端多台服务器 ③ 构建 LB 集群横向扩展后端服务器提升并发承载能力。四、LVS 四种工作模式NAT 模式网络地址转换请求、响应流量都经过 Director后端 RS 网关指向 VS。 缺点Director 容易成为瓶颈。DR 模式直接路由生产最常用请求经过 VS响应数据包直接由 RS 返回客户端不经过调度器性能最高限制VS 和 RS 必须在同一个局域网。TUN 模式IP 隧道跨网段部署VS 封装 IP 报文发给 RSRS 直接回包支持跨机房。FULLNAT同时转换源 IP 和目标 IP可以跨网段内核新版本支持。常用调度算法静态轮询 rr、加权轮询 wrr、源地址哈希 sh 动态最少连接 lc、加权最少连接 wlc生产默认五、LVS 四种工作模式原理详解LVS 有四种工作模式通过ipvsadm的不同参数区分-mNAT、-gDR、-iTUN、FullNAT。5.1 NAT 模式网络地址转换流程说明请求阶段客户端发请求到 VIPVS 修改数据包的目标 IP为后端 RS 的 RIP转发给 RS响应阶段RS 处理完后响应报文发回 VS因为 RS 网关指向 VSVS 修改源 IP为 VIP返回给客户端关键要求RS 的默认网关必须指向 VS 的内网 IPNAT 模式完整部署步骤环境准备VS双网卡外网 VIP172.25.254.100内网 DIP192.168.0.100RS1192.168.0.10网关指向192.168.0.100RS2192.168.0.20网关指向192.168.0.100步骤 1VS 开启内核转发bash# 开启 IP 转发NAT 模式必须echo net.ipv4.ip_forward1 /etc/sysctl.confsysctl -p步骤 2安装 ipvsadmbashdnf install ipvsadm.x86_64 -y步骤 3配置 LVS 规则bash# 清空旧规则ipvsadm -C# 创建虚拟服务指定 VIP:端口 调度算法ipvsadm -A -t 172.25.254.100:80 -s wrr# 添加后端 RS-m 指定 NAT 模式-w 设置权重ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1# 查看规则ipvsadm -Ln步骤 4RS 配置网关bash# 设置默认网关为 VS 内网 IPnmcli connection modify eth0 ipv4.gateway 192.168.0.100nmcli connection reloadnmcli connection up eth0# 验证网关route -n步骤 5RS 部署 Web 服务bash# RS1 上执行dnf install httpd -ysystemctl enable --now httpdecho RS1 - 192.168.0.10 /var/www/html/index.html# RS2 上执行dnf install httpd -ysystemctl enable --now httpdecho RS2 - 192.168.0.20 /var/www/html/index.html步骤 6测试验证bash# 在 VS 上测试轮询效果for i in {1..10}; do curl 172.25.254.100; done步骤 7规则持久化bash# 保存规则到文件ipvsadm-save -n /etc/sysconfig/ipvsadm# 设置开机自启systemctl enable --now ipvsadm.service5.2 DR 模式直接路由参数-gDirect Route直接路由流程说明请求阶段VS 仅修改数据包的目标 MAC 地址为 RS 的 MAC三层 IP 不变源 IP 还是 CIP目标 IP 还是 VIP响应阶段RS 收到请求后发现目标 IP 是自己 lo 网卡上的 VIP直接处理然后直接回包给客户端响应报文不经过 VS关键要求VS 和 RS 必须在同一个局域网同一二层网络RS 的 lo 网卡上必须绑定 VIPRS 必须抑制 VIP 的 ARP 响应避免 IP 冲突DR 模式配置命令bash# VS 端添加 RS-g 指定 DR 模式ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -g -w 1ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20 -g -w 1# RS 端lo 网卡绑定 VIPifconfig lo:0 172.25.254.100 netmask 255.255.255.255 up# RS 端抑制 ARP 响应echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce5.3 TUN 模式IP 隧道流程说明请求阶段VS 在原始 IP 报文外层再封装一层 IP 隧道头外层源 IP 是 DIP目标 IP 是 RIP通过公网/跨网段发送给 RS响应阶段RS 收到后解封装外层隧道读取内层 VIP 请求处理后直接回包给客户端不经过 VS关键要求RS 内核必须支持ipip隧道模块RS 的 tunl0 网卡绑定 VIPTUN 模式配置命令bash# VS 端添加 RS-i 指定 TUN 模式ipvsadm -a -t 172.25.254.100:80 -r 192.168.1.10 -i -w 1# RS 端加载 ipip 模块modprobe ipip# RS 端tunl0 网卡绑定 VIPifconfig tunl0 172.25.254.100 netmask 255.255.255.255 up5.4 FULLNAT 模式工作原理FULLNAT 同时转换源 IP 和目标 IP请求方向CIP → VIP→ VS 转换为DIP → RIP响应方向RIP → DIP→ VS 转换为VIP → CIP六、LVS 13 种调度算法完整解析LVS 调度算法决定了流量如何分配到后端 RS分为静态算法和动态算法两大类。6.1 静态调度算法4 种静态算法不感知后端实时连接数按固定规则分配。算法全称说明适用场景rrRound Robin轮询请求依次平均分配到所有 RS后端性能相近的场景wrrWeighted Round Robin加权轮询按权重比例分配权重越高分到越多后端服务器性能不均的场景shSource Hash源地址哈希同一客户端 IP 固定分配到同一 RS需要会话保持但不想用持久化的场景dhDestination Hash目标地址哈希同一目标 IP 固定分配到同一 RS缓存集群、代理服务器场景6.2 动态调度算法9 种动态算法实时统计后端连接数和负载动态调整分配。算法全称说明适用场景lcLeast Connections最少连接新请求分给当前连接数最少的 RS后端性能相近连接时长差异大的场景wlcWeighted LC加权最少连接系统默认算法综合权重和连接数生产最常用后端性能不均的场景lblcLocality-Based LC基于局部性最少连接同一目标 IP 优先分配到同一 RSWeb Cache 缓存集群lblcrLocality-Based LC with Replication带复制的局部最少连接支持缓存节点间复制缓存集群提高缓存命中率sedShortest Expected Delay最短期望延迟计算单连接等待时间优先轻负载节点响应时间敏感的业务nqNever Queue永不排队有空闲服务器直接分配无空闲再走 sed避免请求排队追求低延迟foWeighted Failover加权故障转移主节点故障才切到备节点主备模式场景ovfOverflow溢出调度主节点满了才溢出到备节点峰值溢出场景lblcr_rLBLC with Replication (extended)扩展本地复制调度高级缓存场景七、LVS 多端口轮询问题解决方案防火墙标记 fwmark7.1 问题描述故障场景网站同时开放 80HTTP和 443HTTPS端口分别创建了两条 LVS 虚拟服务。用户访问 80 端口时被调度到 RS1登录后跳转到 443 端口结果被调度到 RS2导致会话丢失、购物车清空用户体验极差。7.2 根因分析不同端口属于独立的集群服务调度逻辑完全隔离无法保证同一用户的不同端口请求落到同一台 RS。7.3 解决方案防火墙标记 fwmark通过iptables给同一 VIP 下的所有业务端口打上相同的防火墙标记然后 LVS 基于标记创建统一的集群服务这样多个端口就共享同一套调度逻辑。7.4 完整配置步骤步骤 1iptables 打标记bash# 给 80 端口打标记 66iptables -t mangle -A PREROUTING -d 172.25.254.100 -p tcp --dport 80 -j MARK --set-mark 66# 给 443 端口打相同标记 66iptables -t mangle -A PREROUTING -d 172.25.254.100 -p tcp --dport 443 -j MARK --set-mark 66步骤 2基于标记创建 LVS 集群bash# 基于防火墙标记 66 创建集群-f 代替 -t 端口ipvsadm -A -f 66 -s wrr -p 3000步骤 3添加后端 RSbash# 向标记集群添加 RS无需指定端口ipvsadm -a -f 66 -r 192.168.0.10 -mipvsadm -a -f 66 -r 192.168.0.20 -m步骤 4验证查看bashipvsadm -Ln步骤 5删除标记集群bashipvsadm -D -f 667.5 原理总结客户端请求80/443端口|▼iptables mangle 表给数据包打上标记 66|▼LVS 基于标记 66 调度多端口共享同一套调度规则|▼同一用户的所有端口请求 → 同一台 RS八、LVS 会话粘滞解决方案持久连接 -p方案三PNMPP 标记持久生产最优方案特点fwmark 防火墙标记 -p持久化组合一次性解决多端口统一调度 会话粘滞双重问题。bash# 打标记iptables -t mangle -A PREROUTING -d 172.25.254.100 -p tcp --dport 80 -j MARK --set-mark 66iptables -t mangle -A PREROUTING -d 172.25.254.100 -p tcp --dport 443 -j MARK --set-mark 66# 标记集群 持久化ipvsadm -A -f 66 -s wrr -p 3000
郑州网站建设
网页设计
企业官网