|NO.Z.00007|——————————|^^ 构建 ^^|——|LVS-DR构建.V1|——|4台server|
一、LVS-DR概述

### --- LVS-DR概述
### --- C 10.10.10.240:本地VMnet1配置地址;
### --- D:eth0:10.10.10.11 | eth0:0:10.10.10.100 负载路由器
### --- RS1:真实服务器1
### --- RS2:真实服务器2
~~~ 原地址发送数据包到负载调度器,负载调度器会进行对原地址进行修改,
~~~ 三个真实主机上的100地址是被隐藏的。
### --- arp-ignore:改为1 arp-announce:改为2 既不向外发出公告,
~~~ 别人来的时候又不会主动接收
~~~ 数据报文到大不了Lo:配置路由规则:
~~~ 指一个路由规则,指定一下100地址的话,数据报文来了的情况下,接收数据;
~~~ 数据报文到达Lo;组装报文回信给客户端。完成整个工作流程
~~~ 在负载路由器关闭广播地址的公告功能。是一个优化方案
### --- Lo:把它的子网掩码设置为255:255:255:255 32位:32位:主机位,
~~~ 网络位是同一个IP地址。防止出现意外。
### --- 本机的IP地址为:10.10.10.240
### --- ARP通讯行为:ARP响应级别:arp-ignore
~~~ 0 只要本机配置有相应IP地址就响应
~~~ 1 仅在请求的目标地址配置在请求到达的网络接口上时,才给予响应
### --- ARP通告行为:arp-announce
~~~ 0 将本机热呢网络接口上的任何地址都向外通告
~~~ 1 尽可能避免像目标网络通告与网络不匹配的地址信息表
~~~ 2 仅向目标网络通告与其网络相匹配的地址信息
二、部署硬件规划:角色分工
### --- 部署硬件规划:角色分工
~~~ Windows:10.10.10.240——>:client本地物理笔记本
~~~ HA-server1:10.10.10.11——>D:负载路由器
~~~ HA-server2:10.10.10.12——>RS1:真实服务器1
~~~ HA-server3:10.10.10.13——>RS2:真实服务器2
~~~ 3台主机都需要关闭NetworkManager:负责主机的无线网卡的启用,
~~~ 包括把一些不安全的网络策略强制关闭,不允许启用;
~~~ 对于环境开子接口的网络方案会拒绝我们的动作的。随意需提前关闭
三、LVS-DR构建
### --- 三台主机环境配置
### --- 关闭网卡守护进程
[root@localhost ~]# service NetworkManager stop // 临时关闭网卡守护进程
Stopping NetworkManager daemon: [ OK ]
[root@localhost ~]# chkconfig NetworkManager off / /永久关闭网卡守护进程
### --- 三台都需要关闭
[root@localhost ~]# service NetworkManager stop && chkconfig NetworkManager off
四、配置负载调度器ipvsadm
### --- 硬件环境:HA-server1:10.10.10.11
### --- 开启一个子接口,配置子接口网卡配置文件
[root@server11 ~]# cd /etc/sysconfig/network-scripts/
[root@server11 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0 // 拷贝一个子接口
[root@server11 network-scripts]# vim !$ // 打开ifcfg-eth0:0 !$:表示上一条命令的最后一个参数
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.10.100 // 开启一个字节口为10.10.10.100,作为集群ip,也就VIP,提供外部用户访问的地址
NETMASK=255.255.255.0 // 11是本机的身份地址,100是在集群设备之间浮动、跳转的。
[root@server11 network-scripts]# service network restart // 重启网卡
[root@server11 network-scripts]# ifconfig // 查看浮动ip是否配置成功
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:FA:34:71
inet addr:10.10.10.100 Bcast:10.10.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
### --- 关闭广播功能;打开内核配置文件。关闭网卡的重定向功能
### --- 这一步是可以不做的,相当于是一个优化过程
[root@server11 ~]# vim /etc/sysctl.conf // 修改内核配置文件
net.ipv4.conf.all.send_redirects = 0 // 关闭所有网卡的
net.ipv4.conf.default.send_redirects = 0 // 关闭默认网卡的
net.ipv4.conf.eth0.send_redirects = 0 // 关闭eth0网卡的
### --- 刷新内核参数
[root@server11 ~]# sysctl -p // 显示说明生效了
net.ipv4.conf.all.send_redirects = 0 // IPV4已经加载到内核中,且已经启动
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
### --- 安装ipvsadm
[root@server11 ~]# yum install -y ipvsadm
~~~ 加载IPVS模块到内核中
[root@server11 ~]# modprobe ip_vs
[root@server11 ~]# ipvsadm -Ln // 查看到当前已经有负载对应的负载信息
IP Virtual Server version 1.2.1 (size=4096) // 什么都没有配置,所以负载信息时空的
Prot LocalAddress:Port Scheduler Flags // 负载调度器配置完成
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
五、配置真实服务器RS1:HA-server2:10.10.10.12
### --- 配置真实服务器RS1:HA-server2:10.10.10.12
### --- 开启一个网卡子接口
[root@server12 ~]# cd /etc/sysconfig/network-scripts/
[root@server12 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@server12 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.10.10.100
NETMASK=255.255.255.255
NETWORK=127.0.0.0
### --- 关闭广播功能ARP响应
[root@server12 network-scripts]# vim /etc/sysctl.conf // 关闭ARP响应及公告功能
# LVS - ARP.
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
### --- 刷新内核参数
[root@server12 network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
### --- 启动lo:0网卡
[root@server12 network-scripts]# ifup lo:0 // 启动lo:0网卡配置
[root@server12 network-scripts]# ifconfig
lo:0 Link encap:Local Loopback
inet addr:10.10.10.100 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
[root@server12 network-scripts]# route add -host 10.10.10.100 dev lo:0 // 为lo添加一个网关,当有人访问主机100的时候交给我的主机lo:0这块网卡
[root@server12 network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo // 地址是100:掩码是4个255,交给lo网卡,配置的是lo:0,而lo:0是lo的子接口,此处只显示标准网卡的名称
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
### --- 为了防止它失效,把它添加到/etc/rc.local文件中 // 添加到开机自启中
### --- 真实服务器可以是TCP,也可以是UDP
[root@server12 network-scripts]# echo "route add -host 10.10.10.100 dev lo:0" >> /etc/rc.local
### --- 这里作为典型的web服务器Apache作为展示
### --- 开启Apache
[root@server12 ~]# service httpd start
### --- 写入一个网站
[root@server12 ~]# echo " this is server 1" >> /var/www/html/index.html
[root@server12 ~]# curl localhost // 查看web服务已经运行了
this is server 1
六、配置真实服务器RS2:HA-server3:10.10.10.13
### --- 配置真实服务器RS2:HA-server3:10.10.10.13
### --- 开启一个子接口
[root@server13 ~]# cd /etc/sysconfig/network-scripts/
[root@server13 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@server13 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.10.10.100
NETMASK=255.255.255.255
NETWORK=127.0.0.0
### --- 关闭广播ARP响应
[root@server13 network-scripts]# vim /etc/sysctl.conf
# LVS - ARP.
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@server13 network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
### --- 启动lo:0网卡
[root@server13 network-scripts]# ifup lo:0
[root@server13 network-scripts]# ifconfig
lo:0 Link encap:Local Loopback
inet addr:10.10.10.100 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
### --- 添加路由规则
[root@server13 network-scripts]# route add -host 10.10.10.100 dev lo:0
[root@server13 network-scripts]# echo "route add -host 10.10.10.100 dev lo:0" >> /etc/rc.local
[root@server13 network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo
10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
### --- 启动一个Apache服务
[root@server13 ~]# service httpd start
[root@server13 ~]# echo " this is server 2" >> /var/www/html/index.html
[root@server13 ~]# curl localhost // 实验环境为了区分两个网站内容不一致
this is server 2 // 真实的生产环境中网页内容必须是一直的。
七、配置LVS-DR集群规则
### --- 配置LVS-DR集群规则
### --- 注释:
ipvsadm -v // 查看当前IPVS集群内容
ipvsadm -A -t 虚拟IP:80 -s rr // -A:添加集群 -t:表示TCP协议,虚拟IP:集群IP,VIP:10.10.10.100; :80:集群端口, -s:指算法 rr:轮询的方式 添加ipvsadm集群子节点
ipvsadm -a -t 虚拟IP:80 -r 网站1:80 -g // -a:添加集群中的子节点 -r:表示真实服务器,网站1:80:apache地址+80端口, -g:表示DR模式
ipvsadm -a -t 虚拟IP:80 -r 网站2:80 -g // 添加ipvsadm集群子节点
### --- 添加LVS-DR集群规则 // 临时生效的,重启后会失效,需添加开机自生效
[root@server11 ~]# ipvsadm -A -t 10.10.10.100:80 -s rr
[root@server11 ~]# ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.12:80 -g
[root@server11 ~]# ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13:80 -g
### --- 查看集群配置是否成功
[root@server11 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.10.100:80 rr // TCP集群,集群地址是:10.10.10.100:80 rr:轮询方式
-> 10.10.10.12:80 Route 1 0 0 // 真实服务器10.10.10.12:80
-> 10.10.10.13:80 Route 1 0 0 // 真实服务器10.10.10.13:80
### --- 为集群规则设置开机自生效
[root@server11 ~]# service ipvsadm save // 将配置文件写入到/etc/sysconfig/ipvsadm文件中
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
[root@server11 ~]# chkconfig ipvsadm on // 开启ipvsadm服务
八、验证:
1、通过IE浏览器访问http://10.10.10.100/ 会在server1服务和server2服务之间切换;说明集群配置成功


2、通过命令的方式验证
### --- 通过命令的方式验证
~~~ Conns:连接数共计18个,分了12主机9个13主机9个
~~~ InPkts:入站数据包
~~~ OutPkts:出站数据包
~~~ InBytes:入站字节
~~~ OutBytes:出站字节
~~~ 入站的都是平均的平分的
~~~ 出站为0,DR模式的工作原理是只介入入站,出站由真实服务器来完成。
[root@server11 ~]# ipvsadm -Ln --stats // --stats:查看当前的状态
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 10.10.10.100:80 18 90 0 12604 0
-> 10.10.10.12:80 9 45 0 6278 0
-> 10.10.10.13:80 9 45 0 6326 0
附录一:实验架构图:

附录二:代码构建
### --- 负载调度器
service NetworkManager stop // 关闭网卡守护进程
cd /etc/sysconfig/network-scrpits/
cp ifcfg-eth0 ifcfg-eth0:0
vim ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=虚拟IP
NETMASK=255.255.255.0
ifup eth0:0
vim /etc/sysctl.conf // 关闭网卡重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
sysctl -p
modprobe ip_vs // 重载IPVS模块
rpm -ivh ipvsadm-1.261...... // 安装ipvsadm命令行工具
ipvsadm -v // 查看当前IPVS集群内容
ipvsadm -A -t // 虚拟IP:80 -s rr 添加ipvsadm集群子节点
ipvsadm -a -t // 虚拟IP:80 -r 网站1:80 -g 添加ipvsadm集群子节点
ipvsadm -a -t // 虚拟IP:80 -r 网站2:80 -g
service ipvsadm save // 保存ipvs集群内容至文件,进行持久化存储
chkconfig ipvsadm on // 设置为开机自启
### --- 真实服务器
service NetworkManager stop // 关闭网卡守护进程
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0 // 拷贝回环网卡子接口
DEVICE=l0:0
IPADDR=虚拟IP
NETMASK=255.255.255.0
vim /etc/sysctl.conf // 关闭对应ARP响应及公告功能
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
sysctl -p
ifup lo:0
route add-host 虚拟IP dev lo:0 // 添加路由记录,当访问VIP交给lo:0网卡接受
service httpd start
[root@localhost ~]# yum install -y ipvsadm
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv001-lbchac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通