什么是集群
- 一组通过高速网络互联的计算组,并以单一系统的模式加以管理
- 将很多服务器集中起来一起,提供同一种服务,在客户端看来就像是只有一个服务器
- 可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的相对较高的收益
- 任务调度是集群系统中的核心技术
集群目的
提高性能
- 如计算密集型应用,如:天气预报,核试验模拟
降低成本 - 相对百万美元级的超级计算机,价格便宜
提高可扩展性 - 只要增加集群节点即可
增强可靠性 - 多个节点完成相同功能,避免单点失败(故障)
集群分类
高性能计算集群HPC
- 通过以集群开发的并行应用程序,解决复杂的科学问题
负载均衡(LB)集群 - 客户端负载在计算机集群中尽可能平均分摊
高可用(HA)集群 - 避免单点故障,当一个系统发生故障时,可以快速迁移
LVS项目介绍
- Linux虚拟服务器(Linux Virtual Server)是章文嵩在国防科技大学就读博士期间创建的
- LVS可以实现高可用的,可伸缩的WEB,Mail,Cache和Media等网络服务
- 最终目标是利用Linux操作系统和LVS集群软件实现一个高可用,高性能,低成本的服务器应用集群
- LVS,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发
- LVS是四层(传输层tcp/vdp),七层(应用层)的负载均衡工具,用的最多的是就是四层负载均衡功能的ipvs,七层的内容分发负载ktcpvs(kenrnel tcp virtual server),基于内容的调度,因为应用层交换处理复杂,但伸缩性有限.
- LVS是集成在Linux内核里
LVS集群的组成
前端: 负载均衡
- 由一台或多台敷在调度器构成
中间: 服务器群组层 - 由一组实际运行应用服务的服务器组成
底端: 数据共享存储层 - 提供共享存储空间的存储区域
LVS术语
Director Server : 调度服务器
- 将负载分发到real server的服务器
Real Server : 真实服务器 - 真正提供应用服务的服务器
VIP : 虚拟IP地址 - 公布给用户访问的虚拟IP地址
RIP : 真实的IP地址 - 集群节点上使用的IP地址
DIP : 调度器连接节点服务器的IP地址
LVS的工作模式
LVS/NAT模式
- 通过网络地址转换实现的虚拟服务器
- 大并发访问时,调度器的性能成为瓶颈
- 处理客户端数据请求流量不大,返回数据的流量大
- 导致调度器处理数据流量的压力更大
NAT模式工作流程
NAT即网络地址转换,其作用是将源(客户端)的IP地址转发给后端服务器
后端服务器处理完数据后通过NAT地址回传给客户端
LVS/DR模式
- 直接使用路由技术实现虚拟服务器
- 节点服务器需要配置VIP,注意MAC地址广播
DR模式工作流程
由LVS调度转发客户端数据请求给后端服务器,由后端服务器处理
后端服务器处理完成后伪装成LVS调度器回传给客户端
LVS/TUN模式
- 通过隧道方式实现虚拟服务器
TUN模式工作流程
这个模式是基于调度器与后端服务器是跨地区的情况
客户端访问LVS调度器,LVS通过vpn技术把用户的请求转发到后端服务器
再由服务器把处理数据的结果通过vpn回传给客户端
这样做的最大缺点就是: 跨地区会导致网络延迟很大访问效率速度更低
负载均衡调度算法
LVS目前实现了10种调度算法
常用的调度算法有4种:
- 轮询(Round Robin),简称RR
将客户端请求平均分发到Real server(后端服务器) - 加权轮询(Weight Round Robin),简称:WRR
根据real server(后端服务器)权重值进行轮询调度 - 最少连接(Least Connection),简称:LC
选择连接最少的服务器 - 加权最少连接(Weighted Least Connections),简称:WLC
根据real server(后端服务器)权重值,选择连接数最少的服务器 - 源地址散列(Source Hashing)
相同客户端访问相同服务器
根据请求的目标地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器
负载均衡其他调度调度算法
- 基于局部性的最少链接
- 带复制的基于局部性最少链接
- 目标地址散列(Destination Hashing)
- 最短的期望的延迟
- 最少队列调度
LVS调度器与Nginx代理服务器的区别
LVS的性能(效率)大于>Nginx
Nginx代理服务器:
数据封装:
- 客户端访问代理服务器的时候数据包是四层封装,代理服务器进行解压再查看访问数据
- 代理服务器充当客户端角色进行数据封装转发给后台服务器
- 后台服务进行解压数据包返回数据的同时进行数据封装交给代理服务器
- 再由代理服务器回传给客户端
IP地址角度: - 客户端4.10===> Nginx代理4.5/2.5 ===>Web服务器2.100
- Web服务器2.100==>Nginx代理2.5/4.5===>客户端4.10
LVS调度器:
- LVS可以实现动态路由功能
IP地址角度: - 客户端4.10===>LVS调度器4.5(NAT地址转换4.10/2.100)===>Web服务器2.100
- Web服务器2.100===>LVS调度器(NAT地址转换4.5/4.10===>客户端4.10
- 调度器不会处理客户端的数据包请求,通过NAT地址转换起到一个转发数据包给后端服务器的功能,(相当于客户端直接访问后端服务器)
- 由后端服务器处理完数据包通过LVS调度器回传给客户端
LVS调度器与路由的区别:
- 路由器NAT地址转换只能实现把公网转换成私网,在把私网转换成公网,导致客户端访问的都是同一台服务器.
- LVS调度器不仅能实现NAT地址转换还能实现负载均衡的功能
LVS的缺点
- 不支持正则表达式
- 不能做网站
- 不能做动静分离
- 没有健康检查功能
- 功能太少
ipvsadm命令用法
问题:
准备一台Linux服务器,安装ipvsadm软件包,练习使用ipvsadm命令,实现如下功能:
使用命令添加基于TCP一些的集群服务
在集群中添加若干台后端真实服务器
实现同一客户端访问,调度器分配固定服务器
会使用ipvsadm实现规则的增、删、改
保存ipvsadm规则
方案:
安装ipvsadm软件包,关于ipvsadm的用法可以参考man ipvsadm资料。
常用ipvsadm命令语法格式如表所示。
步骤一:使用命令增、删、改LVS集群规则
[root@proxy ~]# yum -y install ipvsadm ##下载ipvsadm命令
创建一台虚拟服务器,协议为tcp,算法为轮询:
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s rr
[root@proxy ~]# ipvsadm -Ln ##查看Lvs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.5:80 rr
添加真实服务器2.100和2.200,协议为tcp:
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100:80
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200:80
[root@proxy ~]# ipvsadm -Ln ##查看LVS
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.5:80 rr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 1 0 0
添加真实服务器2.201,权重为2:
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.201:80 -w 2
[root@proxy ~]# 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.4.5:80 rr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 1 0 0
-> 192.168.2.201:80 Route 2 0 0
修改2.200服务器权重为3:
[root@proxy ~]# ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.200:80 -w 3
[root@proxy ~]# ipvsadm -Ln ##查看LVS
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.5:80 rr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 3 0 0
-> 192.168.2.201:80 Route 2 0 0
##以上修改的权重都没有用,因为虚拟虚拟服务器是rr(轮询算法)
修改虚拟服务器的算法为Wrr(加权轮询)
[root@proxy ~]# ipvsadm -E -t 192.168.4.5:80 -s wrr
[root@proxy ~]# 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.4.5:80 wrr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 3 0 0
-> 192.168.2.201:80 Route 2 0 0
##这样权重才起作用
添加两台真实服务器2.202,NAT模式和2.203,DR模式:
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.202:80 -m
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.203:80 -i
[root@proxy ~]# 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.4.5:80 wrr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 3 0 0
-> 192.168.2.201:80 Route 2 0 0
-> 192.168.2.202:80 Masq 1 0 0
-> 192.168.2.203:80 Tunnel 1 0 0
删除真实服务器2.203和2.202
[root@proxy ~]# ipvsadm -d -t 192.168.4.5:80 -r 192.168.2.202:80
[root@proxy ~]# ipvsadm -d -t 192.168.4.5:80 -r 192.168.2.203:80
[root@proxy ~]# 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.4.5:80 wrr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 3 0 0
-> 192.168.2.201:80 Route 2 0 0
删除虚拟服务器(单个集群):
[root@proxy ~]# ipvsadm -D -t 192.168.4.5:80
[root@proxy ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
##删除所有集群:ipvsadm -C
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s rr
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100:80
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200:80
[root@proxy ~]# 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.4.5:80 rr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 1 0 0
[root@proxy ~]# ipvsadm-save -n > a.txt ##永久保存集群
[root@proxy ~]# ipvsadm -C ##删除集群
[root@proxy ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@proxy ~]# ipvsadm-restore < a.txt ##导出LVS(集群)
[root@proxy ~]# ipvsadm -Ln ##查看LVS(集群)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.5:80 rr
-> 192.168.2.100:80 Route 1 0 0
-> 192.168.2.200:80 Route 1 0 0
下面仅实验NAT模式与DR模式,TUN模式不常用
LVS-NAT集群
- LVS的IP负载均衡技术是用过IPVS模块实现的
- IPVS模块已成为Linux组成部分
LVS-NAT集群拓扑图
操作流程
Real Server:
- 配置WEB服务器
Director server: - 在上安装并启用ipvsadm
- 创建虚拟服务器
- 向虚拟服务器中加入节点
Client: - 连接虚拟服务器测试
部署LVS-NAT集群
问题:
使用LVS实现NAT模式的集群调度服务器,为用户提供Web服务:
集群对外公网IP地址为192.168.4.5
调度器内网IP地址为192.168.2.5
真实Web服务器地址分别为192.168.2.100、192.168.2.200
使用加权轮询调度算法,真实服务器权重分别为1和2
方案:
实验拓扑结构主机配置细节如表所示。
使用4台虚拟机,1台作为Director调度器、2台作为Real Server、1台客户端,拓扑结构如图所示,注意:web1和web2必须配置网关地址。
步骤一:配置基础环境
1)设置Web服务器网关(以web1为例)
[root@web1 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.gateway 192.168.2.5
[root@web1 ~]# nmcli connection up eth1
##也可以直接修改配置文件
[root@web1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.5 0.0.0.0 UG 104 0 0 eth1
192.168.2.0 0.0.0.0 255.255.255.0 U 104 0 0 eth1
2)设置Web服务器(已下载可忽略)
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html
3)启动Web服务器软件
[root@web1 ~]# systemctl restart httpd
常见问题:如果httpd服务启动启动的比较慢?
解决方法:可以修改/etc/httpd/conf/httpd.conf文件,
将ServerName www.example.com:80这行的#注释符删除即可。
步骤二:部署LVS-NAT模式调度器
1)确认调度器的路由转发功能(如果已经开启,可以忽略)
[root@proxy ~]# cat /proc/sys/net/ipv4/ip_forward ##临时有效的配置文件
1
##不能用vim直接修改,用echo
[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
永久配置文件:
[root@proxy ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
/etc/sysctl.conf
添加一行:net.ipv4.ip_forward =1
2)创建集群服务器
[root@proxy ~]# yum -y install ipvsadm
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr
添加真实服务器
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -m
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -m
查看规则列表,并保存规则
[root@proxy ~]# 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.4.5:80 wrr
-> 192.168.2.100:80 Masq 1 0 0
-> 192.168.2.200:80 Masq 1 0 0
[root@proxy ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
3 ) 客户端测试:
[root@client ~]# curl 192.168.4.5
192.168.2.200
[root@client ~]# curl 192.168.4.5
192.168.2.100
[root@client ~]# curl 192.168.4.5
192.168.2.200
[root@client ~]# curl 192.168.4.5
192.168.2.100
##出现轮询效果
LVS-DR集群
LVS-DR拓扑图
操作流程
Real Server :
- 配置WEB服务器
- 配置辅助IP地址,调整内核参数
Director Server : - 在上安装并启用ipvsadm
- 配置辅助IP地址
- 创建虚拟服务器,向虚拟服务器中加入节点
Client : - 连接虚拟服务器测试
ARP广播问题
- 当客户端发起访问VIP时,对应的域名的请求时,根据网络通讯原理会产生ARR广播
- 因为负载均衡器和真实的服务器在同一网络并且VIP设置在集群中的每个节点上
- 此时集群内的真实服务器会尝试回答来自客户端的ARR广播,这就会产生问题,大家都说我是"VIP"
ARP防火墙
- 使用ARP防火墙也可以禁止对VIP的ARP请求
[root@client ~]# yum -y install arptables_if
[root@client ~]# arptables -A IN -d <virtual_ip> -j DROP
[root@client ~]# arptables -A IN -d OUT -s <virtual_ip> -j mangle \
>--mangle-ip-s <real_ip>
内核参数说明
- arp_ignore(定义回复ARR广播方式)
- 0(默认值)
回应所有的本地地址ARR广播,本地地址可以配置在任意网络接口 - 1
只回应配置在入站网卡接口上的任意IP地址的ARR广播 - arp_announce
- 0(默认)
使用配置在任意网卡接口上的本地IP地址 - 2
对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址.如果没有合适的地址被发现,将选择当前的发送网络接口或其他有可能接收到该ARR回应的网络接口来进行发送
部署LVS-DR集群
问题:
使用LVS实现DR模式的集群调度服务器,为用户提供Web服务:
客户端IP地址为192.168.4.10
LVS调度器VIP地址为192.168.4.15
LVS调度器DIP地址设置为192.168.4.5
真实Web服务器地址分别为192.168.4.100、192.168.4.200
使用加权轮询调度算法,web1的权重为1,web2的权重为2
方案:
使用4台虚拟机,1台作为客户端、1台作为Director调度器、2台作为Real Server,拓扑结构如图所示。实验拓扑结构主机配置细节如表所示。
说明:
CIP是客户端的IP地址;
VIP是对客户端提供服务的IP地址;
RIP是后端服务器的真实IP地址;
DIP是调度器与后端服务器通信的IP地址(VIP必须配置在虚拟接口)。
步骤一:配置实验网络环境
1)设置Proxy服务器的VIP和DIP
注意:为了防止冲突,VIP必须要配置在网卡的虚拟接口!!!
[root@proxy ~]# cd /etc/sysconfig/network-scripts/ ##网卡的配置文件的目录
[root@proxy network-scripts]# ls
ifcfg-eth0 ifdown-isdn ifup-bnep ifup-sit
ifcfg-eth1 ifdown-post ifup-eth ifup-Team
ifcfg-eth2 ifdown-ppp ifup-ippp ifup-TeamPort
ifcfg-eth3 ifdown-routes ifup-ipv6 ifup-tunnel
ifcfg-lo ifdown-sit ifup-isdn ifup-wireless
[root@proxy network-scripts]# cp ifcfg-eth0{,:0}
[root@proxy network-scripts]# vim ifcfg-eth0:0
TYPE=Ethernet #网卡类型为:以太网卡
BOOTPROTO=none #none手动配置IP,或者dhcp自动配置IP
NAME=eth0:0 #网卡名称
DEVICE=eth0:0 #设备名称
ONBOOT=yes #开机时是否自动激活该网卡
IPADDR=192.168.4.15 #IP地址
PREFIX=24 #子网掩码
[root@proxy network-scripts]# systemctl restart network
[root@proxy network-scripts]# ifconfig ##可以用ifconfig查看ip
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.5 netmask 255.255.255.0 broadcast 192.168.4.255
eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.15 netmask 255.255.255.0 broadcast 192.168.4.255
[root@proxy network-scripts]# ip a s eth0 ##这样查比较便捷
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:86:73:d1 brd ff:ff:ff:ff:ff:ff
inet 192.168.4.5/24 brd 192.168.4.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.4.15/24 brd 192.168.4.255 scope global secondary noprefixroute eth0:0
valid_lft forever preferred_lft forever
常见问题:RHEL7和Centos7系统中有两个管理网络的服务,有可能冲突?
解决方法:关闭NetworkManager服务后重启network即可。
)设置Web1服务器网络参数(以web1为案例)
[root@web1 ~]# nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
[root@web1 ~]# nmcli connection up eth0
接下来给web1配置VIP地址。
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo{,:0}
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
NETWORK=192.168.4.15
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.4.15
ONBOOT=yes
NAME=lo:0
防止地址冲突的问题:
这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突;
sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。
[root@web1 ~]# vim /etc/sysctl.conf
#手动写入如下4行内容,防止地址冲突
net.ipv4.conf.all.arp_ignore = 1 ##定义回复ARP广播的方式(0自称,1忽略)
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2 ##(0 宣告IP ; 1 尽量不宣告IP ; 2 绝不宣告)
net.ipv4.conf.all.arp_announce = 2
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15
[root@web1 ~]# sysctl -p ##重新加载一下
重启网络服务,设置防火墙与SELinux
[root@web1 ~]# systemctl restart network
[root@web1 ~]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.4.15 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
常见错误:如果重启网络后未正确配置lo:0,有可能是NetworkManager和network服务有冲突,关闭NetworkManager后重启network即可。(非必须的操作)
[root@web1 ~]# systemctl stop NetworkManager
[root@web1 ~]# systemctl restart network
3)同样操作配置Web2服务器
[root@web2 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.200/24 connection.autoconnect yes
[root@web2 ~]# nmcli connection up eth0
[root@web2 ~]# cd /etc/sysconfig/network-scripts/
[root@web2 network-scripts]# cp ifcfg-lo{,:0}
[root@web2 network-scripts]# vim ifcfg-lo:0
[root@web2 network-scripts]# vim /etc/sysctl.conf
[root@web2 network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@web2 ~]# systemctl restart network
[root@web2 ~]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.4.15 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
4)测试整个网络是否能正常通信,否则整个网络瘫痪
[root@web1 network-scripts]# ping 192.168.4.5 ##测试4.5
PING 192.168.4.5 (192.168.4.5) 56(84) bytes of data.
64 bytes from 192.168.4.5: icmp_seq=1 ttl=255 time=0.697 ms
[root@web1 network-scripts]# ping 192.168.4.10 ##测试4.10
PING 192.168.4.10 (192.168.4.10) 56(84) bytes of data.
64 bytes from 192.168.4.10: icmp_seq=1 ttl=255 time=0.035 ms
[root@web1 network-scripts]# ping 192.168.4.100 ##测试4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=255 time=0.035 ms
[root@web1 network-scripts]# ping 192.168.4.15 ##测试4.15
PING 192.168.4.15 (192.168.4.15) 56(84) bytes of data.
64 bytes from 192.168.4.15: icmp_seq=1 ttl=255 time=0.052 ms
[root@web1 network-scripts]# ping 192.168.4.200 ##测试4.200
PING 192.168.4.200 (192.168.4.200) 56(84) bytes of data.
64 bytes from 192.168.4.200: icmp_seq=1 ttl=255 time=0.363 ms
步骤二:proxy调度器安装软件并部署LVS-DR模式调度器
1)安装软件(如果已经安装,此步骤可以忽略)
[root@proxy ~]# yum -y install ipvsadm
2)清理之前实验的规则,创建新的集群服务器规则
[root@proxy ~]# ipvsadm -C #清空所有规则
[root@proxy ~]# ipvsadm -A -t 192.168.4.15:80 -s wrr
3)添加真实服务器(-g参数设置LVS工作模式为DR模式,-w设置权重)
[root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100:80
[root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200:80
[root@proxy ~]# 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.4.15:80 wrr
-> 192.168.4.100:80 Route 1 0 0
-> 192.168.4.200:80 Route 1 0 0
步骤三:客户端测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器。
[root@client ~]# curl 192.168.4.15
192.168.2.200
[root@client ~]# curl 192.168.4.15
192.168.2.100
[root@client ~]# curl 192.168.4.15
192.168.2.200
[root@client ~]# curl 192.168.4.15
192.168.2.100
出现轮询效果
默认LVS不带健康检查功能,需要自己手动编写动态检测脚本,实现该功能:(参考脚本如下,仅供参考)
[root@proxy ~]# vim check.sh
#!/bin/bash
VIP=192.168.4.15:80
RIP1=192.168.4.100
RIP2=192.168.4.200
while :
do
for IP in $RIP1 $RIP2
do
curl -s http://$IP &>/dev/vnull
if [ $? -eq 0 ];then
ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP
else
ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP
fi
done
sleep 3
done
[root@proxy ~]# chmod +x check.sh
##usleep 沉睡(毫秒)