LVS详解:构建高性能Linux负载均衡集群
#作者:张桐瑞
文章目录
- 集群 Cluster
- 一、集群类型
- 1、负载均衡集群
- 2、高可用集群
- 3、高性能计算集群
- 二、LVS ------ Linux Virtual Service
- 1、调度算法 scheduler
- 2、LVS工作模式
- 3、NAT模式核心要素
- 4、NAT模式的工作原理
- 三、DR模式 ---- Direct Route 直接路由模式
- 1、核心要素
- 5、在调度器上配置VIP
- 6、创建虚拟服务
- 7、测试访问
- 四、持久性连接
集群 Cluster
一、集群类型
负载均衡集群 | Load Balance | LB |
---|---|---|
高可用集群 | High Avalibility | HA |
高性能计算集群 | High Performace Compute | HPC |
1、负载均衡集群
作用: 提高业务的并发能力
2、高可用集群
作用: 解决单点故障、提高可用性
可用性:
运行时间/(运行时间+故障修复时间)
3、高性能计算集群
作用: 提高数据的处理能力
二、LVS ------ Linux Virtual Service
lvs被集成在linux内核,速度快
ipvsadm管理工具
1、调度算法 scheduler
-
rr round robin 轮询
-
wrr 基于权重的轮询 weight
会话保持方案:
a. 会话共享存储
b. 换调度算法 -
lc least connection 最少连接
-
wlc 基于权重的最少连接 默认
-
sh source hash 源hash
根据客户端IP计算hash值,相同hash值的请求转发到同一个后端服务器
一定程度可以解决会话保持问题 -
dh destination hash 目的地址hash
根据目的IP地址计算hash值,后续所有请求定位同一个目的IP上
适用于后端是缓存服务器,提升缓存命中率
2、LVS工作模式
NAT模式
DR模式
TUN模式
3、NAT模式核心要素
请求、响应都要经过调度器转发
DIP、VIP要分属不同的网络
调度器开启路由转发功能
所有real server网关要指向DIP
# vim /etc/sysctl.conf net.ipv4.ip_forward = 1
4、NAT模式的工作原理
案例:基于NAT模式配置web集群
-
所有服务器关闭防火墙、SELinux、时间同步
-
在调度器上事先安装ipvsadm、所有real server事先安装httpd用于测试
# yum install -y ipvsadm# yum install -y httpd
- 在调度器上分别配置VIP、DIP
[root@lvs ~]# ip addr show
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:8f:c3:68 brd ff:ff:ff:ff:ff:ffinet 192.168.146.100/24 brd 192.168.146.255 scope global noprefixroute ens333: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:8f:c3:72 brd ff:ff:ff:ff:ff:ffinet 192.168.177.254/24 brd 192.168.177.255 scope global noprefixroute ens37
- 所有real server配置地址、网关指向DIP
[root@web01 ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.177.10 netmask 255.255.255.0 broadcast 192.168.177.255inet6 fe80::20c:29ff:fe14:788e prefixlen 64 scopeid 0x20<link>ether 00:0c:29:14:78:8e txqueuelen 1000 (Ethernet)RX packets 9863 bytes 13214062 (12.6 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 3421 bytes 213516 (208.5 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@web01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.177.254 0.0.0.0 UG 100 0 0 ens33
192.168.177.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
- 调度器开启路由转发
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
- 创建虚拟服务
[root@lvs ~]# ipvsadm -A -t 192.168.146.100:80 -s rr [root@lvs ~]# 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.146.100:80 rr
-A:添加一条新的虚拟服务器记录
-t:说明虚拟服务器提供的是TCP服务
-s:使用的调度算法
-m:指定LVS的工作模式为NAT模式
-g:指定LVS的工作模式为直接路由模式
-D:删除内核虚拟服务器表中的一条虚拟服务器记录
-d:删除一条虚拟服务器记录中的某条真实服务器记录
-a:在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录
-n:输出IP地址和端口的数字形式
-r:真实的服务器
-R:恢复虚拟服务器规则
-S:保存虚拟服务器规则
- 添加real server
[root@lvs ~]# ipvsadm -a -t 192.168.146.100:80 -r 192.168.177.10:80 -m //-m nat模式
[root@lvs ~]# ipvsadm -a -t 192.168.146.100:80 -r 192.168.177.20:80 -m
- 查看负载均衡表
[root@lvs ~]# 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.146.100:80 rr-> 192.168.177.10:80 Masq 1 0 0 -> 192.168.177.20:80 Masq 1 0 0
- 测试访问
http://192.168.146.100/
[root@lvs ~]# 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.146.100:80 rr-> 192.168.177.10:80 Masq 1 0 3 -> 192.168.177.20:80 Masq 1 0 3 [root@lvs ~]# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 01:14 TIME_WAIT 192.168.146.1:55276 192.168.146.100:80 192.168.177.20:80
TCP 00:30 TIME_WAIT 192.168.146.1:56266 192.168.146.100:80 192.168.177.20:80
TCP 00:55 TIME_WAIT 192.168.146.1:60898 192.168.146.100:80 192.168.177.10:80
TCP 01:01 TIME_WAIT 192.168.146.1:65024 192.168.146.100:80 192.168.177.10:80
TCP 01:52 TIME_WAIT 192.168.146.1:51311 192.168.146.100:80 192.168.177.20:80
- 保存、恢复规则
# ipvsadm -S > /opt/web_rule# ipvsadm -R < /opt/web_rule
三、DR模式 ---- Direct Route 直接路由模式
1、核心要素
请求经过调度器、响应由real server发送
real server的网关要指向真实网关,确保网络通畅
VIP、DIP要属于同一网络
在所有real server配置VIP
arp_ignore=1
只让主机回复关于物理网卡的ARP响应
arp_announce=2
让主机以适当的地址发送响应
real server的操作只能是类linux系统
案例:基于DR模式配置web集群
1、所有real server配置VIP(掩码必须32位 lo虚拟网卡)
[root@lvs ~]# ip addr add dev lo 192.168.140.100/32[root@lvs ~]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.140.100/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2、所有real server修改arp内核参数
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2[root@localhost ~]# sysctl -p
3、所有real server安装配置httpd
5、在调度器上配置VIP
[root@lvs ~]# ip addr add dev lo 192.168.140.100/32[root@lvs ~]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.140.100/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
6、创建虚拟服务
[root@lvs ~]# yum install -y ipvsadm.x86_64 [root@lvs ~]# ipvsadm -A -t 192.168.140.100:80 -s rr //调度算法rr[root@lvs ~]# ipvsadm -a -t 192.168.140.100:80 -r 192.168.140.11:80 -g //-g DR模式
[root@lvs ~]# ipvsadm -a -t 192.168.140.100:80 -r 192.168.140.12:80 -g[root@lvs ~]# 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.140.100:80 rr-> 192.168.140.11:80 Route 1 0 0 -> 192.168.140.12:80 Route 1 0 0
7、测试访问
[root@redis_server ~]# curl 192.168.140.100
<h1> web01</h1>
[root@redis_server ~]# curl 192.168.140.100
<h1> web02 </h1>[root@redis_server ~]# curl 192.168.140.100
<h1> web01</h1>
[root@redis_server ~]# curl 192.168.140.100
<h1> web02 </h1>
四、持久性连接
作用:
在指定的时间范围内, 同一个客户端的请求会被转发到同一个real server
会话持久
[root@lvs ~]# ipvsadm -E -t 192.168.140.100:80 -s rr -p 300[root@lvs ~]# 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.140.100:80 rr persistent 300-> 192.168.140.11:80 Route 1 0 0 -> 192.168.140.12:80 Route 1 0 0