侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

LVS 三种模式(VS/NAT、VS/DR、VS/TUN)

2023-11-26 星期日 / 0 评论 / 0 点赞 / 53 阅读 / 6394 字

VS/NAT 地址转换 基于 NAT 的负载机制实际上是通过修改数据包中的目的 IP 地址,将用户的请求转发给 Real Server 。 用户请求 VIP,请求报文通过客户端发送到 Dire

VS/NAT 地址转换

    基于 NAT 的负载机制实际上是通过修改数据包中的目的 IP 地址,将用户的请求转发给 Real Server 。

  1. 用户请求 VIP,请求报文通过客户端发送到 Director Server;
  2. Director Server 根据调度算法从后端 Real Server 中选出一台,并将数据包中的目的地址(VIP)改为选定服务器的 IP 地址,并转发报文;
  3. Real Server 接收请求报文处理,并发送响应报文到 Director Server(因为此时的源地址为 RIP,这样会暴露Real Server 的 IP 地址,与 LVS 集群理念背道而驰);
  4. Director Server 接收响应报文,并修改源地址为 VIP,发送响应报文给用户;

    但是在这种机制下,Director Server 即接收请求报文,同时也接收响应报文,往往会成为瓶颈的存在。

vip=192.168.0.200rip1=10.10.0.1rip2=10.10.0.2ipvsadm -E -t $vip:80 -s wrripvsadm -e -t $vip:80 -r $rip1 -m -w 3ipvsadm -e -t $vip:80 -r $rip2 -m -w 1

    只需在 Director Server 使用 ipvsadm 工具配置即可

# 查看配置的 LVS 规则ipvsadm -L -n

    

VS/DR 直接路由

    LVS 常用的负载机制,配合 keepalive 使用可以作为一个高吞吐量的集群。

  1. 用户请求 VIP,在 VS/DR 机制下,Director Server 和 Real Server 都配置有 VIP,通过抑制 Real Server 的 ARP 响应来使只有 Director Server 会收到来自路由的数据包;
  2. Director Server 根据调度算法将请求负载到 Real Server,Director Server 会修改数据帧中的目标 MAC 地址为选中的 Real Server 的 MAC 地址,并将数据帧发送出去;
  3. Real Server 收到源地址为 VIP 的数据包时,由于自身绑定了 VIP,于是接受并处理,接着响应一个源地址为 VIP 目标地址的数据包,此时响应请求无需经过 Director Server 修改源地址,因为源地址已经是 VIP 了,这样就无需经过 Director Server 了,直接响应给用户。

 

    那么其中关键的一环就是让请求报文只能到达 Director Server,通常用到的方法是修改内核参数:arp_ignore、arp_announce

arp_ignore: INTEGER(整数)        定义对目标地址为本地 IP 的 ARP 询问不同的应答模式                0 - 默认:回应任何网络接口上对任何本地 IP 地址的 arp 查询请求;        1 - :只回答目标 IP 地址是来访问网络接口自身地址的 arp 查询请求(0 和 1 不同在于,假设有 eth0:192.168.0.1/24、eth1:10.10.0.1/24,那么 eth0 网卡收到 10.10.0.1 的 arp 查询,只有设置为 0 时才会回应,1 只有在查询 192.168.0.1 时才回应)        2 -:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内        3 -: 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应        4-7: 保留未使用        8 -:不回应所有(本地地址)的arp查询arp_announce:INTEGER(整数)        对网络接口上本地 IP 地址发出的 ARP 回应作出相应级别的限制:        确定不同程度的限制,宣布对来自本地源 IP 地址发出 Arp 请求的接口        0 - (默认) 在任意网络接口上的任何本地地址        1 -尽量避免不在该网络接口子网段的本地地址. 当发起ARP请求的源 IP 地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内 ip 之一.如果改来访IP 不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.        2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个 IP 数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标 IP 地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该 ARP 回应的网络接口来进行发送

 

    通过在 Real Server 执行:

    

vip=192.168.0.38ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip lo:0echo "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_announce

    添加 VIP 到 lo,这样就保证了 Real Server 的 eth0 网口收到 arp 查询时不会响应,同时 vip 也绑定到 Real Server 上了。

 

VS/TUN:隧道

    机制跟 DR 一样,只是在转发的时候,它需要重新包装IP报文。这里的real server(图中为RIP)离得都比较远。

    用户请求以后,到director上的VIP上,它跟DR模型一样,每个realserver上既有RIP又有VIP,Director就挑选一个real server进行响应,但director和real server并不在同一个网络上,这时候就用到隧道了,Director进行转发的时候,一定要记得CIP和VIP不能动。

    我们转发是这样的,让它的CIP和VIP不动,在它上面再加一个IP首部,再加的IP首部源地址是DIP,目标地址的RIP的IP地址。收到报文的RIP,拆掉报文以后发现了里面还有一个封装,它就知道了,这就是隧道。

    其实数据转发原理和DR是一样的,不过这个我个人认为主要是位于不同位置(不同机房);LB是通过隧道进行了信息传输,虽然增加了负载,可是因为地理位置不同的优势,还是可以参考的一种方案;

 

 

 

 

 

 

 

 

 

 

 

 

 

广告 广告

评论区