集群

什么是集群?

  • 一组通过网络互联的计算组,并以单一系统的模式加以管理
  • 讲很多服务器集中起来一起,提供同一种服务,在客户端看起来就像是只有一个服务器
  • 可以自爱付出较低成本的情况下获得在性能,可靠性,灵活性方面的相对较高的收益
  • 任务调度时集群系统中的核心技术

集群的目的

  • 提高性能

如计算密集型应用,如:天气预报,核试验模拟

  • 降低成本

相对百万美元的超级计算机,价格便宜

  • 提高可扩展性

只要增加集群节点即可

  • 增强可靠性

多个节点完成相同功能,避免单点失败

集群的分类

  • 高性能计算机集群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与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与路由器的区别

  • lvs除了能实现路由的功能,还能实现负载均衡,是一个动态的路由器
  • 路由器NAT地址转换只能实现把公网转换成私网,在把私网转换成公网,导致客户端访问的都是同一台服务器.

LVS的缺点

  • 功能少
  • 不支持正则
  • 不能做动态网站
  • 不能做动静分离
  • 不具备健康检查功能

LVS术语

  • Director  Server:调度服务器

将负载分发到Real  Server的服务器

  • Real       Server:真实服务器

真正提供应用的服务器

  • VIP   :虚拟IP地址

公布给用户访问的虚拟IP地址

  • RIP:真实IP地址

集群节点上使用的IP地址

  • DIP:调度器连接节点服务器的IP地址
  • CIP:客户端的IP地址

LVS工作模式

VS/NAT

  • 通过网络地址转换实现的虚拟服务器
  • 大并发访问时,调度器的性能成为瓶颈
  • 处理客户端数据请求流量不大,返回数据的流量大
  • 导致调度器处理数据流量的压力更大

NAT模式工作流程
NAT即网络地址转换,其作用是将源(客户端)的IP地址转发给后端服务器
后端服务器处理完数据后通过NAT地址回传给客户端

VS/TUN

  • 通过隧道方式实现虚拟服务器

TUN模式工作流程
这个模式是基于调度器与后端服务器是跨地区的情况
客户端访问LVS调度器,LVS通过vpn技术把用户的请求转发到后端服务器
再由服务器把处理数据的结果通过vpn回传给客户端
这样做的最大缺点就是: 跨地区会导致网络延迟很大访问效率速度更低

VS/DR

  • 直接使用路由技术实现虚拟服务器
  • 节点服务器需要配置VIP,注意MAC地址广播
  • 可以满足更大规模的集群

DR模式工作流程
由LVS调度转发客户端数据请求给后端服务器,由后端服务器处理
后端服务器处理完成后伪装成LVS调度器回传给客户端

LVS的负载均衡调度算法

  • LVS目前实现了10中调度算法
  • 常用的调度算法有四种
  1. 轮询(Round  Robin)简称RR
  2. 加权轮询(Weighted  Round  Robin)简称WRR
  3. 最少连接(Least  Connections)简称LC
  4. 加权最少连接(Weighted  Least  Connections)简称WLC

轮询:将客户端的请求平均分发到Real  Server,

加权轮询:根据Real Server权重值进行轮询

最少连接:选择连接最少数的服务器

加权最少连接:根据Real Server权重值,选择连接数最少的服务器

最小延迟:找网速更快的服务器

网卡的延迟与网卡的带宽,数据的流量有关

最少队列调度:当已经达到最大的并发量时,客户端访问则自动进行排队,哪个服务器的排队最少则自动将客户端放到该队列

源地址散列(Source Hashing):根据请求的目标地址IP,作为散列键(Hash  Key)从静态分配的散列表找出对应的服务器

其他调度算法:

基于局部性的最少连接

带复制的基于局部性最少连接

目标地址散列(Destination  Hashing)

最短的期望的延迟

最少队列调度

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所示。

使用命令增(add)、删(delete)、改(edit)、清除所有(clear)LVS集群规则

1)创建LVS虚拟集群服务器(算法为轮询:rr)

[root@proxy ~]# yum  -y  install  ipvsadm        #下载ipvsadm
[root@proxy ~]# ipvsadm  -A  -t   192.168.4.5:80  -s  rr    #新建虚拟集群
新建一个虚拟服务器,协议是tcp服务,算法为轮询算法
[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

2)为集群添加若干real server

[root@proxy ~]# ipvsadm  -a  -t  192.168.4.5:80  -r  192.168.2.100:80      #添加真实服务器,添加到192.168.4.5的虚拟机群,添加realserver
[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  -a  -t  192.168.4.5:80  -r  192.168.2.201:80  -w  2  #再添加一台权重为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       [root@proxy ~]# ipvsadm  -e  -t  192.168.4.5:80  -r  192.168.2.200:80  -w  3#修改realserver192.168.2.200的权重为3
[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   3      0          0         -> 192.168.2.201:80             Route   2      0          0   当算法为轮询时,不论权重多少都依然自动执行轮询算法

3)修改集群服务器设置(修改调度器算法,将轮询修改为加权轮询)

[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         

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  -t  192.168.4.5:80  -r  192.168.2.202:80  -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             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      [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

下面仅实验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 ) 为web1和web2配置服务器网关

[root@web1 ~]# nmcli connection modify eth1 ipv4.method  manual  ipv4.gateway  192.168.2.5
[root@web1 ~]# nmcli connection up  eth1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
####################################################################
也可以更改/etc/sysconfig/network配置文件
[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
[root@web2 ~]# nmcli connection modify eth1 ipv4.method  manual  ipv4.gateway  192.168.2.5
[root@web2 ~]# nmcli connection up  eth1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@web2 ~]# 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 ~]# vim /etc/httpd/conf/httpd.conf
95 ServerName www.example.com:80
[root@web1 ~]# echo  123123   >  /var/www/html/index.html
[root@web1 ~]# systemctl  restart  httpd
[root@web1 ~]# curl  http://192.168.2.100
123123
[root@web2 ~]# vim /etc/httpd/conf/httpd.conf
95 ServerName www.example.com:80
[root@web2 ~]# echo  456456  >  /var/www/html/index.html
[root@web2 ~]# systemctl  restart  httpd
[root@web2 ~]# curl  192.168.2.200
456456

常见问题:如果httpd服务启动启动的比较慢?
解决方法:可以修改/etc/httpd/conf/httpd.conf文件,
将ServerName www.example.com:80这行的#注释符删除即可。

3 ) 客户端访问测试

[root@proxy ~]# curl  192.168.2.100
123123
[root@proxy ~]# curl  192.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  -r  192.168.2.100:80  -m
[root@proxy ~]# ipvsadm -a  -t 192.168.4.5:80  -r  192.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: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

步骤三:客户端测试

客户端使用curl命令反复连接http://192.168.4.5,查看访问的页面是否会轮询到不同的后端真实服务器。

lvs集成在内核,只要Linux启动,lvs就自动集成[root@client ~]# curl  192.168.4.5
456456
[root@client ~]# curl  192.168.4.5
123123
[root@client ~]# curl  192.168.4.5
456456
[root@client ~]# curl  192.168.4.5
123123

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

说明:
CIP是客户端的IP地址;
VIP是对客户端提供服务的IP地址;
RIP是后端服务器的真实IP地址;
DIP是调度器与后端服务器通信的IP地址(VIP必须配置在虚拟接口)。

方案

使用4台虚拟机,1台作为客户端、1台作为Director调度器、2台作为Real Server,拓扑结构如图所示。实验拓扑结构主机配置细节如表所示。

步骤一:配置实验网络环境

1)设置Proxy服务器的VIP和DIP

注意:为了防止冲突,VIP必须要配置在网卡的虚拟接口!!!

[root@proxy ~]# cd /etc/sysconfig/network-scripts/
[root@proxy network-scripts]# ls
ifcfg-eth0   ifdown-eth     ifdown-sit       ifup-eth    ifup-ppp       init.ipv6-global
ifcfg-eth1   ifdown-ippp    ifdown-Team      ifup-ippp   ifup-routes    network-functions
ifcfg-eth2   ifdown-ipv6    ifdown-TeamPort  ifup-ipv6   ifup-sit       network-functions-ipv6
ifcfg-eth3   ifdown-isdn    ifdown-tunnel    ifup-isdn   ifup-Team
ifcfg-lo     ifdown-post    ifup             ifup-plip   ifup-TeamPort
ifdown       ifdown-ppp     ifup-aliases     ifup-plusb  ifup-tunnel
ifdown-bnep  ifdown-routes  ifup-bnep        ifup-post   ifup-wireless
[root@proxy network-scripts]# cp  ifcfg-eth0{,:0}
[root@proxy network-scripts]# vim  ifcfg-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]# systemctl  restart network            #重启
[root@proxy network-scripts]# ifconfig                              #此时多了一个eth0:0的网卡,其他主机也可以ping通该IP
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.5  netmask 255.255.255.0  broadcast 192.168.4.255ether 52:54:00:2f:40:71  txqueuelen 1000  (Ethernet)RX packets 11438  bytes 698521 (682.1 KiB)RX errors 0  dropped 8612  overruns 0  frame 0TX packets 1826  bytes 222235 (217.0 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.15  netmask 255.255.255.0  broadcast 192.168.4.255ether 52:54:00:2f:40:71  txqueuelen 1000  (Ethernet).......[root@proxy ~]# ip a s  eth0          #查看ip的另一种方法
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:2f:40:71 brd ff:ff:ff:ff:ff:ffinet 192.168.4.5/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.15/24 brd 192.168.4.255 scope global secondary noprefixroute eth0:0valid_lft forever preferred_lft forever

常见问题:RHEL7和Centos7系统中有两个管理网络的服务,有可能冲突?
解决方法:关闭NetworkManager服务后重启network即可。

[root@proxy network-scripts]# systemctl  stop 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]# cp  ifcfg-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]# systemctl  restart  network [root@web1 network-scripts]# ifconfig
......
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.4.15  netmask 255.255.255.255loop  txqueuelen 1000  (Local Loopback)

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
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
[root@web2 ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.200  netmask 255.255.255.0  broadcast 192.168.4.255ether 52:54:00:3e:8d:bf  txqueuelen 1000  (Ethernet)RX packets 10245  bytes 533756 (521.2 KiB)RX errors 0  dropped 10193  overruns 0  frame 0TX packets 1  bytes 42 (42.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

接下来给web2配置VIP地址
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。

[root@web2 ~]# cd  /etc/sysconfig/network-scripts/
[root@web2 network-scripts]# vim  ifcfg-lo:01 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 restart  network
[root@web2 network-scripts]# ifconfig
....
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.4.15  netmask 255.255.255.255loop  txqueuelen 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  -t  192.168.4.15:80   -r  192.168.4.100:80
[root@proxy network-scripts]# ipvsadm  -a  -t  192.168.4.15:80   -r  192.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: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,查看访问的页面是否会轮询到不同的后端真实服务器。
扩展知识:默认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 ~]# vim  jiancha.sh
#!/bin/bash
vip=192.168.4.15:80
rip1=192.168.4.100
rip2=192.168.4.200
while :
dofor  IP  in $rip1  $rip2docurl  -s  http://$IP &>  /dev/null
if [ $?  -eq 0  ];thenipvsadm  -Ln  |  grep -q  $IP  || ipvsadm  -a  -t  $vip  -r  $vipelseipvsadm  -Ln  |  grep -q  $IP  &&  ipvsadm  -d  -t  $vip -r $vipfi
donesleep 1
done
[root@proxy ~]# chmod +x check.sh
##usleep 沉睡(毫秒)

集群与存储 LVS的集群相关推荐

  1. 集群架构之LVS介绍

    LVS项目介绍 章文嵩 (wensong@linux-vs.org) 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目的产生背景和目标 ...

  2. Linux服务器集群系统(LVS)

    from:http://www.linuxvirtualserver.org/zh/lvs1.html#5 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目 ...

  3. 视频教程-Linux 云计算架构师视频课程(集群、存储、调优)-Linux

    Linux 云计算架构师视频课程(集群.存储.调优) 10年Linux使用及管理经验,7年IT在线教育培训经验.拥有RHCA高级架构师及Openstack证书.精通Linux.Python.思科.C+ ...

  4. LVS服务器集群系统结构

    一.引言 在过去的十几年中,Internet从几个研究机构相连为信息共享的网络发展成为拥有大量应用和服务的全球性网络, 它正成为人们生活中不可缺少的一部分. 虽然Internet发展速度很快,但建设和 ...

  5. Centos5.5下lvs+keepalived集群

    Centos5.5下lvs+keepalived集群<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office: ...

  6. Redis系列教程(二):详解Redis的存储类型、集群架构、以及应用场景

    高并发架构系列 高并发架构系列:数据库主从同步的3种一致性方案实现,及优劣比较 高并发架构系列:Spring Cloud的核心成员.以及架构实现详细介绍 高并发架构系列:服务注册与发现的实现原理.及实 ...

  7. electron 使用json作为本地存储_使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原...

    Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中 ...

  8. linux命令:linux集群系列之一---LVS类型解析

    集群系统的主要优点: 高可扩展性: 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点.可以有效防止单点失效. 高性能:负载平衡集群允许系统同时接入更多的用户. 高性价比:可以采用廉价的符合工 ...

  9. Kubernetes 搭建 ES 集群(存储使用 local pv)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

最新文章

  1. C++文件输入和输出
  2. 临时起异,要进入C++领域耍一个程序
  3. badboy 不支持html5,html5_iframe.htm
  4. 【云吞铺子之专家来了】CDN缓存解读和配置策略
  5. ML之4PolyR:利用四次多项式回归4PolyR模型+两种正则化(Lasso/Ridge)在披萨数据集上拟合(train)、价格回归预测(test)
  6. 3DSlicer14:Loadable Module
  7. 战神II导演 首席程序员访谈(转自www.npc6.com )
  8. 你可以保持沉默,但你所说的一切都将成为呈堂证供——浅谈Azure WORM保护
  9. 如何在 ASP.NET MVC 中集成 AngularJS
  10. sklearn PCA特征降维
  11. Oracle入门(十四)之PL/SQL
  12. 编译Java程序一共要安装什么_如何编译java程序
  13. STM32F407外部晶体改为25M后检测不到芯片的解决办法
  14. Oracle 或关闭中国研发中心(CDC):裁员 1600 人
  15. 【软件使用技巧】一(截图)
  16. Python爬虫实践(二) -- 爬虫进阶:爬取数据处理、数据库存储
  17. itextpdf html转pdf
  18. c语言csp字符串,骇人听闻的 CSP
  19. php 备份手机通讯录,怎么把手机上的号码复制到SIM卡上
  20. css3地球自转,CSS3 月亮围绕地球转动的3D动画

热门文章

  1. 用 LaTeX 排版编程技术书籍的一些个人经验
  2. Day 26: TogetherJS —— 让我们一起来编程!
  3. Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器
  4. 编程之美-最大公约数问题方法整理
  5. VMware安装MikroTik RouterOS chr
  6. 遍历Newtonsoft.Json.Linq.JObject
  7. Android我的便签-----SQLite的使用方法
  8. Linux_《Linux命令行与shell脚本编程大全》第二章学习总结
  9. 前言 致Java开发学习前的一段话
  10. 实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件