Centos7 LVS集群
LVS集群
随着互联网的发展,Web应用已经是越来越广泛,大型网站(例如电子商务,企业/政府网站,医疗器械等)需要提供7*24小时的不间断服务,如果发生了硬件损坏或其软件损坏等突发故障,由此造成的经济损失等是不可挽回的。这一切,不仅对硬件,也对软件平台提出了更高的要求:
可扩展性:良好可扩展性的计算机系统能够使得性能随着成本的增加而线性的增加,并且很容易对其进行精简或扩充
全天候的可用性支持:严格的商业环境需要软硬件系统提供透明的、自动适应的可用性支持,保证7×24小时正常运行
可管理性:系统可以很庞大,但是要能够易于管理
相对的成本/性能优势:构造这样的系统,再投入成本上是经济的,容易根据具体的需求定制合适价位的目标系统
随着网站与用户的交互性,用户量的日益增长,需要更强的CPU与更强的I/O处理能力,在大数据领域,需要在大量的数据中挖掘出有价值的信息,时间是一个非常重要的参考指标。集群技术解决了这两个问题:高可用集群&高性能集群
高可用性集群可以提供负载均衡,通过把任务轮流分给多台服务器,以避免某台服务器负载过高,负载均衡是一种动态均衡
集群系统通过一组服务器实现服务的可伸缩性,当服务请求急剧增长时,服务依然可用,相应依然迅速,集群允许部分硬件或软件发生故障,通过集群管理软件可以将故障屏蔽从而提供24小时不间断服务,相对于高端服务器的高昂成本,使用普通的设备组成集群所花费的经济成本相对可以接受
LVS是Linux Virtual Server的简写,含义为Linux虚拟服务器,是一个虚拟的服务器集群系统,早在1998年5月便由章文嵩博士成立,也是中国国内最早出现的自由软件项目之一
LVS的宗旨:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器(高可伸缩性、高可靠性、高可管理性)
LVS优点:1(开源,免费) 2(在网络上可以获取相关技术资源) 3(具有软件负载均衡的一些优点)
LVS缺点:1(没有可靠的支持服务) 2(功能简单,如算法较少) 3(开启隧道方式需重编译内核)
4(配置复杂) 5(主要用于Linux,目前米有专门用于Windows的版本)
LVS为Linux虚拟服务器,针对高可伸缩、高可用网络的服务网络的需求,我国的章文嵩给出了基于IP层和基于内容请求分发的负载平衡调度解决方案,并在Linux内核实现,将一组服务器构成一个实现可伸缩的、高可用网络的虚拟服务器,虚拟服务器的体系结构为下图:
一组服务器通过高速的局域网或地理分布的广域网相互连接,前端有一个负载均衡器(Load Balancer,简称LD)。负载均衡器负责将网络请求调度到这是服务器上,真实的服务器称作real server(简称RL),从而使得服务器集群的结构对用户应用来说是透明的。应用访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。集群的扩展性可以通过在服务集群中动态地加入和删除服务器节点完成。通过定期检测节点或服务进程状态可以动态的剔除故障的节点,从而使系统达到高可用
Virtual Server via Network Address Translatio(VS/NAT)
此种技术中前段负载均衡器通过重写请求报文的目的地址实现网络地址转换,根据设定的负载均衡算法将请求分配给后端真实服务器,真实服务器的响应报文通过负载均衡器时,报文的源地址会被重写,然后返回给客户端,从而完成整个负载调度过程。由于NAT的每次请求接收和返回都要经过负载均衡器,对前端负载局均衡器性能要求很高,如业务请求量大,负载均衡器可能成为瓶颈,NAT模式体系结构如下图:
☆附注1:可以从图中看到,客户端的请求数据包发送给服务器之前,会进行一次三层目标地址重写,同样,在发送给客户端应答数据包时,也会对三层进行一次源地址重写,每个数据包都是如此,由此可见,当请求量瞬间增大或增大时,该设备会成为瓶颈
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求与回应报文都必须经过负载均衡器地址重写,所以当客户请求越来越多时,负载均衡器的处理能力可能成为瓶颈,为了解决这个问题,负载均衡器将请求报文通过IP隧道直接转发给真实服务器,而真实服务器也会直接将响应报文返回给客户,此种技术负载均衡器只处理请求报文,由于结果不需要经过负载均衡器,采用此种技术的集群吞吐能力更加强大,同时TUN模式也支持跨网段,跨地域部署,使用非常灵活
LVS的VS/tun模式主要使用在异地容灾场景,也就是说有多台真实服务器节点处的地理位置不同。这时要使用LVS做负载均衡就必须使用VS/TUN模式了,因为VS/DR下要求负载均衡器与真实服务器的IP在同一网段,所以在跨地域的情况下实施非常困难;而VS/NAT模式下要求负载均衡器和真实服务器的IP在私网环境下,也无法跨越地理位置
Virtual Server via Direct Routing(VS/DR)
VS/DR模式通过改写请求报文的MAC地址,将请求发送到真实服务器,类似TUN模式,DR模式下真实服务器将响应直接返回给客户端,因此VS/DR技术可极大地提高集群系统的伸缩性,这种方法没有IP隧道的开销,真实服务器也没有必须支持IP隧道协议的要求,但是此种模式要求负载均衡器与真实服务器都在同意物理网段上(一个广播域),由于同一网段机器数量有限,从而限制了其应用范围
轮询算法
轮询算法(Round Robin)简称RR,负载均衡器通过轮询调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,每台后端的服务器都是平等无差别的,此种算法忽略了真实服务器的负载情况,需结合其他监控手段一起使用
加权轮询算法
加权轮询算法(Weighted Round Robin)简称WRR,负载均衡器通过加权轮询调度算法根据真实服务器的不同处理能力来调度访问请求,从而让处理能力更强的服务器处理更多请求。负载均衡器可以自动问询真实服务器的负载情况, 并动态地调整权值,相比轮询模式,有更大的灵活性
最少链接算法
最少链接算法(Least Connections)简称LC,负载均衡器通过最少链接调度算法动态地将网络请求调度到已建立的链接最少的服务器上,如果集群系统的真实服务器具有相近的系统性能,采用该算法会得到很好的负载均衡
加权最少链接算法
加权最少链接算法(Weighted Least Connections)简称WLC,在集群系统中的服务器性能差异较大的情况下,负载句衡器采用加权最少链接调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动链接负载
基于局部性的最少链接算法
基于局部性的最少链接算法(Locality-Based Least Connections)简称LBLC,基于局部性的最少连接调度算法是针对目标IP负载均衡,该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,如该服务器是可用的且没有超载,那么将请求发送到服务器,若服务器不存在或服务器超载,则用最少链接原则选出一个可用的服务器,将请求发送到该服务器
带复制的基于局部性最少链接算法
带复制的基于局部性最少链接算法(Locality-Based Least Connections with Replication)简称LBLCR,带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,与LBLC不同之处是维护从一个IP地址到一组服务器的映射,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按最小链接原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到服务器,若服务器超载;则按最小链接原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器
目标地址散列算法
缪报地址散列算法(Destination Hashing)简称DH,此调度算法将请求的目标IP地址作为散列键,从静态分配的散列表找出对应的真实服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
源地址散列算法
源地址散列算法(Source Hashing)简称SH,源地址散列调度算法将请求的源IP地址作为散列键从静态分配的散列表中找出对应的这是服务器,若该服务器存在且未超载,将请求发送到该服务器,否则返回空
LVS集群采用IP负载均衡技术和基于内容请求分发技术,负载均衡器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且负载均衡器可以自动屏蔽服务器的故障,从而将一组服务器构成一个高性能、高可用、高伸缩性的虚拟服务器。整个服务器集群的结构对客户是透明的,也就是说无需修改客户端和服务端的程序,为此,在设计时需要考虑系统的透明性,可伸缩性,高可用性和易管理性,一般来说,LVS采用三层结构:
第一层为负载均衡器,这是整个集群的入口,从客户端的角度看,集群通过这层的服务体现为,一个基于IP地址的单一系统映像(SSI),整个集群共用这个虚拟地址,通过它客户端可以把整个集群看做一个独立的具有合法IP的主机系统,客户端所有访问都会发往这个虚拟IP地址。在图中可以看到,如果仅有一台负载均衡器,容易使负载均衡器成为集群的单点失效,使其成为集群中最脆弱的环节。因此,有必要提供容错机制,能够在负载均衡器失效时进行自动监测并平滑替换,也就是常说的HA技术,在上图结构中,有一个以备份均衡身份运行的节点实时地监控负载均衡器的运行状态,并根据检测到的状态做出响应:报警、接管、恢复
第二层为提供实际服务的服务器群,客户端发出的服务请求经过均衡器处理后,转交到服务器池由具体的服务器响应请求并返回数据,通常我们会在服务池上提供Web服务,FTP服务或视频点播服务等,由于单一系统无法应付高峰值的数据访问,那么通过多台服务器分担这些负载就可行了
第三层为存储服务系统,为整个集群内部运行提供稳定、一致的文件存取服务,这一层作为LVS集群的扩展,可以为集群节点池提供单一的文件系统入口,即在每一台服务节点上都共用同一个根(/),并且自动完成不同节点访问文件系统所引发的文件锁定、负载均衡、荣作、内容一致、读写事务等底层功能,对应用层提供一个透明的文件访问服务
☆总结:第一层:负载均衡器,是整个集群最外面的前端机,负责将客户的请求发送到后端真实服务器上执行
第二层:真实服务器池,是一组真正执行客户请求的服务器,负责处理用户请求并返回结果
第三层:共享存储,是可选组成部分,主要提供一个共享存储区,从而使得服务器池拥有相同的内容
在开始配置之前,说明配置顺序思路:
Centos7-1完成网络配置
STEP1:物理网卡ens33配置
[root@Centos7-1 /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 (已经通过vim修改过配置文件中的参数)
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0
STEP2:创建子网卡,绑定虚拟IP地址
[root@Centos7-1 /]# cd /etc/sysconfig/network-scripts/
[root@Centos7-1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@Centos7-1 network-scripts]# cat ifcfg-ens33:0 (已经通过vim修改过配置文件中的参数)
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.150
NETMASK=255.255.255.255
[root@Centos7-1 network-scripts]# systemctl restart network ##千万不要忘记重启网卡
STEP3:使用ifconfig命令查看网络参数(Centos7默认不安装,yum install -y net-tools安装该工具包即可)
[root@Centos7-1 network-scripts]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe0c:3a7e prefixlen 64 scopeid 0x20
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
RX packets 15 bytes 900 (900.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 172 bytes 22402 (21.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163
mtu 1500
inet 192.168.10.150 netmask 255.255.255.255 broadcast 192.168.10.150
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
Centos7-2完成网络配置
STEP1:配置物理网卡的IP地址
[root@Centos7-2 ~]# cd /etc/sysconfig/network-scripts/
[root@Centos7-2 network-scripts]# cat ifcfg-ens33 (已经通过vim修改过配置文件中的参数)
TYPE=EthernetBOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.2
NETMASK=255.255.255.0
STEP2:配置将创建本地环回接口,然后将虚拟IP地址与该网卡绑定
[root@Centos7-2 ~]# cd /etc/sysconfig/network-scripts/
[root@Centos7-2 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@Centos7-2 network-scripts]# cat ifcfg-lo:0 (已经通过vim修改过配置文件中的参数)DEVICE=lo:0
IPADDR=192.168.10.150
NETMASK=255.255.255.255
ONBOOT=yes
NAME=lo:0
[root@Centos7-2 /]# systemctl restart network ##千万不要忘记重启网卡
STEP3:使用ifconfig命令查看网卡信息
[root@Centos7-2 /]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.2 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:febe:42b5 prefixlen 64 scopeid 0x20
ether 00:0c:29:be:42:b5 txqueuelen 1000 (Ethernet)
RX packets 61 bytes 12966 (12.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 57 bytes 4330 (4.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo:0: flags=73
mtu 65536
inet 192.168.10.150 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
Centos7-3完成网络配置
STEP1:配置物理网卡的IP地址
[root@Centos7-3 /]# cd /etc/sysconfig/network-scripts/
[root@Centos7-3 network-scripts]# cat ifcfg-ens33 (已经通过vim修改过配置文件中的参数)
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.3
NETMASK=255.255.255.0
STEP2:配置将创建本地环回接口,然后将虚拟IP地址与该网卡绑定
[root@Centos7-3 /]# cd /etc/sysconfig/network-scripts/
[root@Centos7-3 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@Centos7-3 network-scripts]# cat ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.150
NETMASK=255.255.255.255
ONBOOT=yes
NAME=lo:0
[root@Centos7-3 network-scripts]# systemctl restart network ##千万不要忘记重启网卡
STEP3:使用ifconfig命令查看网卡信息
[root@Centos7-3 network-scripts]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.3 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:feb2:1143 prefixlen 64 scopeid 0x20
ether 00:0c:29:b2:11:43 txqueuelen 1000 (Ethernet)
RX packets 24 bytes 1440 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35 bytes 2658 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo:0: flags=73
mtu 65536
inet 192.168.10.150 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
Centos7-2修改系统网络参数
[root@Centos7-2 /]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
##arp_ignore为1时:只响应目的IP地址为接受网卡上的本地地址的ARP请求
[root@Centos7-2 /]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
##arp_announce为2时:只向该网卡回应与该网段匹配的ARP报文
Centos7-3修改系统网络参数
[root@Centos7-2 /]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
##arp_ignore为1时:只响应目的IP地址为接受网卡上的本地地址的ARP请求
[root@Centos7-2 /]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
##arp_announce为2时:只向该网卡回应与该网段匹配的ARP报文
负载均衡器安装并配置ipvsadm
[root@Centos7-1 /]# yum install -y ipvsadm
[root@Centos7-1 /]# ipvsadm --save > /etc/sysconfig/ipvsadm ##将所有结果保存至这个文件
[root@Centos7-1 /]# systemctl start ipvsadm
[root@Centos7-1 /]# ipvsadm -A -t 192.168.10.150:80 -s rr
[root@Centos7-1 /]# ipvsadm -a -t 192.168.10.150:80 -r 192.168.10.2 -g -w 1
[root@Centos7-1 /]# ipvsadm -a -t 192.168.10.150:80 -r 192.168.10.3 -g -w 1
##ipvsadm命令的详细参数我会在本文的最后面列出来
##上框中红字命令非常重要,如果你不做或忘做,那么当你启动时会出现下框中报错(会发现框中红字说:没有找到这个文件)
[root@Centos7-2 /]# systemctl start ipvsadm
Job for ipvsadm.service failed because the control process exited with error code. See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
[root@Centos7-2 /]# systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2019-10-21 02:55:28 EDT; 5s ago
Process: 20233 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)
Main PID: 20233 (code=exited, status=1/FAILURE)Oct 21 02:55:28 Centos7-2 systemd[1]: Starting Initialise the Linux Virtual Server...
Oct 21 02:55:28 Centos7-2 bash[20233]: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory
Oct 21 02:55:28 Centos7-2 systemd[1]: ipvsadm.service: main process exited, code=exited, status=1/FAILURE
Oct 21 02:55:28 Centos7-2 systemd[1]: Failed to start Initialise the Linux Virtual Server.
Oct 21 02:55:28 Centos7-2 systemd[1]: Unit ipvsadm.service entered failed state.
Oct 21 02:55:28 Centos7-2 systemd[1]: ipvsadm.service failed.
Centos7-2配置安装apache并配置主页
[root@Centos7-2 /]# yum install -y httpd
[root@Centos7-2 /]# echo "This is 192.168.10.2" > /var/www/html/index.html
[root@Centos7-2 /]# systemctl restart httpd
Centos7-3配置安装apache并配置主页
[root@Centos7-3 /]]# yum install -y httpd
[root@Centos7-3 /]]# echo "This is 192.168.10.3" > /var/www/html/index.html
[root@Centos7-3 /]]# systemctl restart httpd
Centos7-1关闭防火墙与SELinux
[root@Centos7-1 ~]# systemctl stop firewalld
Centos7-2关闭防火墙与SELinux
[root@Centos7-2 ~]# systemctl stop firewalld
Centos7-3关闭防火墙与SELinux
[root@Centos7-3 ~]# systemctl stop firewalld
★附注:如果你出现如下报错,那就说明你没关服务器端防火墙
[root@localhost ~]# curl 192.168.10.150
curl: (7) Failed connect to 192.168.10.150:80; No route to host
测试机访问http://192.168.10.150测试页面
[root@localhost ~]# curl 192.168.10.150
This is 192.168.10.3
[root@localhost ~]# curl 192.168.10.150
This is 192.168.10.2
☆VS/DR模式配置到此为止
在开始配置之前,说明配置顺序思路:
Centos7-1完成网络配置
STEP1:配置外网卡参数(ens38)
[root@Centos7-1 ~]# cd /etc/sysconfig/network-scripts/
[root@Centos7-1 network-scripts]# cp ifcfg-ens33 ifcfg-ens38
[root@Centos7-1 network-scripts]# cat ifcfg-ens38 (已经通过vim修改过配置文件中的参数)
TYPE=Ethernet
BOOTPROTO=static
NAME=ens38
DEVICE=ens38
ONBOOT=yes
IPADDR=10.10.10.254
NETMASK=255.255.255.0
STEP2:配置内网卡参数(ens33)
[root@Centos7-1 network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.254
NETMASK=255.255.255.0
[root@Centos7-1 network-scripts]#systemctl restart network ##重启服务
STEP3:使用ifcofnig查看网卡状态
[root@Centos7-1 /]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.254 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe0c:3a7e prefixlen 64 scopeid 0x20
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
RX packets 49 bytes 4752 (4.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 155 bytes 21206 (20.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens38: flags=4163
mtu 1500
inet 10.10.10.254 netmask 255.255.255.0 broadcast 10.10.10.255
inet6 fe80::20c:29ff:fe0c:3a92 prefixlen 64 scopeid 0x20
ether 00:0c:29:0c:3a:92 txqueuelen 1000 (Ethernet)
RX packets 27 bytes 1620 (1.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48 bytes 5388 (5.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Centos7-2完成网络配置
STEP1:配置网卡参数(ens33)
[root@Centos7-2 /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.94.22
NETMASK=255.255.255.0
GATEWAY=192.168.94.11
[root@Centos7-2 /]# systemctl restart network ##重启服务
STEP2:使用ifconfig查看网卡当前状态
[root@Centos7-2 /]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:febe:42b5 prefixlen 64 scopeid 0x20
ether 00:0c:29:be:42:b5 txqueuelen 1000 (Ethernet)
RX packets 168 bytes 25281 (24.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 152 bytes 11992 (11.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Centos7-3完成网络配置
STEP1:修改网卡配置(ens33)
[root@Centos7-3 /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.2
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
[root@Centos7-3 /]# systemctl restart network ##重启服务
STEP2:使用ifconfig查看当前网卡状态
[root@Centos7-3 /]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.2 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:feb2:1143 prefixlen 64 scopeid 0x20
ether 00:0c:29:b2:11:43 txqueuelen 1000 (Ethernet)
RX packets 138 bytes 13146 (12.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 81 bytes 7028 (6.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
修改负载均衡器系统网络参数
[root@Centos7-1 /]# echo 1 > /proc/sys/net/ipv4/ip_forward ##开启路由转发功能
[root@Centos7-1 /]# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
[root@Centos7-1 /]# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
[root@Centos7-1 /]# echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects ##关闭icmp重定向
[root@Centos7-1 /]# echo 0 > /proc/sys/net/ipv4/conf/ens38/send_redirects
##这里要注意网卡名,如果你的网卡名称不一样的话,请注意不要写错
完成负载均衡器NAT配置
[root@Centos7-1 /]# iptables -t nat -F
[root@Centos7-1 /]# iptables -t nat -X
[root@Centos7-1 /]# iptables -t nat -A POSTROUTING -s 192.168.94.0/24 -j MASQUERADE
负载均衡器安装并配置ipvsadm
[root@Centos7-1 /]# yum install ipvsadm -y
[root@Centos7-1 /]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@Centos7-1 /]# systemctl start ipvsadm
[root@Centos7-1 /]# ipvsadm -A -t 10.10.10.254:80 -s rr
[root@Centos7-1 /]# ipvsadm -a -t 10.10.10.254:80 -r 192.168.10.1:80 -m -w 1
[root@Centos7-1 /]# ipvsadm -a -t 10.10.10.254:80 -r 192.168.10.2:80 -m -w 1
##安装ipvsadm后,一定要先打ipvsadm --save > /etc/sysconfig/ipvsadm,因为当该文件不存在时,该服务是无法通过systemctl start ipvsadm来启动的(会报错“找不到该文件”),所以安装完后要自行创建该文件再启动ipvsadm并完成后续配置
Centos7-2安装httpd,配置并启动
[root@Centos7-2 /]# yum install httpd -y
[root@Centos7-2 /]# echo "This is 192.168.10.1" > /var/www/html/index.html
[root@Centos7-2 /]# systemctl restart httpd
Centos7-3安装httpd,配置并启动
[root@Centos7-3 /]# yum install httpd -y
[root@Centos7-3 /]# echo "This is 192.168.10.2" > /var/www/html/index.html
[root@Centos7-3 /]# systemctl restart httpd
关闭Centos7-1的防火墙
[root@Centos7-3 /]# systemctl stop firewalld
关闭Centos7-2的防火墙
[root@Centos7-3 /]# systemctl stop firewalld
关闭Centos7-3的防火墙
[root@Centos7-3 /]# systemctl stop firewalld
使用客户机测试LVS效果
[root@localhost ~]# curl 10.10.10.254
This is 192.168.10.2
[root@localhost ~]# curl 10.10.10.254
This is 192.168.10.1
☆VS/NAT配置到此为止
在配置之前,先来说一下配置顺序:
Centos7-1网卡配置
STEP1:配置ens33网卡
[root@localhost /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0
STEP2:配置ens33:0网卡
[root@localhost /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33:0
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.255
STEP3:设置静态路由
[root@localhost /]# route add -host 192.168.1.100 dev ens33:0
STEP4:使用ifconfig查看当前网卡配置
[root@localhost /]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe0c:3a7e prefixlen 64 scopeid 0x20
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
RX packets 61 bytes 4544 (4.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 230 bytes 27446 (26.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:0: flags=4163
mtu 1500
inet 192.168.10.100 netmask 255.255.255.255 broadcast 192.168.10.100
ether 00:0c:29:0c:3a:7e txqueuelen 1000 (Ethernet)
Centos7-2网卡配置
STEP1:配置ens33网卡
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.2
NETMASK=255.255.255.0
STEP2:配置tunl0网卡
[root@localhost ~]# modprobe ipip
[root@localhost ~]# ip link set up tunl0
[root@localhost ~]# ip addr add 192.168.10.100 dev tunl0
STEP3:添加静态路由
[root@localhost ~]# route add -host 192.168.10.100 dev tunl0
STEP4:使用ifconfig命令查看网卡当前状态
[root@localhost ~]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.2 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:febe:42b5 prefixlen 64 scopeid 0x20
ether 00:0c:29:be:42:b5 txqueuelen 1000 (Ethernet)
RX packets 85 bytes 14818 (14.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 59 bytes 4745 (4.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0tunl0: flags=193
mtu 1480
inet 192.168.10.100 netmask 255.255.255.255
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 8 bytes 518 (518.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Centos7-3网卡配置
STEP1:网卡ens33配置
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.3
NETMASK=255.255.255.0
STEP2:配置tunl0网卡
[root@Centos7-3 ~]# modprobe ipip
[root@Centos7-3 ~]# ip link set up tunl0
[root@Centos7-3 ~]# ip addr add 192.168.10.100 dev tunl0
STEP3:添加静态路由
[root@Centos7-3 ~]# route add -host 192.168.10.100 dev tunl0
STEP4:使用ifconfig命令查看网卡当前状态
[root@Centos7-3 ~]# ifconfig
ens33: flags=4163
mtu 1500
inet 192.168.10.3 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:feb2:1143 prefixlen 64 scopeid 0x20
ether 00:0c:29:b2:11:43 txqueuelen 1000 (Ethernet)
RX packets 46 bytes 3206 (3.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38 bytes 3195 (3.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0tunl0: flags=193
mtu 1480
inet 192.168.10.100 netmask 255.255.255.255
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 8 bytes 518 (518.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Centos7-2修改系统网络参数
[root@Centos7-2 ~]# echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
[root@Centos7-2 ~]# echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
[root@Centos7-2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@Centos7-2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@Centos7-2 ~]# echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
[root@Centos7-2 ~]# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
Centos7-3修改系统网络参数
[root@Centos7-3 ~]# echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
[root@Centos7-3 ~]# echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
[root@Centos7-3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@Centos7-3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@Centos7-3 ~]# echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
[root@Centos7-3 ~]# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
负载均衡器安装并配置ipvsadm
[root@Centos7-1 ~]# yum install -y ipvsadm
[root@Centos7-1 ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@Centos7-1 ~]# systemctl start ipvsadm
[root@Centos7-1 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@Centos7-1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2:80 -i -w 1
[root@Centos7-1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3:80 -i -w 1
Centos7-2安装httpd并完成配置
[root@Centos7-2 ~]# yum install httpd -y
[root@Centos7-2 ~]# echo "This is 192.168.10.2" > /var/www/html/index.html
[root@Centos7-2 ~]# systemctl restart httpd
Centos7-3安装httpd并完成配置
[root@Centos7-3 ~]# yum install httpd -y
[root@Centos7-3 ~]# echo "This is 192.168.10.3" > /var/www/html/index.html
[root@Centos7-3 ~]# systemctl restart httpd
Centos7-1关闭防火墙
[root@Centos7-1 ~]# systemctl stop firewalld
Centos7-2关闭防火墙
[root@Centos7-2 ~]# systemctl stop firewalld
Centos7-3关闭防火墙
[root@Centos7-3 ~]# systemctl stop firewalld
使用测试机测试LVS访问
[root@localhost ~]# curl 10.10.10.254
This is 192.168.10.2
[root@localhost ~]# curl 10.10.10.254
This is 192.168.10.1
☆VS/TUN模式配置到此为止
参数 | 说明 |
-A | 在内核的虚拟服务器表中添加一条新的虚拟服务器记录 |
-E | 编辑内核虚拟服务器表中的一条虚拟服务器记录 |
-D | 删除内核虚拟服务器表中的一条虚拟服务器记录 |
-C | 清楚内核虚拟服务器表中的所有记录 |
-R | 恢复虚拟服务器规则 |
-S | 保存虚拟服务器规则,输出为-R选项可读的格式 |
-a | 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录 |
-e | 编辑一条虚拟服务器记录中的某条真实服务器记录 |
-d | 删除一条虚拟服务器记录中的某条真实服务器记录 |
-L | -l | 显示内核服务器列表 |
-Z | 虚拟服务表计数器清零(清空当前的连接数量等) |
-set | -tcp tcpfin udp设置连接超时值 |
--start-daemon | 启动同步守护进程 |
--stop-daemon | 停止同步守护进程 |
-h | 显示帮助信息 |
-t | 说明虚拟服务器提供的是TCP服务 |
-u | 说明扶你服务器提供的是UDP服务 |
-f | 说明是经过iptables标记过的服务类型 |
-s | 使用的调度算法 |
-p | 持久服务 |
-r | 真实服务器 |
-g | 指定LVS的工作模式为直接路由模式 |
-i | 指定LVS的工作模式为隧道模式 |
-m | 指定LVS的工作模式为NAT模式 |
-w | 真实服务器的权值 |
-c | 显示LVS目前的连接数 |
-timeout | 显示tcp tcpfin udp的超时值 |
--daemon | 显示同步守护进程状态 |
--stats | 显示统计信息 |
--rate | 显示速率信息 |
--sort | 对虚拟服务器和真实服务器排序输出 |
-n | 输出IP地址和端口的数字形式 |
ipvsadm-save | 将ipvsadm保存至某个文件(自行重定向) |
ipvsadm-restore | 从某个文件恢复ipvsadm配置(自行重定向) |