目录
一、LVS集群的介绍
1、LVS 相关术语:
2、lvs工作原理
3、相关名词概念
4、lvs集群的类型
二、lvs的nat模式
1、介绍:
2、数据逻辑:
3、nat实验部署
环境搭建:
1、lvs中要去打开内核路由功能,实现网络互联。
2、在web1,web2上安装配置httpd服务
3、在lvs上面配置ipvsadm
4、用nat ip 172.25.254.100 进行测试
三、lvs的dr模式
1、详细介绍
2、dr的数据流向+特点
3、dr模式部署
环境准备:
1、网络配置:
2、下载需要的服务,并启动
3、设置VIP,并解决vip响应问题
3、在lvs上配置ipvsadm策略负载均衡---直连路由
测试
一、LVS集群的介绍
Cluster常见的三种类型:LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问HA:High Availiablity(高可用)SPOF(single Point Of failure)MTBF:Mean Time Between Failure 平均无故障时间,正常时间MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服 务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在 常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一 些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。 停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外 停机时间HPC:High-performance computing(高性能计算,国家战略资源)
1、LVS 相关术语:
LVS:Linux Virtual Server,负载调度器,内核集成。
2、lvs工作原理
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。
LVS(Linux Virtual Server)主要通过负载均衡技术,将来自客户端的请求转发给后端服务器,从而提供高性能、高可用的服务器集群服务。
LVS是Linux操作系统中一个优秀的负载均衡项目,它利用IP负载均衡技术,有效地将到达的请求分发到不同的服务器上,以实现高性能和高可用性。LVS的核心组件包括负载调度器(Load Balancer)、服务器池(Server Pool)和共享存储(Shared Storage)。请求首先到达负载调度器,然后根据预设的规则和算法,转发到服务器池中的某一台服务器进行处理。
3、相关名词概念
- VS:Virtual Server
- RS:Real Server
- CIP:Client IP
- VIP: Virtual serve IP VS外网的IP
- DIP: Director IP VS内网的IP
- RIP: Real server IP
访问流程: CIP <--> VIP == DIP <--> RIP
4、lvs集群的类型
- lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr: 操纵封装新的MAC地址
- lvs-tun: 在原请求IP报文之外新加一个IP首部
- lvs-fullnat: 修改请求报文的源和目标IP
下面我们来介绍一下lvs的nat模式。
二、lvs的nat模式
1、介绍:
- 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
- PORT实现转发
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是Linux系统,RS可以是任意OS系
2、数据逻辑:
- 1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口(9000port)
- 2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
- 3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
- 4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
- 5.VS服务器把修改过报文的响应数据包回传给客户端
- 6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通过PREROUTING后被ipvs结果并作nat转发
3、nat实验部署
拓扑图
环境要求:
准备3台Linux虚拟机:
一台作lvs调度器进行负载均衡策略,其中要有2个网卡,一个为nat模式,一个为仅主机模式。
其他两台都为仅主机模式提供httpd服务,最终要实现的时在lvs上实现通过172.25.254.100,进行nat模式实现负载均衡。
环境搭建:
主机名
| ip | vip | 角色 |
lvs | 192.168.0.100 | 172.25.254.100 |
调度器(
VS
)
|
web1 | 192.168.0.10 | null |
真实服务器(
RS
)
|
web2 | 192.168.0.20 | null |
真实服务器(
RS
)
|
node4 | 172.25.254.130 |
测试机
|
注意:在进行lvs负载均衡部署时,环境一定要成功没问题。!!!!
1、lvs中要去打开内核路由功能,实现网络互联。
[root@lvs ~]#vim /etc/sysctl.conf
#添加
net.ipv4.ip_forward = 1
#查看
[root@lvs ~]#sysctl -p
net.ipv4.ip_forward = 1
2、在web1,web2上安装配置httpd服务
#web1上面,
[root@web1 ~]#dnf install httpd -y
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable --now httpd
#web2上面,
[root@web2 ~]#dnf install httpd -y
[root@web2 ~]# echo web2 20 > /var/www/html/index.html
[root@web2 ~]# systemctl enable --now httpd
3、在lvs上面配置ipvsadm
#下载服务
[root@lvs ~]#yum install ipvsadm -y
#-s 调度算法 rr 轮询 -t 使用tcp协议 ,添加策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -Ln
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
#查看策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0
#将其保存到配置文件中,使其可以当作服务启动
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl enable --now ipvsadm.service
ipvsadm 的详细用法将在后面介绍哦,现在先使用。
4、用nat ip 172.25.254.100 进行测试
以上就成功啦,实现简单的负载均衡,上面web服务写成不一样是为了实验结果明显,在企业中其内容一般都是一样的,这样就可以实现我们需要负载均衡的效果 。
但是这样就会导致中间lvs的压力过大,为了解决这个问题,就出现了dr模式,下面我们来介绍一下dr模式。
三、lvs的dr模式
1、详细介绍
2、dr的数据流向+特点
-
客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
-
VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
-
RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC。
1.Director 和各 RS 都配置有 VIP2. 确保前端路由器将目标 IP 为 VIP 的请求报文发往 Director3. 在前端网关做静态绑定 VIP 和 Director 的 MAC 地址4.RS 的 RIP 可以使用私网地址,也可以是公网地址; RIP 与 DIP 在同一 IP 网络;5.RIP 的网关不能指向 DIP ,以确保响应报文不会经由 Director6.RS 和 Director 要在同一个物理网络7. 请求报文要经由 Director ,但响应报文不经由 Director ,而由 RS 直接发往 Client8. 不支持端口映射(端口不能修败)9.RS 可使用大多数 OS 系统。
3、dr模式部署
环境准备:
本次实验需要准备5台Linux虚拟机,分别作为client,router(路由器服务),lvs调度器,web1,web2.。其具体网卡,IP要求如下图表所示:除了=了具体每个虚拟机自己网卡的IP,其lvs,web1,web2要共同有一个虚拟IP(VIP)。还有就是网关都要指向路由器。
那么现在在每台虚拟机上查看网络配置:
1、网络配置:
client:查看网卡IP和路由
[root@client system-connections]# cat ens160.nmconnection
[connection]
id=ens160
type=ethernet
interface-name=ens160
[ipv4]
#IP和网关
address1=172.25.254.200/24,172.25.254.100
method=manual
dns=114.114.114.114;
#查看路由
[root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.100 0.0.0.0 UG 100 0 0 ens160
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
router:查看网卡IP,并配置路由内核功能net.ipv4.ip_forward = 1
[root@router system-connections]# cat ens160.nmconnection
[connection]
id=ens160
type=ethernet
interface-name=ens160
[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@router system-connections]# cat ens224.nmconnection
[connection]
id=ens224
type=ethernet
interface-name=ens224
[ipv4]
address1=192.168.0.100/24
method=manual
#路由内核功能添加net.ipv4.ip_forward = 1
[root@router ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
lvs:查看网卡IP和路由
[root@lvs system-connections]# cat ens224.nmconnection
[connection]
id=ens224
type=ethernet
interface-name=ens224
[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
dns=114.114.114.114;
[root@lvs ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 ens224
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens224
web1:查看网卡IP和路由
[root@web1 system-connections]# cat ens224.nmconnection
[connection]
id=ens224
type=ethernet
interface-name=ens224
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
dns=114.114.114.114;
[root@web1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 ens224
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens224
web2:查看网卡IP和路由
[root@web2 system-connections]# cat ens224.nmconnection
[connection]
id=ens224
type=ethernet
interface-name=ens224
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
dns=114.114.114.114;
[root@web1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 ens224
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens224
2、下载需要的服务,并启动
(1)在lvs上面下载 ipvsadm
#下载服务
[root@lvs ~]#yum install ipvsadm -y
[root@lvs ~]# systemctl enable --now ipvsadm.service
(2)在web1,web2上安装配置httpd服务
#web1上面,
[root@web1 ~]#dnf install httpd -y
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable --now httpd
#web2上面,
[root@web2 ~]#dnf install httpd -y
[root@web2 ~]# echo web2 20 > /var/www/html/index.html
[root@web2 ~]# systemctl enable --now httpd
3、设置VIP,并解决vip响应问题
- (1)在前端网关做静态绑定
- (2)在各RS使用arptables
- (3)在各RS修改内核参数,来限制arp响应和通告的级别
本次实验是通过限制arp来实现:
限制响应级别:arp_ignore0:默认值,表示可使用本地任意接口上配置的任意地址进行响应1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应限制通告级别:arp_announce0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告1:尽量避免将接口信息向非直接连接网络进行通告2:必须避免将接口信息向非本网络进行通告
先在lvs,web1,web2上设置环回网卡的虚拟IP(vip)
[root@lvs ~]# ip a a 192.168.0.200/32 dev lo
[root@web1 ~]# ip a a 192.168.0.200/32 dev lo
[root@web2 ~]# ip a a 192.168.0.200/32 dev lo
[root@lvs ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.0.200/32 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
配置arp限制来解决VIP响应的问题:
在web1和web2中解决响应问题
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
3、在lvs上配置ipvsadm策略负载均衡---直连路由
在lvs中配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 1
[root@lvs ~]# 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.0.200:80 wrr
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 1 0 0
然后我们的dr的策略就做好了,然后我们测试看看
测试
在client上进行测试,,以下就是我们测试成功的页面,但是不能具体看到其mac地址的变化,具体我们可以是使用wireshark进行抓包分析。并且通过抓包可以看出全程源目IP并没有发生变化,只有mac地址在不断变化,mac地址都是通过路由器进行转发。