LVS(Linux virual server)

一、NAT模式环境设定

1.VS主机中

root@vsnode \~\]# vmset.sh eth0 172.25.254.100 vsnode \[root@vsnode \~\]# vmset.sh eth1 192.168.0.100 vsnode noroute ### **2.RS1** 设定网络 \[root@RS1 \~\]# vmset.sh eth0 192.168.0.20 RS1 noroute \[root@RS1 \~\]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 \[root@RS1 \~\]# nmcli connection reload \[root@RS1 \~\]# nmcli connection up eth0 \[root@RS1 \~\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 设定访问业务真实数据 \[root@RS1 \~\]# dnf install httpd -y \[root@RS1 \~\]# systemctl enable --now httpd \[root@RS1 \~\]# echo RS1 - 192.168.0.20 \> /var/www/html/index.html ### **3.RS2** #设定网络 \[root@RS1 \~\]# vmset.sh eth0 192.168.0.30 RS1 noroute \[root@RS1 \~\]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 \[root@RS1 \~\]# nmcli connection reload \[root@RS1 \~\]# nmcli connection up eth0 \[root@RS1 \~\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 设定访问业务真实数据 \[root@RS1 \~\]# dnf install httpd -y \[root@RS1 \~\]# systemctl enable --now httpd \[root@RS1 \~\]# echo RS2 - 192.168.0.30 \> /var/www/html/index.html ### **4.在vs主机中测试环境** \[root@vsnode \~\]# curl 192.168.0.20 RS1 - 192.168.0.20 \[root@vsnode \~\]# curl 192.168.0.30 RS2 - 192.168.0.30 ![](https://i-blog.csdnimg.cn/direct/76f793842f3c4599a2c9b8c18ad29522.png) ## 二、DR模式实验过程 ![](https://i-blog.csdnimg.cn/direct/8ba689d5ef3443609a692634d4bade95.png) ### 环境设定方式 #### 1.在路由器中 \[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 #### 2.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) #### 3.检测 \[root@vsnode system-connections\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 ![](https://i-blog.csdnimg.cn/direct/15ca0b1a4e154812ae8bf9af31a92837.png) #### 4.客户端 \[root@client \~\]# vmset.sh eth0 172.25.254.99 client norouter 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4) 2: eth0: \ mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:e5:75:af brd ff:ff:ff:ff:ff:ff altname enp3s0 altname ens160 inet 172.25.254.99/24 brd 172.25.254.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fee5:75af/64 scope link tentative noprefixroute valid_lft forever preferred_lft forever client \[root@client \~\]# 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;

root@client \~\]# nmcli connection reload \[root@client \~\]# nmcli connection up eth0 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5) \[root@client \~\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.25.254.100 0.0.0.0 UG 100 0 0 eth0 172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #### 检测 \[root@client \~\]# ping 192.168.0.200 PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。 64 比特,来自 192.168.0.200: icmp_seq=1 ttl=128 时间=1.08 毫秒 #### 5.RS1 \[root@RS1 \~\]# vmset.sh eth0 192.168.0.10 RS1 noroute \[root@RS1 \~\]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 \[root@RS1 \~\]# nmcli connection reload \[root@RS1 \~\]# nmcli connection up eth0 \[root@RS1 \~\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 在lo上设定vip \[root@RS1 \~\]# cd /etc/NetworkManager/system-connections/ \[root@RS1 system-connections\]# cp -p eth0.nmconnection lo.nmconnection \[root@RS1 system-connections\]# vim lo.nmconnection \[connection

id=lo

type=loopback

interface-name=lo

ethernet

ipv4

address1=127.0.0.1/8

address2=192.168.0.200/32

method=manual

root@RS1 system-connections\]# nmcli connection reload \[root@RS1 system-connections\]# nmcli connection up lo 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6) \[root@RS1 system-connections\]# ip a 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.0.200/32 scope global lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever arp禁止响应 \[root@rs1 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/all/arp_ignore \[root@rs1 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/lo/arp_ignore \[root@rs1 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/lo/arp_announce \[root@rs1 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/all/arp_announce #### 6.RS2 \[root@RS2 \~\]# vmset.sh eth0 192.168.0.20 RS2 noroute \[root@RS2 \~\]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 \[root@RS2 \~\]# nmcli connection reload \[root@RS2 \~\]# nmcli connection up eth0 \[root@RS2 \~\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 在lo上设定vip \[root@RS2 \~\]# cd /etc/NetworkManager/system-connections/ \[root@RS2 system-connections\]# cp -p eth0.nmconnection lo.nmconnection \[root@RS2 system-connections\]# vim lo.nmconnection \[connection

id=lo

type=loopback

interface-name=lo

ethernet

ipv4

address1=127.0.0.1/8

address2=192.168.0.200/32

method=manual

root@RS2 system-connections\]# nmcli connection reload \[root@RS2 system-connections\]# nmcli connection up lo 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6) \[root@RS2 system-connections\]# ip a 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.0.200/32 scope global lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever arp禁止响应 \[root@rs2 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/all/arp_ignore \[root@rs2 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/lo/arp_ignore \[root@rs2 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/lo/arp_announce \[root@rs2 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/all/arp_announce ## 三、利用火墙标记解决轮询错误 ### 1.在rs主机中同时开始http和https两种协议 #### 在RS1和RS2中开启https \[root@RS1+RS2 \~\]# dnf install mod_ssl -y \[root@RS1+RS2 \~\]# systemctl restart httpd \[root@RS1+RS2 \~\]# systemctl restart httpd #### 2.在vsnode中添加https的轮询策略 root@vsnode boot\]# ip\^Cadm -A -t 192.168.0.200:80 -s rr \[root@vsnode boot\]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g \[root@vsnode boot\]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.30 -g \[root@vsnode boot\]# ipvsadm -A -t 192.168.0.200:443 -s rr \[root@vsnode boot\]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.30:443 -g \[root@vsnode boot\]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g \[root@vsnode boot\]# 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.30:80 Route 1 0 0 -\> 192.168.0.20:80 Route 1 0 0 TCP 192.168.0.200:443 rr -\> 192.168.0.30:443 Route 1 0 0 -\> 192.168.0.20:443 #### 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 当上述设定完成后http和https是独立的service,轮询会出现重复问题 解决方案:使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载 \[root@vsnode boot\]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666 \[root@vsnode boot\]# ipvsadm -A -f 6666 -s rr \[root@vsnode boot\]# ipvsadm -a -f 6666 -r 192.168.0.30 -g \[root@vsnode boot\]# ipvsadm -a -f 6666 -r 192.168.0.20 -g #测试:在客户端 \[root@client \~\]# curl 192.168.0.200;curl -k https://192.168.0.200 RS2 - 192.168.0.20 RS1 - 192.168.0.30 ![](https://i-blog.csdnimg.cn/direct/a4b9919d1971435cbd566c6fa1113c68.png) ## 四、利用持久连接实现会话粘滞 ### 1.设定ipvs调度策略 \[root@vsnode \~\]# ipvsadm -A -f 6666 -s rr -p 1 \[root@vsnode \~\]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -\> RemoteAddress:Port Forward Weight ActiveConn InActConn FWM 6666 rr persistent 1 -\> 192.168.0.20:0 Route 1 0 0 -\> 192.168.0.30:0 ### 2.测试: \[root@client \~\]# curl 192.168.0.200 RS1 - 192.168.0.20 \[root@client \~\]# curl 192.168.0.200 RS1 - 192.168.0.20 ### 3.观察 \[root@vsnode \~\]# watch -n 1 ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 01:56 FIN_WAIT 172.25.254.99:42420 192.168.0.200:80 192.168.0.20:80 IP 00:57 ASSURED 172.25.254.99:0 0.0.26.10:0 192.168.0.20:0 TCP 01:54 FIN_WAIT 172.25.254.99:46216 192.168.0.200:80 192.168.0.20:80 TCP 01:55 FIN_WAIT 172.25.254.99:46222 192.168.0.200:80 192.168.0.30:80

相关推荐
cws2004011 小时前
智能化弱电工程桥架、支吊架、线管、线盒安装要求-2
运维·网络·桥架
nxb5562 小时前
云原生keepalived实验设定
linux·运维·云原生
鹿角片ljp2 小时前
短信登录:基于 Session 实现(黑马点评实战)
java·服务器·spring boot·mybatis
lannyjay2 小时前
Windows 批处理脚本引用WinSCP指令,去指定服务器下载文件到本地。
网络·winscp·windows批处理
xianyudx2 小时前
Linux 服务器 DNS 配置指南 (CentOS 7 / 麒麟 V10)
linux·服务器·centos
grrrr_12 小时前
【Linux】内网穿透 FTP 终极复现手册 (2026 版)--cpolar
linux·网络·内网穿透·ftp·cpolar
G皮T2 小时前
【计算机网络】网络时间协议 NTP(二):X-Request-Start
网络·计算机网络·时钟同步·ntp·网络时间协议
一念杂记2 小时前
玩Huggingface免费服务器(2vCPU+16GRAM+100G空间)系列领取免费服务器保姆级教程
服务器·ai编程
Mikowoo0072 小时前
VMware Tools 与 共享主机文件夹
运维·服务器