通过LVS构建负载均衡Web集群

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

负载均衡集群(LBC Load Balance Cluster)

作用:可以减轻单台服务器压力

Load Balancing负载均衡,不同节点之间相互独立,不共享任何资源;通过一定算法将客户端的访问请求平分到群集的各个节点上,充分利用每个节点的资源。负载均衡扩展了网络设备和服务器带宽,增加吞吐量,加强网络数据处理能力。

负载均衡集群分类:

软件实现: LVS RAC MySQLProxy Nginx HaProxy

硬件实现: F5 citrix array 深信服 梭子鱼

负载均衡集群的区别:

1.触发条件不同

四层负载均衡:工作在传输层,转发数据依靠的是三层的IP地址 和 四层的端口(PORT).
七层负载均衡:工作在应用层,转发数据依靠URL或主机名.

2.实现原理不同

扫描二维码关注公众号,回复: 4042680 查看本文章

四层负载均衡:TCP连接建立一次,客户端和RS主机之间.
七层负载均衡:TCP连接建立两次,第一次是客户端和负载调度器,第二次是负载调度器和RS主机.

3.应用场景不同

四层负载均衡:TCP应用为主或者ERP软件
七层负载均衡:以HTTP协议为主,例如apache服务器

4.安全性不同

四层负载均衡:转发攻击
七层负载均衡:拦截攻击

IPVS:钩子函数,内核机制,在请求没有到达目的地址之前,捕获并取得优先控制权的函数.
IPVSADM:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真实的服务器.

负载调度算法分类:

轮询方式 解释
rr(轮循) 从1开始到n结束
wrr(加权轮循) 按权重比例进行调度,权重越大,负责的请求越多.
sh(源地址hash) 实现会话绑定,保留之前建立的会话信息.将来自于同一个ip地址的请求发送给一个真实服务器.
dh(目标地址hash) 将同一个目标地址的请求,发送给同一个服务器节点.提高缓存命中率.
LC(最少连接) 将新的连接请求分配给当前连接数最少的服务器.公式:活动连接*256+非活动连接.
WLC(加权最少连接) 最少连接的特殊模式.公式:(活动连接*256+非活动连接)/权重
SED(最短期望延迟) 加权最少连接的特殊模式.公式:(活动连接 +1)*256/权重
NQ(永不排队) sed的特殊模式,当某台真实服务器连接为0时,直接分配不计算.
LBLC(基于局部性的最少连接) dh的特殊模式既要提高缓存命中率又要考虑连接数量.先根据请求的目标IP地址寻找最近的该目标IP地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器.
LBLCR(带复制的基于局部性的最少连接) LBLCR=LBLC+缓存共享机制
动态算法 既要考虑算法本身,也要考虑服务器状态(原理:通过hash表记录连接状态active/inactive)
静态算法 只考虑算法本身,不考虑服务器状态.

◆LVS-NAT 地址转换模式◆

NAT 模式简介


原理图解:

a).客户端将请求交给负载调度器,客户端发出数据包,此时这个数据包的源ip为CIP,目标ip为VIP (集群ip).
b).数据包到达负载调度器后,修改数据包的目标ip地址为真实服务器的ip,此时数据包的源ip为CIP,目标ip为RIP.
c).将数据包发送给RS,之后RS响应将数据包发回给负载调度器,此时数据包的源ip为RIP,目标ip为CIP.
d).负载调度器再转发时,会将源ip地址改为自己的VIP地址,然后再发给客户端,此时数据包的源ip为VIP,目标ip为CIP.

NAT 模式特点:

1.负载调度器和真实服务器,必须位于同一网络.
2.真实服务器的网关必须指向DIP.
3.负载调度器必须位于客户端和真实服务器之间.
4.RIP通常都是私有地址,仅用于各个集群节点通信.
5.支持端口映射,可映射为任意地址.
6.真实服务器可以使用任意操作系统,负载调度器必须是LINUX系统.
7.所有数据报文都要经过负载调度器、压力过大、最多10台RS.

实验环境IP分配:

[实验环境]

[类型]            [网卡]            [IP地址]      [接入模式]

LVS-NAT         eno16777728     192.168.1.12        桥接
            eno33554960     192.168.20.14       NAT

Read-Ser1       eno16777728     192.168.20.15       NAT
Read-Ser2       eno16777728     192.168.20.16       NAT

配置负载调度器

1.安装ipvsadm,此工具是LVS的应用层工具,用来控制内核

yum install -y ipvsadm

2.开启IP转发,此处有两种方式,一种临时开启,一种则是永久开启

[临时开启]

echo "1" > /proc/sys/net/ipv4/ip_forward

[永久开启]
---------------------------------------------------------------------------------
vim /etc/sysctl.conf

net.ipv4.ip_forward=1

sysctl –p
---------------------------------------------------------------------------------

3.配置LVS-NAT调度器

ipvsadm -A -t 192.168.1.12:80 -s rr             #指定网卡1地址

---------------------------------------------------------------------------------
[参数说明]
        -A      添加规则
        -t      TCP 指定分发器VIP
        -s      指定调度算法
        rr      代表轮询round-robin
---------------------------------------------------------------------------------

ipvsadm -a -t 192.168.1.12:80 -r 192.168.20.15 -m
ipvsadm -a -t 192.168.1.12:80 -r 192.168.20.16 -m

---------------------------------------------------------------------------------
[参数说明]
        -a      添加real-server地址
        -r      指定real-server地址
        -m      表示masquerade NAT方式的LVS
---------------------------------------------------------------------------------

4.查看并保存结果

[root@localhost ~]# ipvsadm -L -n                       #查看规则

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.12:80 rr
  -> 192.168.20.15:80             Masq    1      0          0         
  -> 192.168.20.16:80             Masq    1      0          0         


/sbin/ipvsadm-save                              #保存规则

4.配置防火墙SNAT

iptables -t nat -A POSTROUTING \                    #指定NAT表的POSTROUTING
-s 192.168.1.0/24 \                         #指定内网的网段
-o eno16777728 \                            #指定外网口网卡名称
-j SNAT \                               #指定为SNAT
--to-source 59.110.167.239                      #指定外网卡的地址


iptables -t nat -L                          #查看添加的规则

配置RealServer节点

提示:RelServer客户端每个节点都应该配置,每个节点都要执行以下操作

1.安装测试Apache

yum install -y httpd

echo "web 1" > /var/www/html/index.html

systemctl restart httpd

2.RelServer节点指定网关

route add default gw 192.168.20.14              #指向主调度器的eth1网口


◆LVS-DR 路由模式◆

DR路由 模式简介


原理图解:

a)客户端发出数据包,源ip是CIP,目标ip是VIP.
b)依靠路由把数据发送给负载调度器,负载调度器将数据包的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改为RIP的MAC地址,此时源ip和目标ip均未修改.
c)由于DS和RS在同一网络中,所以通过二层来传输,通过路由再将数据包发到RS.
d)RS接收数据包,之后通过lo接口传送给eth0向外发出,此时的源ip是VIP,目标ip为CIP.
e)最后通过路由的方式发给客户端.

NAT 模式特点:

1.负载路由器和真实服务器,必须位于同一网络.
2.真实服务器的网关必须指向路由器.
3.负载调度只处理入站请求.
4.RIP可以是私有地址,也可以是公网地址.
5.真实服务器可以使用任意操作系统,负载调度器必须是LINUX系统.
6.负载调度器压力较小,支持100台左右的RS.

实验环境IP分配:

[实验环境]

[类型]        [网卡]        [IP地址]  [VIP/IO]        [接入模式]

LVS-DR      eno16777728 192.168.1.12    192.168.1.20(VIP)   桥接

Read-Ser1   eno16777728 192.168.1.13    192.168.1.20(IO)    桥接
Read-Ser2   eno16777728 192.168.1.14    192.168.1.20(IO)    桥接

#提示: 如果是在真实环境中 RealServer 应把网关指向路由器eth1口

配置负载调度器

1.安装ipvsadm

yum install -y ipvsadm

2.修改内核参数,防止相同网络地址广播冲突

---------------------------------------------------------------------------------
vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eno16777728.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
---------------------------------------------------------------------------------
sysctl -p                           #刷新内核参数(使其生效)

modprobe ip_vs                      #查看内核是否加载,无提示则加载成功

3.配置临时网卡并添加轮询规则

ifconfig eno16777728:0 192.168.1.20 netmask 255.255.255.0   #在eth0上添加一个子接口,VIP的地址

route add -host 192.168.1.20 dev eno16777728            #在eth0上添加一条路由记录


ipvsadm -A -t 192.168.1.20:80 -s rr                 #添加虚拟服务指定VIP地址
---------------------------------------------------------------------------------
[参数说明]
    -A  添加规则
    -t  TCP 指定分发器VIP
    -s  指定调度算法
    rr  代表轮询round-robin
---------------------------------------------------------------------------------

ipvsadm -a -t 192.168.1.20:80 -r 192.168.1.13:80 -g     #针对虚拟服务添加RS节点
ipvsadm -a -t 192.168.1.20:80 -r 192.168.1.14:80 -g     #针对虚拟服务添加RS节点

---------------------------------------------------------------------------------
[参数说明]
    -a  添加real-server地址
    -r  指定real-server地址
    -m  以NAT模式分配
    -g  以DR模式分配
    -w  指定权值
---------------------------------------------------------------------------------

4.检查并保存规则

[root@localhost ~]# ipvsadm -L -n --stats           #查看VIP和RS是否已经配置成功
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.1.20:80                     0        0        0        0        0
  -> 192.168.1.13:80                     0        0        0        0        0
  -> 192.168.1.14:80                     0        0        0        0        0


/sbin/ipvsadm-save                      #保存规则

配置RealServer节点

提示:RelServer客户端每个节点都应该配置,每个节点都要执行以下操作

如果是图形界面,需要关闭图形管理工具 systemctl stop NetworkManager

1.首先关闭ARP宣告,和ARP转发,这里有两种方法,一个临时关闭,一个永久关闭

[临时关闭]
---------------------------------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore 
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_announce 
echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore
---------------------------------------------------------------------------------

[永久关闭]
---------------------------------------------------------------------------------
vim /etc/sysctl.conf

net.ipv4.conf.eno16777728.arp_ignore=1
net.ipv4.conf.eno16777728.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

sysctl -p
---------------------------------------------------------------------------------

2.添加本地回环口

ifconfig lo:0 192.168.1.20 netmask 255.255.255.255      #添加本地回环口,设置24位掩码

route add -host 192.168.1.20 dev lo         #添加路由记录


◆LVS-IP-TUN 隧道模式◆

LVS-IP-TUN 模式简介


原理图解:

a)客户端发送数据包到负载调度器,此时数据包的源ip为CIP,目标ip为VIP.
b)负载调度器会在数据包的外面再次封装一层ip数据包,封装源ip为DIP,目标ip为RIP.此时源ip为DIP,目标ip为RIP.
c)之后负载调度器将数据包发给RS(因为在外层封装多了一层ip首部,所以可以理解为此时通过隧道传输),此时源ip为DIP,目标ip为RIP.
d)RS接收到报文后发现是自己的IP地址,就将报文接收下来拆除掉最外层的IP后会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后通过lo接口送给eth0网卡,然后向外传递.此时的源IP地址为VIP,目标IP为CIP.
e)之后将数据包发给客户端.

IP-TUN隧道 模式特点:

1.所有真实服务器节点既要有RIP,又要有VIP,并且RIP、必须是公网ip.
2.负载调度器和真实服务器必须支持隧道功能.
3.负载调度器只处理入站请求.
4.真实服务器一定不能使用负载雕塑群做默认网关.
5.不支持端口映射.
6.可跨互联网搭建集群,对网络环境要求较高.

实验环境IP分配:

[实验环境]

[类型]        [网卡]        [IP地址]  [VIP/Tunl]      [接入模式]

LVS-IPTUN   eno16777728 200.168.10.1    200.168.10.10(VIP)  外网IP

Read-Ser1   eno16777728 200.168.10.2    200.168.10.10(Tunl) 外网IP
Read-Ser2   eno16777728 200.168.10.3    200.168.10.10(Tunl) 外网IP

配置负载调度器

1.LVS服务器配置虚拟IP

ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 up #虚拟一个隧道IP  4个255代表它自己一个网段

route add -host 200.168.10.10 dev tunl0         #把网段添加到路由表 防止走 200.168.10.0 网段

route -n                        #查看路由

2.设置LVS调度器

ipvsadm -C

ipvsadm -A -t 200.168.10.10:80 -s rr

ipvsadm -a -t 200.168.10.10:80 -r 200.168.10.2 -i

ipvsadm -a -t 200.168.10.10:80 -r 200.168.10.3 -i


ipvsadm -L -n --stat                                #查看规则

配置RealServer节点

提示:RelServer客户端每个节点都应该配置,每个节点都要执行以下操作

1.配置网卡子接口

ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 up

route add -host 200.168.10.10 dev tunl0

2.修改环境变量,写入配置文件开机自动加载

vim /etc/sysctl.conf

echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore        
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

3.访问集群IP,测试隧道效果

elinks http://200.168.10.10

猜你喜欢

转载自www.cnblogs.com/LyShark/p/9947955.html