集群|集群 存储 LVS的集群

集群 什么是集群

  • 一组通过高速网络互联的计算组,并以单一系统的模式加以管理
  • 将很多服务器集中起来一起,提供同一种服务,在客户端看来就像是只有一个服务器
  • 可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益
  • 任务调度是集群系统中的核心技术
集群目的
  • 提高性能:如计算密集型应用,
  • 降低成本:相对百万美元级的超级计算机,价格便宜
  • 提高可扩展性:只要增加集群节点即可
  • 增强可靠性:多个节点完成相同功能,避免单点失败
集群分类
  • 高性能计算集群HPC
----通过以集群开发的并行应用程序,解决复杂的科学问题
  • 负载均衡(LB)集群
----客户端负载在计算机集群中尽可能平均分摊
  • 高可用(HA)集群
----避免单点故障,当一个系统发生故障时,可用快速迁移
LVS概述 LVS项目介绍
  • Linux虚拟服务器(LVS)是章文嵩在国防科技大学就读博士期间创建的
  • LVS可用实现高可用的.可伸缩的Web.Mail.Cache和Media等网络服务
  • 最终目标是利用Linux操作系统和LVS集群软件实现一个高可用.高性能.低成本的服务器应用集群
LVS集群组成
  • 前端:负载均衡层
----由一台或多台负载调度器构成
  • 中间:服务器群组层
----由一组实际运行应用服务的服务器组成
  • 底端:数据共享存储层
----提供共享存储空间的存储区域
LVS术语
  • DirectorServer:调度服务器
----将负载分发到RealServer的服务器
  • RealServer:真实服务器
----真正提供应用服务的服务器
  • VIP:虚拟IP地址
----公布给用户访问的虚拟IP地址
  • RIP:真实IP地址
----集群节点上使用的IP地址
  • DIP:调度器连接节点服务器的IP地址
  • CIP:客户端的IP地址
LVS工作模式
集群|集群 存储 LVS的集群
文章图片

VS/NAT
  • 通过网络地址转换实现的虚拟服务器
  • 大并发访问时,调度器的性能成为瓶颈
  • 处理客户端数据请求流量不大,返回数据的流量大
  • 导致调度器处理数据流量的压力更大
NAT模式工作流程
NAT即网络地址转换,其作用是将源(客户端)的IP地址转发给后端服务器
后端服务器处理完数据后通过NAT地址回传给客户端
VS/TUN
  • 通过隧道方式实现虚拟服务器
TUN模式工作流程
这个模式是基于调度器与后端服务器是跨地区的情况
客户端访问LVS调度器,LVS通过技术把用户的请求转发到后端服务器
再由服务器把处理数据的结果通过回传给客户端
这样做的最大缺点就是: 跨地区会导致网络延迟很大访问效率速度更低
VS/DR
  • 直接使用路由技术实现虚拟服务器
  • 节点服务器需要配置VIP,注意MAC地址广播
  • 可以满足更大规模的集群
DR模式工作流程
由LVS调度转发客户端数据请求给后端服务器,由后端服务器处理
后端服务器处理完成后伪装成LVS调度器回传给客户端
LVS的负载均衡调度算法
  • LVS目前实现了10中调度算法
  • 常用的调度算法有四种
  1. 轮询(RoundRobin)简称RR
  2. 加权轮询(WeightedRoundRobin)简称WRR
  3. 最少连接(LeastConnections)简称LC
  4. 加权最少连接(WeightedLeastConnections)简称WLC
轮询:将客户端的请求平均分发到RealServer,
加权轮询:根据Real Server权重值进行轮询
最少连接:选择连接最少数的服务器
加权最少连接:根据Real Server权重值,选择连接数最少的服务器
最小延迟:找网速更快的服务器
网卡的延迟与网卡的带宽,数据的流量有关
最少队列调度:当已经达到最大的并发量时,客户端访问则自动进行排队,哪个服务器的排队最少则自动将客户端放到该队列
源地址散列(Source Hashing):根据请求的目标地址IP,作为散列键(HashKey)从静态分配的散列表找出对应的服务器
其他调度算法:
基于局部性的最少连接
带复制的基于局部性最少连接
目标地址散列(DestinationHashing)
最短的期望的延迟
最少队列调度
LVS-NAT集群
LVS的IP负载均衡技术是通过IPVS模块实现的
IPVS模块已成为Linux的组成部分
[root@proxy ~]# grep -i'ipvs'/boot/config-3.10.0-862.el7.x86_64 CONFIG_NETFILTER_XT_MATCH_IPVS=m # IPVS transport protocol load balancing support # IPVS scheduler # IPVS SH scheduler # IPVS application helper

ipvsadm命令用法
准备一台Linux服务器,安装ipvsadm软件包,练习使用ipvsadm命令,实现如下功能:
使用命令添加基于TCP一些的集群服务 在集群中添加若干台后端真实服务器 实现同一客户端访问,调度器分配固定服务器 会使用ipvsadm实现规则的增、删、改 保存ipvsadm规则

方案安装ipvsadm软件包,关于ipvsadm的用法可以参考man ipvsadm资料。
常用ipvsadm命令语法格式如表-1及表-2所示。
集群|集群 存储 LVS的集群
文章图片

集群|集群 存储 LVS的集群
文章图片

使用命令增(add)、删(delete)、改(edit)、清除所有(clear)LVS集群规则
1)创建LVS虚拟集群服务器(算法为轮询:rr)
[root@proxy ~]# yum-yinstallipvsadm#下载ipvsadm [root@proxy ~]# ipvsadm-A-t192.168.4.5:80-srr#新建虚拟集群 新建一个虚拟服务器,协议是tcp服务,算法为轮询算法 [root@proxy ~]# ipvsadm-Ln#查看,此时没有真实的服务器 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 rr

2)为集群添加若干real server
[root@proxy ~]# ipvsadm-a-t192.168.4.5:80-r192.168.2.100:80#添加真实服务器,添加到192.168.4.5的虚拟机群,添加realserver [root@proxy ~]# ipvsadm-a-t192.168.4.5:80-r192.168.2.200:80 [root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 rr -> 192.168.2.100:80Route100 -> 192.168.2.200:80Route100[root@proxy ~]# ipvsadm-a-t192.168.4.5:80-r192.168.2.201:80-w2 #再添加一台权重为2的服务器 [root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 rr -> 192.168.2.100:80Route100 -> 192.168.2.200:80Route100 -> 192.168.2.201:80Route200[root@proxy ~]# ipvsadm-e-t192.168.4.5:80-r192.168.2.200:80-w3 #修改realserver192.168.2.200的权重为3 [root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 rr -> 192.168.2.100:80Route100 -> 192.168.2.200:80Route300 -> 192.168.2.201:80Route200当算法为轮询时,不论权重多少都依然自动执行轮询算法

3)修改集群服务器设置(修改调度器算法,将轮询修改为加权轮询)
[root@proxy ~]# ipvsadm-E-t192.168.4.5:80-swrr [root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 wrr -> 192.168.2.100:80Route100 -> 192.168.2.200:80Route300 -> 192.168.2.201:80Route200

4)修改read server(使用-g,-m,-i选项,默认即为DR模式,-m为NAT模式,-i为Tunnel模式)
[root@proxy ~]# ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.202 -g [root@proxy ~]# ipvsadm -a-t192.168.4.5:80-r192.168.2.202:80-m [root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 wrr -> 192.168.2.100:80Route100 -> 192.168.2.200:80Route300 -> 192.168.2.201:80Route200 -> 192.168.2.202:80Masq100[root@proxy ~]# ipvsadm -a-t192.168.4.5:80-r192.168.2.203:80-i [root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 wrr -> 192.168.2.100:80Route100 -> 192.168.2.200:80Route300 -> 192.168.2.201:80Route200 -> 192.168.2.202:80Masq100 -> 192.168.2.203:80Tunnel100

下面仅实验NAT模式与DR模式,TUN模式不常用
LVS-NAT集群
  • LVS的IP负载均衡技术是用过IPVS模块实现的
  • IPVS模块已成为Linux组成部分
LVS-NAT集群拓扑图
集群|集群 存储 LVS的集群
文章图片

操作流程
  • 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
方案
实验拓扑结构主机配置细节如表所示。
集群|集群 存储 LVS的集群
文章图片

使用4台虚拟机,1台作为Director调度器、2台作为Real Server、1台客户端,拓扑结构如图所示,注意:web1和web2必须配置网关地址。
集群|集群 存储 LVS的集群
文章图片

步骤一:配置基础环境
1 ) 为web1和web2配置服务器网关
[root@web1 ~]# nmcli connection modify eth1 ipv4.methodmanualipv4.gateway192.168.2.5 [root@web1 ~]# nmcli connection upeth1 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5) #################################################################### 也可以更改/etc/sysconfig/network配置文件 [root@web1 ~]# route -n Kernel IP routing table DestinationGatewayGenmaskFlags Metric RefUse Iface 0.0.0.0192.168.2.50.0.0.0UG10400 eth1 192.168.2.00.0.0.0255.255.255.0U10400 eth1 [root@web2 ~]# nmcli connection modify eth1 ipv4.methodmanualipv4.gateway192.168.2.5 [root@web2 ~]# nmcli connection upeth1 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5) [root@web2 ~]# route -n Kernel IP routing table DestinationGatewayGenmaskFlags Metric RefUse Iface 0.0.0.0192.168.2.50.0.0.0UG10400 eth1 192.168.2.00.0.0.0255.255.255.0U10400 eth1

2)设置Web服务器(下载可忽略)
[root@web1 ~]# yum -y install httpd [root@web1 ~]# vim /etc/httpd/conf/httpd.conf 95 ServerName www.example.com:80 [root@web1 ~]# echo123123>/var/www/html/index.html [root@web1 ~]# systemctlrestarthttpd [root@web1 ~]# curlhttp://192.168.2.100 123123 [root@web2 ~]# vim /etc/httpd/conf/httpd.conf 95 ServerName www.example.com:80 [root@web2 ~]# echo456456>/var/www/html/index.html [root@web2 ~]# systemctlrestarthttpd [root@web2 ~]# curl192.168.2.200 456456

常见问题:如果httpd服务启动启动的比较慢?
解决方法:可以修改/etc/httpd/conf/httpd.conf文件,
将ServerName www.example.com:80这行的#注释符删除即可。
3 ) 客户端访问测试
[root@proxy ~]# curl192.168.2.100 123123 [root@proxy ~]# curl192.168.2.200 456456

步骤二:部署LVS-NAT模式调度器
1 ) 确认调度器的路由转发功能(如果已经开启,可以忽略)
[root@web1 ~]# cat/proc/sys/net/ipv4/ip_forward#确认路由是否开启,0是没开启,1是已经开启 1 [root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward#临时修改 [root@proxy ~]# cat /proc/sys/net/ipv4/ip_forward 1 [root@proxy ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #修改配置文件,设置永久规则


2)创建集群服务器
[root@proxy ~]# yum -y install ipvsadm [root@proxy ~]# ipvsadm-C [root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr

3)添加真实服务器
[root@proxy ~]# ipvsadm -a-t 192.168.4.5:80-r192.168.2.100:80-m [root@proxy ~]# ipvsadm -a-t 192.168.4.5:80-r192.168.2.200:80-m

4)查看规则列表,并保存规则
[root@proxy ~]# ipvsadm-Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.5:80 wrr -> 192.168.2.100:80Masq100 -> 192.168.2.200:80Masq100 [root@proxy ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

步骤三:客户端测试
客户端使用curl命令反复连接http://192.168.4.5,查看访问的页面是否会轮询到不同的后端真实服务器。
lvs集成在内核,只要Linux启动,lvs就自动集成 [root@client ~]# curl192.168.4.5 456456 [root@client ~]# curl192.168.4.5 123123 [root@client ~]# curl192.168.4.5 456456 [root@client ~]# curl192.168.4.5 123123

LVS-DR集群
LVS-DR集群拓扑图
集群|集群 存储 LVS的集群
文章图片

操作流程
  • 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 -j DROP [root@client ~]# arptables -A IN -d OUT -s -j mangle \ >--mangle-ip-s

内核参数说明
  • 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
说明:
  • CIP是客户端的IP地址;
  • VIP是对客户端提供服务的IP地址;
  • RIP是后端服务器的真实IP地址;
  • DIP是调度器与后端服务器通信的IP地址(VIP必须配置在虚拟接口)。
方案
使用4台虚拟机,1台作为客户端、1台作为Director调度器、2台作为Real Server,拓扑结构如图所示。实验拓扑结构主机配置细节如表所示。
集群|集群 存储 LVS的集群
文章图片

集群|集群 存储 LVS的集群
文章图片

步骤一:配置实验网络环境
1)设置Proxy服务器的VIP和DIP
注意:为了防止冲突,VIP必须要配置在网卡的虚拟接口!!!
[root@proxy ~]# cd /etc/sysconfig/network-scripts/ [root@proxy network-scripts]# ls ifcfg-eth0ifdown-ethifdown-sitifup-ethifup-pppinit.ipv6-global ifcfg-eth1ifdown-ipppifdown-Teamifup-ipppifup-routesnetwork-functions ifcfg-eth2ifdown-ipv6ifdown-TeamPortifup-ipv6ifup-sitnetwork-functions-ipv6 ifcfg-eth3ifdown-isdnifdown-tunnelifup-isdnifup-Team ifcfg-loifdown-postifupifup-plipifup-TeamPort ifdownifdown-pppifup-aliasesifup-plusbifup-tunnel ifdown-bnepifdown-routesifup-bnepifup-postifup-wireless [root@proxy network-scripts]# cpifcfg-eth0{,:0} [root@proxy network-scripts]# vimifcfg-eth0:0 1 TYPE=Ethernet#网卡类型为:以太网卡 4 BOOTPROTO=none#none手动配置IP,或者dhcp自动配置IP 6 NAME=eth0:0#网卡名称 7 DEVICE=eth0:0#设备名称 8 ONBOOT=yes#开机时是否自动激活该网卡 9 IPADDR=192.168.4.15#IP地址 10 PREFIX=24#子网掩码 [root@proxy network-scripts]# systemctlrestart network#重启 [root@proxy network-scripts]# ifconfig#此时多了一个eth0:0的网卡,其他主机也可以ping通该IP eth0: flags=4163mtu 1500 inet 192.168.4.5netmask 255.255.255.0broadcast 192.168.4.255 ether 52:54:00:2f:40:71txqueuelen 1000(Ethernet) RX packets 11438bytes 698521 (682.1 KiB) RX errors 0dropped 8612overruns 0frame 0 TX packets 1826bytes 222235 (217.0 KiB) TX errors 0dropped 0 overruns 0carrier 0collisions 0 eth0:0: flags=4163mtu 1500 inet 192.168.4.15netmask 255.255.255.0broadcast 192.168.4.255 ether 52:54:00:2f:40:71txqueuelen 1000(Ethernet) ....... [root@proxy ~]# ip a seth0#查看ip的另一种方法 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:2f:40:71 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[root@proxy ~]# cd /etc/sysconfig/network-scripts/ [root@proxy network-scripts]# ls ifcfg-eth0ifdown-ethifdown-sitifup-ethifup-pppinit.ipv6-global ifcfg-eth1ifdown-ipppifdown-Teamifup-ipppifup-routesnetwork-functions ifcfg-eth2ifdown-ipv6ifdown-TeamPortifup-ipv6ifup-sitnetwork-functions-ipv6 ifcfg-eth3ifdown-isdnifdown-tunnelifup-isdnifup-Team ifcfg-loifdown-postifupifup-plipifup-TeamPort ifdownifdown-pppifup-aliasesifup-plusbifup-tunnel ifdown-bnepifdown-routesifup-bnepifup-postifup-wireless [root@proxy network-scripts]# cpifcfg-eth0{,:0} [root@proxy network-scripts]# vimifcfg-eth0:0 1 TYPE=Ethernet#网卡类型为:以太网卡 4 BOOTPROTO=none#none手动配置IP,或者dhcp自动配置IP 6 NAME=eth0:0#网卡名称 7 DEVICE=eth0:0#设备名称 8 ONBOOT=yes#开机时是否自动激活该网卡 9 IPADDR=192.168.4.15#IP地址 10 PREFIX=24#子网掩码 [root@proxy network-scripts]# systemctlrestart network#重启 [root@proxy network-scripts]# ifconfig#此时多了一个eth0:0的网卡,其他主机也可以ping通该IP eth0: flags=4163mtu 1500 inet 192.168.4.5netmask 255.255.255.0broadcast 192.168.4.255 ether 52:54:00:2f:40:71txqueuelen 1000(Ethernet) RX packets 11438bytes 698521 (682.1 KiB) RX errors 0dropped 8612overruns 0frame 0 TX packets 1826bytes 222235 (217.0 KiB) TX errors 0dropped 0 overruns 0carrier 0collisions 0 eth0:0: flags=4163mtu 1500 inet 192.168.4.15netmask 255.255.255.0broadcast 192.168.4.255 ether 52:54:00:2f:40:71txqueuelen 1000(Ethernet) ....... [root@proxy ~]# ip a seth0#查看ip的另一种方法 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:2f:40:71 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即可。
[root@proxy network-scripts]# systemctlstop NetworkManager

2)设置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 network-scripts]# cpifcfg-lo{,:0} 1 DEVICE=lo:0#设备名称 2 IPADDR=192.168.4.15#IP地址 3 NETMASK=255.255.255.255#子网掩码 4 NETWORK=192.168.4.15#网络地址 5 BROADCAST=192.168.4.15#广播地址 6 ONBOOT=yes#开机时是否自动激活该网卡 7 NAME=lo:0#网卡名称

防止地址冲突的问题:
这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突;
sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。
[root@web1 network-scripts]# vim/etc/sysctl.conf #手动写入如下4行内容 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 #arp_ignore 当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应 #arp_announce 本机不要向外宣告自己的lo回环地址是192.168.4.15 [root@web1 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

重启网络服务,设置防火墙与SELinux
[root@web1 network-scripts]# systemctlrestartnetwork [root@web1 network-scripts]# ifconfig ...... lo:0: flags=73mtu 65536 inet 192.168.4.15netmask 255.255.255.255 looptxqueuelen 1000(Local Loopback)

3)设置Web2服务器网络参数
[root@web2 ~]# nmcli connection modify eth0ipv4.method manual ipv4.addresses 192.168.4.200/24connection.autoconnect yes [root@web2 ~]# nmcli connection up eth0 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6) [root@web2 ~]# ifconfigeth0 eth0: flags=4163mtu 1500 inet 192.168.4.200netmask 255.255.255.0broadcast 192.168.4.255 ether 52:54:00:3e:8d:bftxqueuelen 1000(Ethernet) RX packets 10245bytes 533756 (521.2 KiB) RX errors 0dropped 10193overruns 0frame 0 TX packets 1bytes 42 (42.0 B) TX errors 0dropped 0 overruns 0carrier 0collisions 0

接下来给web2配置VIP地址
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。
[root@web2 ~]# cd/etc/sysconfig/network-scripts/ [root@web2 network-scripts]# vimifcfg-lo:0 1 DEVICE=lo:0#设备名称 2 IPADDR=192.168.4.15#IP地址 3 NETMASK=255.255.255.255#子网掩码 4 NETWORK=192.168.4.15#网络地址 5 BROADCAST=192.168.4.15#广播地址 6 ONBOOT=yes#开机时是否自动激活该网卡 7 NAME=lo:0#网卡名称

防止地址冲突的问题:
这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突;
sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。
[root@web2 ~]# vim /etc/sysctl.conf [root@web2 network-scripts]# vim/etc/sysctl.conf #手动写入如下4行内容 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 #arp_ignore 当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应 #arp_announce 本机不要向外宣告自己的lo回环地址是192.168.4.15 [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

重启网络服务,设置防火墙与SELinux
[root@web2 network-scripts]# systemctl restartnetwork [root@web2 network-scripts]# ifconfig .... lo:0: flags=73mtu 65536 inet 192.168.4.15netmask 255.255.255.255 looptxqueuelen 1000(Local Loopback)

步骤二: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 network-scripts]# ipvsadm-a-t192.168.4.15:80-r192.168.4.100:80 [root@proxy network-scripts]# ipvsadm-a-t192.168.4.15:80-r192.168.4.200:80

4)查看规则列表,并保存规则
[root@proxy network-scripts]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConn TCP192.168.4.15:80 wrr -> 192.168.4.100:80Route100 -> 192.168.4.200:80Route100

步骤三:客户端测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器。
扩展知识:默认LVS不带健康检查功能,需要自己手动编写动态检测脚本,实现该功能:(参考脚本如下,仅供参考)
[root@client ~]# curl 192.168.4.15 456456 [root@client ~]# curl 192.168.4.15 123123 [root@client ~]# curl 192.168.4.15 456456 [root@client ~]# curl 192.168.4.15 123123 [root@client ~]# curl 192.168.4.15 456456

脚本如下:
[root@proxy ~]# vimjiancha.sh #!/bin/bash vip=192.168.4.15:80 rip1=192.168.4.100 rip2=192.168.4.200 while : do forIPin $rip1$rip2 do curl-shttp://$IP &>/dev/null if [ $?-eq 0]; then ipvsadm-Ln|grep -q$IP|| ipvsadm-a-t$vip-r$vip else ipvsadm-Ln|grep -q$IP&&ipvsadm-d-t$vip -r $vip fi done sleep 1 done [root@proxy ~]# chmod +x check.sh ##usleep 沉睡(毫秒)

【集群|集群 存储 LVS的集群】

    推荐阅读