LVS简介
LVS 全称 Linux Virtual Server,是 Linux 内核层实现的高性能、高可用 的负载均衡集群技术,由章文嵩博士开发,目前是 Linux 内核的标准模块 之一。它的核心作用是将前端的请求流量分发到后端多台真实服务器 (Real Server)上,从而提升服务的并发处理能力和可用性。
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基 于LVS+keepalived实现 LVS
官网: http://www.linuxvirtualserver.org/
LVS 相关术语
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
lvs集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
NAT模式实验主机环境搭建

VS主机配置

RS1配置

RS2配置

验证是否配置成功(在vs主机上测试)

NAT模式实现方法
#开启内核路由功能

#编写策略

注意执行以上指令时出现【未找到命令时】需要安装 ipvsadm
[root@vsssnnode ~]# yum install ipvsadm -y
[root@vsssnnode ~]# ipvsadm -C 清空服务器上所有已配置的 LVS 规则
[root@vsssnnode ~]# ipvsadm -A -t 172.25.254.100:80 -s wrr 创建一个对外提供服务的 LVS 虚拟节点(VIP),指定用 “加权轮询” 算法分发请求。
[root@vsssnnode ~]# ipvsadm -A -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
Illegal 'real-server' option with the 'add-service' command
[root@vsssnnode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
[root@vsssnnode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
把后端真实服务器(192.168.0.10/20:80)加入刚才创建的 LVS 虚拟服务,指定用 NAT 模式转发,权重为 1。
[root@vsssnnode ~]# ipvsadm -Ln 查看当前配置好的所有 LVS 规则(验证配置是否生效)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 wrr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0
测试结果

利用自定义文件进行持久化
[root@vsnode ~]# ipvsadm-save -n
-A -t 172.25.254.100:80 -s wrr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
[root@vsnode ~]# ipvsadm-save -n > /mnt/ipvs.rule
[root@vsnode ~]# ipvsadm -C

[root@vsnode ~]# ipvsadm-restore < /mnt/ipvs.rule

利用守护进程进行规则持久化
[root@vsnode ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@vsnode ~]# ipvsadm -C

[root@vsnode ~]# systemctl enable –now ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.

DR模式实验

环境设定
#在路由器中配置
[root@router ~]# systemctl disable –now ipvsadm.service
Removed "/etc/systemd/system/multi-user.target.wants/ipvsadm.service".
[root@router ~]# ipvsadm -C
#在路由器中
[root@router ~]# vmset.sh eth0 172.25.254.100 vsnode
[root@router ~]# vmset.sh eth1 192.168.0.100 vsnode noroute、
#设定内核路由功能
[root@router ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
#数据转发策略
[root@router ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to-source 192.168.0.100
[root@vsnode ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 172.25.254.100

vsnode 调度器配置
[root@vsnode ~]# vmset.sh eth0 192.168.0.50 vsnode norouter
[root@vsnode ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
method=manual
address1==192.168.0.50/24,192.168.0.100

[root@vsnode ~]# cd /etc/NetworkManager/system-connections/
[root@vsnode system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@vsnode system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ipv4]
method=manual
address1==127.0.0.1/8
address2=192.168.0.200/32

[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/7)
[root@RS1 system-connections]# nmcli connection up lo
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)

检测

客户机配置

root@client xia]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
method=manual
address1=172.25.254.99/24,172.25.254.100
dns=8.8.8.8;
RS1配置

RS2配置

[root@rs2 system-connections]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 设置所有网卡的 arp_ignore 参数为 1,让服务器只响应目标 IP 是本机网卡配置的 IP 的 ARP 请求。
[root@rs2 system-connections]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 单独给回环网卡(lo)设置 arp_ignore=1,强化对 VIP 的 ARP 响应限制(因为 LVS DR 模式下 VIP 通常配置在 lo 网卡上)。
[root@rs2 system-connections]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 设置回环网卡的 arp_announce 参数为 2,让服务器发送 ARP 包时,只使用目标网段匹配的网卡 IP 作为源 IP,不暴露 VIP。
[root@rs2 system-connections]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 让所有网卡生效 arp_announce=2,全局限制 ARP 包的源 IP 选择,避免 VIP 被对外暴露
利用火墙标记解决轮询错误
1.在rs主机中同时开始http和https两种协议
#在RS1和RS2中开启https
RS1
[root@RS1 ~]# dnf install mod_ssl -y
[root@RS1 ~]# systemctl restart httpd
[root@RS1~]# systemctl restart httpd
RS2
[root@RS2 ~]# dnf install mod_ssl -y
[root@RS2 ~]# systemctl restart httpd
[root@RS2~]# systemctl restart httpd
2.在vsnode中添加https的轮询策略
[root@vsnode ~]# ipvsadm -A -t 192.168.0.200:80 -s rr 创建 80 端口虚拟服务
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g 添加 80 端口后端 RS2
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g 添加 80 端口后端 RS1
[root@vsnode ~]# ipvsadm -A -t 192.168.0.200:443 -s rr 创建 443 端口虚拟服务
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g 添加 443 端口后端 RS1
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g 添加 443 端口后端 RS2
[root@vsnode ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.200:80 rr
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 1 0 0
TCP 192.168.0.200:443 rr
-> 192.168.0.10:443 Route 1 0 0
-> 192.168.0.20:443 Route 1 0 0
3.轮询错误展示
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
RS2 – 192.168.0.20
RS2 – 192.168.0.20
解决方案:使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载
[root@vsnode ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport –dports 80,443 -j MARK –set-mark 6666 给 80/443 流量打 6666 标记
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr 创建基于 6666 标记的 LVS 虚拟服务
[root@vsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g 添加后端节点 192.168.0.10(DR 模式)
[root@vsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g 添加后端节点 192.168.0.20(DR 模式)
测试

利用持久连接实现会话粘滞
1.设定ipvs调度策略
[root@vsnode ~]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport –dports 80,443 -j MARK –set-mark 6666
对所有访问 192.168.0.100 的 80/443 端口流量打「6666」标记,然后 LVS 对带这个标记的流量做「轮询 + 1 秒会话保持」的 DR 模式负载均衡。
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr -p 1
[root@vsnode ~]# ipvsadm -Ln 告诉 LVS:要处理 6666 标记的流量,用轮询方式
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.200:80 rr
FWM 6666 rr
-> 192.168.0.10:0 Route 1 0 2
-> 192.168.0.20:0 Route 1 0 0
测试

观察变化动向

网硕互联帮助中心



评论前必须登录!
注册