随笔- 177  文章- 0  评论- 0  阅读- 1370 

在这里插入图片描述

LVS工作模式:

  • NAT(Network Address Translation):地址转换模式
    • 实现原理
    1. 客户端会发出的数据包交给负载调度器。
    2. 数据包到达负载调度器后,会根据ipvsadm命令创建了集群规则(条件是目标地址,目标端口,传输协议是否一致)进行判断 满足后会修改数据包的目标IP地址为真实服务器的IP(httpd)。
    3. 将数据包发送给真实服务器,之后真实服务器响应并将数据包发回给负载调度器。此时数据包的源IP会修改真实服务器的IP,目标IP会修改客户端IP地址。
    4. 负载调度器在转发时,会将源IP地址改为自己的集群IP地址,然后再发给客户端。
  • 小实验:搭建如下集群
    在这里插入图片描述
    规划 应用1 192.168.120.100 gw 192.168.120.102 应用2 192.168.120.101 gw 192.168.120.102
    负载均衡服务器 2网卡 192.168.120.102 192.168.90.102
    测试机 192.168.90.103 gw 192.168.90.102
#应用1 应用2 安装httpd 并在/var/www/html下写入index,html
#负载均衡服务器  开启路由转发即 net.ipv4.ip_forward = 1
在写入集群规则
ipvsadm -A -t 192.168.90.102 :80 -s rr
ipvsadm -a -t 192.168.90.102:80 -r 192.168.120.101:80 -m 
ipvsadm -a -t 192.168.90.102:80 -r 192.168.120.100:80 -m
ipvsadm -ln
# 测试机
curl  192.168.90.102  #测试负载均衡
  • 特点

    1. 负载调度器和真实服务器必须位于同一网络。
    2. 真实服务器的网关必须指向DIP。
    3. 负载调度器必须位于客户端和真实服务器之间。
    4. RIP通常都是私有地址,仅用于各个集群节点通信。
    5. 支持目标地址转换。
    6. 真实服务器可以使用任意操作系统,负载调度器必须是Linux系统。
  • 缺点

    • 所有数据报文都要经过负载调度器,压力较大。
  • DR(Direct Routing):路由模式

  • 实验:LVS-DR模式
    • 规划:
      7-1 #客户端测试机
      ens33 vmnet3 CIP 192.168.90.110/24 gw:192.168.90.120

7-3 #路由器
ens33 vmnet3 192.168.90.120/24 #外网接口
ens36 vmnet4 192.168.110.120/24 #内网接口
#开启路由转发

7-4 #调度器-负载均衡器
ens33 vmnet4 DIP 192.168.110.130/24 gw:192.168.110.120
ens33:0 vmnet4 VIP 192.168.110.140/24

7-6 #真实服务器-应用服务器
ens33 vmnet4 RIP1 192.168.110.150/24 gw:192.168.110.120

7-7 #真实服务器-应用服务器
ens33 vmnet4 RIP2 192.168.110.160/24 gw:192.168.110.120

#两天真实服务器-应用服务器 
#请提前配好IP和网关并安装好http服务
#添加回环网卡子接口
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
#修改如下内容
DEVICE=lo:0                   #网卡名
IPADDR=192.168.110.140       #VIP地址
NETMASK=255.255.255.255      #子网掩码 
systemctl restart network

#修改相应和通告等级 #应用服务器上修改  
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1  
net.ipv4.conf.all.arp_announce = 2  
sysctl -p
#调度器-负载均衡器 
yum -y install ipvsadm
cd /etc/sysconfig/network-scripts/
  vim ifcfg-ens33 
  IPADDR=192.168.110.130
 GATEWAY=192.168.110.120
 #添加临时IP
cp -a  ifcfg-ens33  ifcfg-ens33:0
 vim ifcfg-ens33:0
 IPADDR=192.168.110.140
 GATEWAY=192.168.110.120
 NAME=ens33:0
systemctl restart network
vim /etc/sysctl.conf 
#关闭路由重定向 #调度器上修改  
net.ipv4.conf.all.send_redirects = 0  
#构建DR模式集群命令:
ipvsadm -A -t 192.168.110.140:80 -s rr
ipvsadm -a -t 192.168.110.140:80 -r 192.168.110.150:80 -g
ipvsadm -a -t 192.168.110.140:80 -r 192.168.110.160:80 -g
ipvsadm -ln
#路由器配置 配置两网卡开启路由转发
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33 
cp -a ifcfg-ens33 ifcfg-ens36
vim  ifcfg-ens36
systemctl restart network
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#路由器需要通过开启DNAT策略实现数据包的目标地址修改    
#防火墙规则的编写  
iptables -t nat -A PREROUTING -d 192.168.90.120 -p tcp --dport 80 -i ens33 -j DNAT --to-destination 192.168.110.140:80
iptables -t nat -A POSTROUTING -s 192.168.110.0/24 -p tcp --sport 80 -o ens33 -j SNAT --to-source 192.168.90.120

iptables -t nat -nvL
#测试机 
#请提前配置好路由器网关192.168.90.120  
#测试看是否负载均衡了
curl 192.168.90.120
  • 防火墙规则的编写
    命令:iptables

  • 查看:
    iptables -nL --line-numbers -v
    -L #list列出
    -n #数字化显示
    –line-numbers #显示行号,规则的行号
    -v #内容详细程度
    iptables -t filter -A INPUT -s 192.168.3.1 -p icmp -j DROP
    -t #table,指定规则表
    filter #对数据包进行阻拦,放行,丢弃等操作(默认使用这个)
    #当iptables命令不指定表名时,默认是filter表
    nat #对数据包进行转发前后的包头信息修改(目标地址修改,源地址修改)
    -A #链,指定规则链
    PREROUTING #路由转发前
    INPUT #入站
    FORWARD #路由转发
    OUTPUT #出站
    POSTROUTING #路由转发后
    #以上选项是防火墙的位置参数

  • 数据包的过滤条件
    例如:-s 192.168.3.1 -p icmp
    -s #匹配数据包的来源IP地址
    -d #匹配数据包的目标IP地址
    –sport #匹配数据包的来源port
    –dport #匹配数据包的目标port
    -p icmp #匹配数据包的传输协议
    -i 输入网卡 -o输出网卡
    … …

    • 符号条件数据包的执行策略:动作
      -j
      DROP #丢弃
      REJECT #拒绝
      ACCEPT #允许
      SNAT #源地址转换-修改源地址
      DNAT #目标地址转换-修改目标地址
      REDIRECT #将发往其他主机的请求拦截转发给本机的指定端口
  • 防火墙语句:
    iptables -t nat -A PREROUTING -d 192.168.3.130 -p tcp --dport 80 -i ens33 -j DNAT --to-destination 192.168.4.200:80
    -t nat -A PREROUTING
    #防火墙规则生效的位置
    -d 192.168.3.130 -p tcp --dport 80 -i ens33
    #防火墙过滤数据包的匹配条件
    #当条件中包含了端口作为条件时,端口不能独立出现作为条件,必须结合协议类型,并且协议必须写在端口前边!!!!
    -j DNAT --to-destination 192.168.4.200:80
    #符合条件数据包的防火墙处理策略或动作

    iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --sport 80 -o ens33 -j SNAT --to-source 192.168.3.130
    #因为当前实验环境测试机和真实机之间仅有一个路由器,相当于直连,所有没有该规则也能通信,但生产环境必须有此规则。

  • NAT和DR模式区别 NAT通过修改数据报头当中的目标IP地址实现转发的,更适合硬件负载均衡服务器设备。而DR模式则是通过修改数据包头信息中的mac地址来实现数据包转化,生产环境中,LVS的DR模式主要用于应对高并发需求。
  • 注意事项 在编写、查看、删除和修改LVS集群规则时,应尽可能使用内网地址以防止意外修改外部服务器。
  • 如何配置回环接口以确保只有特定的VIP地址可以匹配并接收数据包?
  • 需要在回环接口上设置一个特殊的子网掩码(255.255.255.255 32位)这样就能划分出一个广播域,只允许指定的VIP地址匹配,而不会与其他IP地址冲突。
  • 当实验第一次访问成功后,为何第二次访问会出现问题?
  • 第二次访问出现问题是因为路由器在第一次成功调度后,没有关闭路由重定向功能,导致路由器下次转发时不再找调度器,而是直接将请求转发给真实服务器。解决办法是重启路由器,或者在调度器上关闭路由重定向功能。
  • 扩展 ARP地址欺骗是一种通过篡改网络设备MAC地址与IP地址对应关系,使数据包无法正确到达目标设备的技术

在这里插入图片描述

  • 实现原理

  • 1当客户端尝试解析域名时,因缓存或主机配置问题未能直接解析到IP地址,则会通过网络查询并解析到路由器的公网IP地址。客户端随后尝试连接该公网IP,路由器依据防火墙规则决定是否允许此连接,符合后会根据防火墙策略将数据包的目标IP修改为VIP地址,再转发至负载调度器。

  • 2在发送到负载调度器时,为了避免数据包在传输过程中因Linux系统路由重定向功能而导致在下次发送数据包会错误地重定向到应用服务器,需在负载调度器上关闭路由重定向功能。同时,负载调度器将数据包的源MAC地址替换为自身的MAC地址,目标MAC地址则设为应用服务器的MAC地址,确保正确传输。

  • 3到达应用服务器时,数据包的目标IP应与服务器的IP匹配。通常要通过为应用服务器的回环网卡子接口配置虚拟IP(VIP)来实现。此外,还需关闭ARP检测功能,避免目标IP与MAC地址之间的映射问题。同时(Linux操作系统默认根据数据包的目标MAC地址解析IP作为响应数据包的来源地址),需要通过修改内核参数,将数据包最终响应时的原地址改为VIP地址,而不是物理网卡IP地址,实现数据包以VIP身份响应请求。

  • 4最后,当数据包从应用服务器返回路由器时,应根据应用服务器配置的网关信息进行转发。为保证数据包成功返回客户端时能成功响应服务器,需将数据包的源IP地址设置为路由器的公网IP地址,整个过程既保证了数据包的正确传输。

  • 特点

    1. 负载调度器和真实服务器必须位于同一网络。
    2. 真实服务器的网关必须指向路由器。
    3. 负载调度只处理入站请求。
    4. RIP可以是私有地址,也可以是公网地址。
    5. 真实服务器可以使用任意操作系统,负载调度器必须是Linux系统。
  • 优点

    • 负载调度器压力较小。
  • 缺点

    • 配置相对复杂。
  • TUN(Tunneling):隧道模式

    • 实现原理: 隧道模式中,一旦数据包被调度器转发至真实服务器,其后续响应则直接由真实服务器通过交换机和路由器直接反馈给客户端,不再经过调度器,这样可以提高并发能力

负载调度器算法

  • 静态算法:只考虑算法本身,不考虑服务器状态
    • rr(轮循):从1开始到n结束。
    • wrr(加权轮循):按权重比例进行调度,权重越大,负责的请求越多。
    • sh(源地址hash):实现会话绑定,保留之前建立的会话信息。将来自同一个IP地址的请求发送给一个真实服务器。
    • dh(目标地址hash):将同一个目标地址的请求发送给同一个服务器节点,提高缓存命中率。
  • 动态算法:既要考虑算法本身,也要考虑服务器状态(原理:通过hash表记录连接状态-active/inactive)
    • LC(最少连接):将新的连接请求分配给当前连接数最少的服务器。
      • 公式:活动连接 * 256 + 非活动连接
    • WLC(加权最少连接):最少连接的特殊模式。
      • 公式:(活动连接 * 256 + 非活动连接) / 权重
    • SED(最短期望延迟):加权最少连接的特殊模式。
      • 公式:(活动连接 + 1) * 256 / 权重
    • NQ(永不排队):SED的特殊模式,当某台真实服务器连接为0时,直接分配,不计算。
    • LBLC(基于局部性的最少连接):DH的特殊模式,既要提高缓存命中率,又要考虑连接数量。先根据请求的目标IP地址寻找最近的该目标IP地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其他可行的服务器。
    • LBLCR(带复制的基于局部性的最少连接):LBLCR = LBLC + 缓存共享机制

高可用集群(HA High Availability Cluster)

  • 原理两台配置了相同功能的服务器,彼此进行心跳检测,发生故障时快速故障转移的服务器部署方式。

  • 高可用性(HA,High Availability):通过尽量缩短系统停机时间(因日常的维护操作或突发的系统崩溃等),以提高系统和应用的可用性。通常是2个节点组成的HA集群,有许多通俗不科学的名称,如==“双机热备”、“双机互备==”。

    • 好处:当服务启动时,两台服务器一个作主(ser1),另一个作从(ser2)。测试机每几秒会ping主机,当发现主机没有回应,就证明主机宕机了,那么从机马上会启动相应的服务,继续进行服务。这样可以保证服务不中断。
  • 宕机最大限度

    • 99.9%:8.8小时(最低要求)
    • 99.99%:53分钟
    • 99.999%:5分钟
  • 故障切换

    • 心跳检测
      • RS232串口线:串行电缆被认为是比以太网连接安全性稍好些的连接方式,因为黑客无法通过串行连接运行诸如telnet、ssh或rsh类的程序,从而可以降低其通过已劫持的服务器再次侵入备份服务器的几率。但串行线缆受限于可用长度,因此主、备服务器的距离必须非常短。
      • 双机备份软件:Rose HAproxy、Keepalived、Heartbeat(用于解决mysql高可用)
  • 特殊

    • 脑分裂:指在主服务器和备用服务器之间,由于备用服务器探测到主服务器故障并抢占资源,但实际上主服务器并未故障
      • 解决方法
        • 方法一(常用):设置参考IP,抢夺资源之前,都去ping参考IP(网关),ping不通时,不去抢资源,而是释放资源,将控制权交出去。
        • 方法二:使用冗余线路进行探测,都探测失败才抢夺资源。
        • 方法三:STONITH(Shoot The Other Node In The Head 爆头):基于能够通过软件指令关闭某节点的特殊硬件设备,掐电源。

Keepalived概述

  • 案例环境:专为LVS和HA设计的一款健康检查工具。
  • 工作模式 主备模式 负载均衡模式
  • 之前的应用 httpd服务+nginx服务 keepalive tcp协议 keepalive 保活机制
  • 支持
    • 故障自动切换
    • 节点健康状态检查
    • 主备模式,共用同一个IP地址,但优先级不同(又叫IP漂浮)
    • 使用VRRP协议 (虚拟路由冗余协议)

高可用集群实验

在DR模式的基础上添加一台备用负载调度器IP 192.168.110.180

  • 效果:一旦主调度器出现故障,备调度器能迅速接替主调度器工作,保证业务连续性。故障解决效率非常高
  • 使用场景 :生产环境中,尽管使用了keep alive软件,但仍需为每台服务器配置两个独立的IP地址,分别用于管理和远程连接。主备调度器上的ens33网卡需配置不同IP以保证管理接口的连通性,而VIP地址则由keep alive软件根据心跳监测结果动态分配(实现机制类似ip address add命令,用于给物理网卡接口增加一个额外的IP地址)
#两天真实服务器-应用服务器 
#请提前配好IP和网关并安装好http服务
#添加回环网卡子接口
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
#修改如下内容
DEVICE=lo:0                   #网卡名
IPADDR=192.168.110.140       #VIP地址
NETMASK=255.255.255.255      #子网掩码 
systemctl restart network

#修改相应和通告等级 #应用服务器上修改  
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1  
net.ipv4.conf.all.arp_announce = 2  
sysctl -p

#不一样的地方

#主调度器-负载均衡器 
#安装必要软件
yum -y install ipvsadm keepalived
#修改长连接的配置文件
vim /etc/keepalived/keepalived.conf
#路由名称
router_id LVS_MASTER
#注释掉虚拟路由探测协议vrrp用来进行心跳检测
#vrrp

vrrp_instance VI_1 {
#修改状态
  state MASTER
  #修改网卡名
  interface ens33
  #修改服务器组号 确保同一集群内的服务器具有相同的ID号
  virtual_router_id 51
  #优先级主的要比备的高
  priority 100
(fai o ri ty)
  #设置的VIP地址
  virtual_ipaddress {
      192.168.110.140
  }
  #自动构建集群
  #虚拟IP
virtual_server 192.168.110.140 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  #设置响应的处理时间
  persistence_timeout 0
  #传输协议
  protocol TCP
#两台真实服务器的IP
real_server 192.168.110.150 80 {
real_server 192.168.110.160 80 {

vim /etc/sysctl.conf 
#关闭路由重定向 #调度器上修改  
net.ipv4.conf.all.send_redirects = 0  
systemctl start keepalived



#在主调度器上
scp /etc/keepalived/keepalived.conf  192.168.110.180:/etc/keepalived/
#备用调度器
#安装必要软件
yum -y install ipvsadm keepalived
#修改长连接的配置文件
vim /etc/keepalived/keepalived.conf
#路由名称
router_id LVS_SLAVE
#修改状态
state SLAVE
#优先级主的要比备的高
priority 50
vim /etc/sysctl.conf 
#关闭路由重定向 #调度器上修改  
net.ipv4.conf.all.send_redirects= 0  

systemctl start keepalived
(ri:d'rekt)redirect重定向 
#路由器配置 配置两网卡开启路由转发
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33 
cp -a ifcfg-ens33 ifcfg-ens36
vim  ifcfg-ens36
systemctl restart network
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#路由器需要通过开启DNAT策略实现数据包的目标地址修改    
#防火墙规则的编写  
iptables -t nat -A PREROUTING -d 192.168.90.120 -p tcp --dport 80 -i ens33 -j DNAT --to-destination 192.168.110.140:80
iptables -t nat -A POSTROUTING -s 192.168.110.0/24 -p tcp --sport 80 -o ens33 -j SNAT --to-source 192.168.90.120
#查看防火墙规则
iptables -t nat -nvL
#测试机 
#请提前配置好路由器网关192.168.90.120  
#测试看是否负载均衡了
while true;do sleep 1;date;curl 192.168.90.120;done
#在调度器上查看是否出现IP漂浮现象 用ip a查看 并关闭主调度器看备调度器是否会自动接替主调度器

 posted on   dapaige  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示