目录
LVS负载均衡集群+LVS-DR部署
LVS负载均衡集群
1. LVS组成
- 负载调度器(Load Balancer):负责接收客户端请求并决定将请求分发给哪个后端服务器处理。调度器可以根据不同的算法,如轮询、加权轮询、最少连接数等,进行请求分发,以实现负载均衡。
- 转发器(Forwarder):负责将客户端请求转发给后端服务器进行处理。转发器可以通过网络地址转换(NAT)或直接路由(DR)两种方式来转发请求。
- 后端服务器(Real Server):实际处理客户端请求的服务器。后端服务器可以是一台或多台物理服务器,也可以是一组虚拟机。调度器将客户端请求转发到后端服务器上,后端服务器处理请求并返回响应给客户端。
2. LVS集群类型中的术语
LVS (Linux Virtual Server) | Linux虚拟服务器 |
---|---|
VS(Virtual Server) | lvs服务器 |
RS(Real Server) | 后端真实的工作服务器 |
CIP(Client IP) | 客户端的IP地址 |
VIP(Virtual serve IP) | VS外网的IP,向外部直接面向用户请求,作为用户请求的目标的IP地址 |
DIP(Director IP) | VS内网的IP,用于和内部主机通讯的IP地址 |
RIP(Real server IP) | 后端服务器的IP地址 |
IPVS(IP Virtual Server) 一种用于构建高性能、高可用的集群服务的技术是Linux内核的一部分,通过在内核中实现负载均衡、虚拟服务器和会话保持等功能,为应用程序提供了可靠、可扩展的服务
特点:
一个ipvs主机可以同时定义多个cluster service
定义时指明lvs-type(lvs的模式)以及lvs scheduler(调度器)
一个cluster service上至少应该有2个real server
3. ipvsadm 工具
用户空间的命令行工具,负责为IPVS
内核框架编写规则,定义谁是集群服务,谁是后端真实的服务器(Real Server),用于管理集群服务
ipvsadm 工具选项说明:
选项 | 说明 |
---|---|
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、[默认]加权最少连接: wlc) |
-a | 添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定VIP地址及TCP端口 |
-r | 指定RIP地址及TCP端口 |
-m | 表示使用NAT群集模式 |
-g | 表示使用DR模式 |
-i | 表示使用TUN模式 |
-w | 设置权重(权重为0时表示暂停节点) |
-p 60 | 表示保持长连接60秒 |
-l | 列表查看 LVS虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln |
4. 三种负载调度工作模式
1. NAT模式
地址转换
● Network Address Translation,简称NAT模式
● 负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口,极高负载的场景中,负载调度器可能会成为系统性能瓶颈
● 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式(RIP,DIP必须同一IP网络)
● 用户->LVS(负载均衡调度器)->真实服务器->LVS(负载均衡调度器)->用户
2. TUN模式
IP隧道
● IP Tunnel,简称TUN模式
● 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器(RIP,DIP,VIP必须是公网地址)
● 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
● 用户->LVS(负载均衡调度器)->真实服务器->用户
3. DR模式
直接路由
● Direct Routing,简称DR模式
● 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
(RS跟Director必须在同一物理网络中,中间不能有路由器相隔)
● 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
● VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。
● 用户->LVS(负载均衡调度器)->真实服务器->用户(LVS和负载均衡在同一内网)
LVS-DR部署
1.环境说明
客户端 | DR 服务器 | RS1 服务器 | RS2 服务器 | |
---|---|---|---|---|
CIP | 192.168.1.138 | |||
DIP | 192.168.226.134 | |||
RIP | 192.168.226.128 | 192.168.226.138 | ||
VIP | 192.168.226.150 | 192.168.226.150 | 192.168.226.150 | |
服务 | httpd | httpd | ||
系统版本 | Win10 | RedHat8 | RedHat8 | RedHat8 |
2.安装ipvsadm net-tools
DR,RS1,RS2 都执行下操作
// 关闭防火墙
systemctl disable --now firewalld
// 关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
//安装ipvsadm net-tools
yum -y install net-tools ipvsadm
3.配置DR
3.1配置DIP
编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens160
注释:DHCP的方式下发ip地址,DIP不配置
3.2配置VIP
语法:ifconfig ens160:0 vip/32 broadcast vip up
[root@DR ~]# ifconfig ens160:0 192.168.226.150/32 broadcast 192.168.226.150 up
[root@DR ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.226.134 netmask 255.255.255.0 broadcast 192.168.226.255
inet6 fe80::2bdf:4c8c:f068:c411 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:79:b1:fd txqueuelen 1000 (Ethernet)
RX packets 1003 bytes 125434 (122.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1112 bytes 126054 (123.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #添加的VIP
inet 192.168.226.150 netmask 0.0.0.0 broadcast 192.168.226.150
ether 00:0c:29:79:b1:fd txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 18683 bytes 1475384 (1.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18683 bytes 1475384 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.配置两台RS
4.1配置RIP
编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens160
注释:DHCP的方式下发ip地址,RIP不配置
4.2配置VIP
修改网卡内核参数 两台RS都配置
编辑/etc/sysctl.conf文件,添加如下内容:
//添加如下两行内容
vim /etc/sysctl.conf
........
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
//重新读配置
sysctl -p
配置vip 两台RS都配置
语法:ifconfig lo:0 vip/32 broadcast vip up
ifconfig lo:0 192.168.226.150/32 broadcast 192.168.226.150 up
[root@RS1/2 ~]# ifconfig
.......
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.226.150 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
.......
注:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
5.配置路由信息
用 net-tools
工具箱,在DR和所有RS上进行配置
语法:route add -host vip dev interface:0
在DR上配置:
[root@DR ~]# route add -host 192.168.226.160 dev ens160:0
[root@DR ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.226.2 0.0.0.0 UG 100 0 0 ens160
192.168.226.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.226.160 0.0.0.0 255.255.255.255 UH 0 0 0 ens160
在RS1上配置:
[root@RS1 ~]# route add -host 192.168.226.160 dev lo:0
[root@RS1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.226.2 0.0.0.0 UG 100 0 0 ens160
192.168.226.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.226.160 0.0.0.0 255.255.255.255 UH 0 0 0 lo
在RS2上配置:
[root@RS2 ~]# route add -host 192.168.226.160 dev lo:0
[root@RS2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.226.2 0.0.0.0 UG 100 0 0 ens160
192.168.226.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.226.160 0.0.0.0 255.255.255.255 UH 0 0 0 lo
6.ipvsadm配置DR
在DR上添加并保存规则
语法: ipvsadm -A -t vip:port -s wrr
ipvsadm -a -t vip:port -r rip:port -g
[root@DR ~]# ipvsadm -A -t 192.168.226.150:80 -s wrr
[root@DR ~]# ipvsadm -a -t 192.168.226.150:80 -r 192.168.226.128:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.226.150:80 -r 192.168.226.138:80 -g
[root@DR ~]# 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.226.150:80 wrr
-> 192.168.226.128:80 Route 1 0 0
-> 192.168.226.138:80 Route 1 0 0
7.测试
#Win10 cmd.exe
Microsoft Windows [版本 10.0.19045.3448]
(c) Microsoft Corporation。保留所有权利。
C:\Users\24734>curl http://192.168.226.150
RS2
C:\Users\24734>curl http://192.168.226.150
RS1