)
目录引言:简单介绍一.网络应用架构模式1.1基本概念二.负载均衡模式2.1基本概念2.2VS调度器ipvsadm2.2.1基本概念2.2.2安装服务并启用开机自启2.2.3基本用法2.3ARP管理工具ARP2.3.1基本概念2.3.2安装服务并启动服务2.3.3基本用法2.4实现DR模式下的LVS负载均衡2.4.1工作原理2.4.2准备工作2.4.3完成四台虚拟机的环境配置2.4.4安装软件服务2.4.5配置VS调度器server42.4.6配置两个后端服务器server5,server62.4.7测试server72.4.8解决任务中的问题2.5实现NAT模式下的LVS负载均衡2.5.1工作原理2.5.2准备工作2.5.3调试器添加网卡设置测试机的网卡开启调试器的路由机制2.5.6配置VS调试器server42.5.6配置两个后端服务器server5,server62.5.7测试server7三.高可用模式keepalived3.1基本概念3.1.1.作用3.2.2.核心工具3.3.3.工作原理3.1.4.核心原理VRRP协议与VIP漂移3.1.5.核心组件3.1.6配置文件3.2实现高可用和负载均衡3.2.1准备工作3.2.2清除之前任务的残留资源3.2.3安装软件3.2.4配置主调试机的文件server43.2.5配置备用调式机的文件server73.2.6测试高可用和负载均衡功能引言:简单介绍1.高可用与负载均衡的简单概念高可用目标是让服务“尽量不挂”即使部分组件故障系统整体仍能正常运行。负载均衡目标是让服务“跑得更顺”将请求合理分发到多个服务器避免单点过载。两者结合使用高可用负责在负载均衡器节点发生故障时自动切换。负载均衡负责将海量请求分摊到多个后端服务器2.请求服务的工作流程工作流程:客户端 - 域名解析 - 分布式网络服务 - 虚拟网络IP - 真实的后台服务端1.用户通过域名解析DNS访问业务请求首先到达分布式网络服务层这一层由高可用集群管理通过虚拟网络IPVIP提供一个固定的服务入口。当某个负载均衡器节点发生故障时VIP会自动漂移到备用节点确保服务永不掉线高可用。2.请求经由虚拟IP进入负载均衡层根据预设的调度算法如轮询、最少连接数将流量分摊到后端的多个真实服务器Real Server上避免单机过载提升整体处理能力负载均衡。3后端服务器处理请求并返回响应整个流程协同工作共同构成一个高可用、高性能、易扩展的系统架构。注意后端服务器可精准到数据库。一.网络应用架构模式1.1基本概念1. 网络应用架构指的是客户端和服务器之间如何组织、通信和协作的宏观设计模式。2.两类架构C/S 架构 和 B/S 架构C/S架构客户端/服务器架构将应用程序分成两个部分客户端和服务器。通信方式客户端负责界面交互服务器负责数据存储和核心业务逻辑处理。客户端与服务器之间通过自定义协议如 TCP/IP 上的私有协议进行通信。B/S架构浏览器/服务器架构通信方式用户只需在浏览器中输入网址即可访问应用。核心客户端统一使用浏览器服务器承担所有核心功能。他们之间基于标准 HTTP/HTTPS 协议浏览器通过 URL 访问服务器资源服务器返回 HTML 页面或数据。3.网络应用架构与高可用和负载均衡之间的联系网络应用架构是系统的“骨架”定义了客户端和服务端如何协作高可用和负载均衡是系统的“增强层”分别保障可靠性和性能。二.负载均衡模式2.1基本概念1.作用将大量的并发请求或网络流量按照某种策略算法分摊到多个后端服务器Real Server上进行处理的技术。2.三种工作模式NAT、TUN、DRNAT网络地址转换模式客户端请求到达VS的对外IPVS作为双向流量调度器通过NAT将目标地址转换为后端服务器的对内IP将请求转发给后端处理后端处理完成后响应先返回给VSVS再次通过NAT将源地址转换为对外IP返回给客户端。进出流量均经过VS。TUN隧道模式客户端请求到达VSVS作为单向请求调度器将请求封装在IPIP隧道中转发给后端服务器后端服务器解封装后直接处理请求并将响应绕过VS直接返回给客户端。响应流量不经过VS。DR常用直接路由模式客户端请求到达VSVIPVS作为轻量级请求转发器仅修改数据帧的目标MAC地址将请求通过二层网络转发给后端服务器后端服务器配置了VIP且禁止ARP响应收到请求后直接处理并将响应绕过VS直接返回给客户端。VS仅处理请求入向流量性能最高。三种模式中负载均衡器始终承担“请求分发”的核心职责但NAT模式双向流量均经VS负担最重TUN和DR模式仅处理请求入向响应绕过VS其中DR因性能最高、配置适中成为生产环境的绝对主流。2.2VS调度器ipvsadm2.2.1基本概念1.作用LVSLinux虚拟服务器集群中的核心前端组件。它负责接收所有用户请求然后根据预设的调度算法将这些请求智能地分发给后端的真实服务器集群。2.核心命令工具ipvsadm3.两个IPVIP虚拟IP和RIP后端真实服务器IP4.工作机制当用户请求到达VS调度器的VIP时调度器会基于IPVSIP VirtualServer这个内核模块执行调度算法将请求转发给选中的真实服务器。5.核心机制1.负载调度器 (Director/VS调度器)这是整个集群的入口也就是我们讨论的VS调度器本身。它拥有一个对外的虚拟IP地址 (VIP)用户访问的实际上是这个VIP。2.真实服务器池 (Real Server)一组真正处理用户请求的服务器它们提供实际的Web、邮件等服务。3.共享存储 (Shared Storage)为真实服务器提供共享数据确保它们提供一致的服务内容。2.2.2安装服务并启用开机自启yum install -y ipvsadm systemctl enable ipvsadm2.2.3基本用法1.查看服务器ipvsadm -Ln #查看所有虚拟服务和后端真实服务器详细信息 ipvsadm -Ln --stats #查看更详细的统计信息连接数、包数等 ipvsad m -Ln --rate #查看每个真实服务器的当前连接状态2.添加虚拟服务需要先在本机创建一个VIP虚拟IP接着添加服务注意使用ip a 命令创建的VIP是临时的永久需要修改文件或者使用nmlic命令ip a addr 你要添加的虚拟IP/24 dev 设备名 #虚拟IP应在本机的网段内设备名为当前本机的网卡名 ipvsadm -A -t 你创建的虚拟IP:80 -s 你的算法 #80表示httpd服务的端口号-s后接调度算法参数-A添加虚拟服务-t指定 TCP 协议的虚拟服务格式VIP:端口其他协议-uUDP、-f防火墙标记用于复合协议-s指定负载均衡调度算法常用算法rr轮询Round Robinwrr加权轮询Weighted RRlc最少连接Least Connectionswlc加权最少连接Weighted LCsh源地址哈希Source Hash会话保持dh目标地址哈希Destination Hash添加一个192.168.7.100的VIP并添加虚拟服务3.向虚拟服务VS添加真实服务RSipvsadm -a -t 你的VIP:80 -r RIP -g或m,i #RIP真实后端服务器IP后面的-g,m,i必须要有一个参数解释-a添加真实服务器-t指定关联的虚拟服务需与添加虚拟服务时的 -t 一致-r指定真实服务器地址格式RIP:端口转发模式必选其一-gDR 模式Direct Routing直接路由性能最优-mNAT 模式Network Address Translation网络地址转换-iTUN 模式IP TunnelingIP 隧道跨网段场景-w指定权重值越大分配的请求越多仅用于加权算法将后端服务器的IP添加到虚拟服务VIP当中转发模式为DR4.修改配置ipvsad m -E -t VIP:80 -[参数] #更换虚拟服务的参数内容 ipvsad m -e -t 192.168.36.100:80 -r 192.168.1.10:80 -[参数] #修改真实服务器的参数内容-E修改虚拟服务-e修改真实服务器5.删除配置ipvsad m -d -t VIP:80 -r RIP:80 #从虚拟服务中删除某个真实服务 ipvsad m -D -t VIP:80 #删除虚拟服务以及它下面的所有真实服务 ipvsad m -C #清空ipvsadm的所有服务-d删除真实服务器-D删除虚拟服务-C清空所有规则6.保存与回退配置文件所有修改必须保存在文件中否则重启后会失效开启开机自启ipvsadm-save /etc/sysconfig/ipvsadm #保存修改配置 ipvsadm-restore /etc/sysconfig/ipvsadm #恢复文件配置2.3ARP管理工具ARP2.3.1基本概念1.作用Linux 系统中用于管理 ARP地址解析协议规则 的命令行工具专门针对 ARP 报文进行过滤和修改。主要用于控制网络中 ARP包的接收、发送和转发防止 ARP 欺骗、限制 ARP广播等场景2.基本知识1.ARP 协议用于将 IP 地址映射到 MAC 地址是局域网通信的基础。2.arptables 作用通过规则链过滤 ARP 报文可实现允许 / 拒绝特定 ARP 包、修改 ARP 包内容等操作。3.规则链与 iptables 类似arptables 包含 3 条默认链INPUT处理目标为本机的 ARP 报文。OUTPUT处理本机发出的 ARP 报文。FORWARD处理经过本机转发的 ARP 报文仅路由器场景有效。2.3.2安装服务并启动服务yum install -y arptables systemctl enable --now arptables #启动并开机自启动2.3.3基本用法arptables -[参数]参数-A向链尾插入一条规则-I向链头插入一条规则-D从链中删除一条规则-R替换链中的规则-L列出链表中的所有规则-F清空链中的所有规则-P设置链的默认策略目标动作ACCEPT:允许arp包通过DROP:丢弃arp包RETURN:终止当前链处理返回上一条链MASQUERADE修改ARP源包的MAC地址为出口网卡的MAC地址1.查看规则arptables -L -n #查看所有规则链 arptables -L INPUT --line-numbers # 查看 INPUT 链的规则并显示序号方便删除2.添加规则2.1.丢弃所有匹配192.168.7.100的arp包arptables -A INPUT -d 192.168.7.100 -j DROP-A INPUT向INPUT链添加一条规则-d192.168.7.100匹配目的IP为192.168.7.100的arp包-j DROP对匹配的报文执行丢弃操作2.2.禁止以源地址为192.168.7.100的arp包从地址为192.168.7.141出去arptables -A OUTPUT -s 192.168.7.100 --j managle --managle-ip-s 192.168.7.1413.保护规则arptables-save /etc/sysconfig/arptables #保存文件配置2.4实现DR模式下的LVS负载均衡2.4.1工作原理1.工作机制1.客户端向 VIP发送请求数据包到达 VS2.VS 仅修改数据帧的目标 MAC 地址将目标 MAC 改为选中的后端服务器的 MACIP 地址完全不变通过二层网络arg协议将请求转发给后端服务器。3.后端服务器收到数据帧后发现目标IP与自己的 VIP 一致直接接收并处理请求4.后端服务器将响应绕过 VS直接返回给客户端。DR核心注意VS与RS必须处于同一网段2.缺点DR模式无法自定义数据流向的服务器NAT模式能完成定向2.4.2准备工作1.准备四台虚拟机可以通过虚拟机快照完成,并设置静态IP。2.完成四台虚拟机的定义以下为我自己的虚拟机根据情况自己定义server4充当调度器ip分别为192.168.7.140server5server6充当后端真实服务器ip分别为192.168.7.141192.168.7.142server7充当测试机检验任务结果ip为192.168.7.143server4,server5,server6都应有vip我的vip为192.168.7.100,要有一个公用的vip2.4.3完成四台虚拟机的环境配置1.设置静态IP编辑四台虚拟机的网络文件设置静态IPvim /etc/sysconfig/network-scripts/ifcfg-ens32 #修改以下内容2.四台虚拟机打开网络并重启网络服务nmcli c up ens32 #打开网卡 systemctl restart network #重启网络3.分别设置四台虚拟机的域名设置主机名编辑 /etc/hosts 文件添加四台虚拟机的虚名解析内容重启虚拟机即可看见新的域名hometemctl set-hostname 主机名 #设置你的主机名 hostname #查看你的主机名 vim /etc/hosts #修改成功后编辑文件添加四台虚拟机的域名解析 reboot #重启虚拟机4.server4,serv5,server6调度器和两个后端服务器上要有共同的VIPip addr add 192.168.7.100/24 dev ens322.4.4安装软件服务四台虚拟机都安装ipvsadm、httpd、arptables软件并启动服务yum install -y ipvsadm httpd arptables #安装软件 systemctl enable --now ipvsadm #启动服务并设置开机自启 systemctl enable --now htppd systemctl enable --now arptables2.4.5配置VS调度器server41.serve4调度器上添加vip和虚拟服务使用轮询策略接着添加两个后端服务器ipvsadm -A -t 192.168.7.100:80 -s rr #以轮询模式添加虚拟服务 ipvsadm -a -t 192.168.7.100:80 -r 192.168.7.141:80 -g #以DR模式添加两个后端真实服务器 ipvsadm -a -t 192.168.7.100:80 -r 192.168.7.142:80 -g ipvsadm -Ln #查看服务2.server4上保存ipvsadm的配置信息ipvsadm-save /etc/sysconfig/ipvsadm #保存文件信息2.4.6配置两个后端服务器server5,server61.serve4和server5上确保含有VIPip a #查看系统IP ip a a 192.168.7.100/24 dev ens32 #如果没有加上2.server5和server6上禁止广播否则客户端数据会直接进入到后端服务器中不经过VS。server5:arptables -A INPUT -d 192.168.7.100 -j DROP #丢弃所有询问VIP的ARP请求。 arptables -A OUTPUT -s 192.168.7.100 -j mangle --mangle-ip-s 192.168.7.141 #将RS发出的、源IP为VIP的ARP包修改为源IP为RS真实IPRIP。 arptables-save /etc/sysconfig/arptables #保存文件信息 systemctl restart arptables #重启服务server6将上面的RIP改成server6的RIParptables -A INPUT -d 192.168.7.100 -j DROP #丢弃所有询问VIP的ARP请求。 arptables -A OUTPUT -s 192.168.36.100 -j mangle --mangle-ip-s 192.168.7.142 #将RS发出的、源IP为VIP的ARP包修改为源IP为RS真实IPRIP。 arptables-save /etc/sysconfig/arptables #保存文件信息 systemctl restart arptables #重启服务3.server5和server6上在/var/www/html目录下创建一个index.html文件并输入不同内容用于后续测试server5:touch /var/www/index.html #新建文件 echo server5 /var/www/html/index.html systemctl restart httpdserver6: 输入不同的文件内容用于区分touch /var/www/index.html #新建文件 echo server6 /var/www/html/index.html systemctl restart httpd2.4.7测试server7在测试机server7上使用curl命令访问虚拟VIP192.168.7.100即可看到轮流看到server5和server6的输出信息curl 192.168.7.1002.4.8解决任务中的问题1.问题一出现curl不通的情况问题如下产生原因你的后端服务器上没有添加调试器的VIP它看到目标 IP 为 VIP 的数据包时会认为这不是发给自己的因为本机没有这个 IP于是直接丢弃数据包。解决办法向你的两个后端服务器上添加调试器的VIPip a #查看系统IP ip a a 192.168.7.100/24 dev ens32 #如果没有加上2.问题二curl只能到达一台RS上产生原因客户端没有增加arp规则客户端绕过了VS直接访问到了RS里解决办法禁用后端服务器上的广播让客户端无法直接访问到RS中arptables -A INPUT -d 192.168.7.100 -j DROP #丢弃所有询问VIP的ARP请求。 arptables -A OUTPUT -s 192.168.36.100 -j mangle --mangle-ip-s 192.168.7.141 #将RS发出的、源IP为VIP的ARP包修改为源IP为RS真实IPRIP。 arptables-save /etc/sysconfig/arptables #保存文件信息 systemctl restart arptables #重启服务2.5实现NAT模式下的LVS负载均衡2.5.1工作原理1.工作机制客户端向 VS 的对外IP发送请求VS 接收后将目标IP地址从对外IP转换为后端服务器的对内IP并将请求转发给后端处理。后端处理完成后将响应返回给 VSVS 收到响应后将源IP地址从转换为对外IP 再返回给客户端。注意VS调度器与RS后端服务器可处于不同的网段当中2.作用可实现经调度器后输送到定向的服务器的功能3.优点服务器可以运行任何支持TCP/IP的操作系统它只需要一个IP地址配置在调度器上服务器组可以用私有的IP 地址。4.缺点伸缩能力有限当服务器结点数目升到20时调度器本身有可能成为系统的新瓶颈因为在VS/NAT中请求和响应报文都需要通过负载调度器。2.5.2准备工作1.选择四台虚拟机通过快照快速创建2.这是四台虚拟机的定义以下为我自己的虚拟机根据情况自己定义server4充当调度器ip分别为192.168.7.140我的新IP192.168.92.128server5server6充当后端真实服务器ip分别为192.168.7.141192.168.7.142server7充当测试机检验任务结果ip为192.168.7.143完成配置后的新IP为192.168.92.1292.5.3调试器添加网卡设置测试机的网卡开启调试器的路由机制1.向调度器server4中添加一块网卡模式为仅主机模式2.将测试机的网卡更改为仅主机模式与服务器处于不同网段与VS调度器的新建网卡处于同一网段2.1.设置成仅主机模式2.2测试机设置网络成自动连接2.3开启网络并重启网卡3.开启调试机的路由机制vim /etc/sysctl.conf #编辑文件 #添加以下内容 net.ipv4 .ip_forward1 #开启路由 sysctl ---system #命令生效 sysctl -p #查看路由状态2.5.6配置VS调试器server4向调试器server4的对外IP上添加虚拟服务并将两个真实后端服务器IPRIP添加到虚拟服务当中ipvsadm -A -t 192.168.92.128:80 -s rr #以轮询模式添加虚拟服务 ipvsadm -a -t 192.168.92.128:80 -r 192.168.7.141:80 -m #以NAT模式添加两个后端真实服务器 ipvsadm -a -t 192.168.92.128:80 -r 192.168.7.142:80 -m ipvsadm -Ln #查看服务2.5.6配置两个后端服务器server5,server61.在server5和server6上删除两个后端服务器上原先的网关调整网关为VS调度器的对内IPserver5:ip r a default via 192.168.7.2 #删除你原先的网关 ip r a default via 192.168.7.140 #这里的IP为调试器的对内IP ip r #查看网关server6:ip r a default via 192.168.7.2 #删除你原先的网关 ip r a default via 192.168.7.140 #这里的IP为调试器的对内IP ip r #查看网关注意在 NAT 模式下后端真实服务器RS的网关必须指向 LVS 调度器Director。如果网关设成.2或其他地址数据包回程时就找不到正确的路径了。2.接着在/var/www/html目录下创建一个index.html文件并输入不同内容用于后续测试server5:touch /var/www/html/index.html echo server5 /var/www/html/index.html systemctl restart httpdserver6:touch /var/www/html/index.html echo server6 /var/www/html/index.html systemctl restart httpd2.5.7测试server7在测试机server7上使用curl命令访问虚拟VIP192.168.7.100即可看到轮流看到server5和server6的输出信息curl 192.168.92.128 #客户端输入调试器的对外IP三.高可用模式keepalived3.1基本概念3.1.1.作用为服务器集群提供“虚拟 IPVIP漂移” 能力实现主备节点故障自动切换确保业务 IP 不中断。3.2.2.核心工具keepalived3.3.3.工作原理Keepalived 基于 VRRP 协议通过心跳检测和优先级选举机制在多台服务器之间自动管理 VIP 的归属实现入口的高可用。主机故障时备用机在 1-3 秒内自动接管 VIP确保服务不中断。3.1.4.核心原理VRRP协议与VIP漂移Keepalived 的高可用能力依赖 VRRP 协议本质是让多台节点主、备共享一个 “虚拟 IPVIP”对外呈现为一个统一的服务入口核心逻辑如下1.角色划分集群包含 1 个 主节点Master和 1 个 / 多个 备节点Backup。2.心跳检测主节点定期向备节点发送 VRRP 通告报文默认每 1 秒证明自己“存活”。3.VIP 持有正常情况下主节点绑定 VIP 并对外提供服务备节点仅监听心跳不持有 VIP。4.故障切换若备节点超过指定时间默认 3 秒未收到主节点心跳判定主节点故障备节点立即升级为新主节点绑定 VIP 并接管服务整个过程无需人工干预。3.1.5.核心组件1.vrrp_instanceVRRP 实例是 Keepalived 配置的核心单元一个实例对应一个 VIP 及一组主备节点。2.Global_defs全局配置定义集群标识、邮件通知等基础参数。3.Track_script健康检查脚本用于检测主节点上“核心业务服务”是否存活。若服务挂了即使主节点本身存活也会主动释放 VIP触发切换。3.1.6配置文件1.Keepalived 主配置文件默认路径为 /etc/keepalived/keepalived.conf。2.主、备节点配置差异主要在 state角色和 priority。如下图优先级数值越高越优先成为主节点3.2实现高可用和负载均衡3.2.1准备工作1.核心任务修改主调试机与备用调试机的配置文件2.虚拟机准备四台虚拟机可使用快照快速准备3.定义两台调试机两台服务机和一台测试机这里我使用的是上述任务中的server4与server7作为调试机server5server6作为我的后端服务机server4主IP192.168.7.140server7备IP192.168.7.143server5后端服务器IP192.168.7.141server6后端服务器IP192.168.7.142server3是我的测试机测试负载均衡功能DR模式3.2.2清除之前任务的残留资源ip a d 192.168.7.100/3224具体看你的ip dev ens32 #删除server4上的VIP ipvsadm -C #清空VS调度器上的所有规则3.2.3安装软件server4和server7在两台调试机上安装keepalived软件yum install -y keepalived3.2.4配置主调试机的文件server41.server4打开配置文件修改文件信息只保留我图中的信息删除其他信息如下图vim /etc/keepalived/keepalived.conf2.server4保存文件退出后重启服务观察IP是否加入systemctl enable --now keepalived #启动服务并设置开机自启 ip a #检查IP是否加上3.测试是否成功keepalived对后端RS 的健康检测故障的RS会自动从调度列表中被摘除3.1.server5和server6后端服务器同时开启httpd服务server5和server6:systemctl start httpd #停止服务server4:查看链表内容两台服务器是否正常工作ipvsadm -Ln #查看链表3.2server5192.168.7.141上停止httpd服务观察server4上的服务是否停止server5systemctl stop httpd #停止服务server4:ipvsadm -ln #列表3.2.5配置备用调式机的文件server71.将server4上的配置文件远程复制过来server4:scp /etc/keepalived/keepalived.conf server7:/etc/keepalived/2.修改配置文件内容修改虚拟机的优先级低于主调试机与下图相同server7vim /etc/keepalived/keepalived.conf systemctl enable --now keepalived3.2.6测试高可用和负载均衡功能1.在两台后端服务器上加入虚拟IP加入到回环Io中server5和server6:ip addr add 192.168.7.100/32 dev lo2.在测试机上面首先测试负载均衡功能看到交替出现的内容即成功运行curl 192.168.7.100 #你的VIP3.测试高可用功能断掉server4上的keepalived服务观察是否在server7上找到服务server4:systemctl stop keepalivedserver7ipvsadm -Ln #能看到服务说明高分用成功