03 高并发负载均衡:LVS的DR模型试验搭建

本文介绍了如何通过修改内核参数隐藏VIP并配置在lo环回接口,以及各种负载均衡算法如轮询、带权重轮询、散列调度等。详细步骤包括配置VIP子接口、设置arp参数、安装httpd、部署LVS和keepalived实现高可用。
摘要由CSDN通过智能技术生成

理论部分


隐藏VIP的方法

要想做到VIP对外隐藏,对内可见,需要两步:

  • 修改内核参数
    当主机网卡被激活时,会告诉交换机,我来了。数据包中mac地址为全F,交换机出发广播。既然要对外隐藏,那么就要修改接收ARP、向外通告的级别。 需要修改arp_ignore的值为1,修改arp_announce的值为2。
    内核参数位置:/proc/sys/net/ipv4/conf/*IF*/
参数或取值描述
arp_ignore定义接收到ARP请求时的响应级别
0只要本地配置的有相应地址,就给予响应
1仅在请求目标(MAC)地址配置请求到达的接口上的时候,才给予响应。
arp_announce定义将自己地址向外通告时的通告级别
0将本地任何接口上的任何地址向外通告
1试图仅向目标网络通告与其网络匹配的地址
2仅向与本地接口上地址匹配的网络进行通告
  • VIP配置在LO环卫接口上
    ifconfig命令执行后,可以看到有两块网卡:ens33网卡、lo网卡。其中ens33网卡为物理网卡,lo网卡为虚拟网卡,是系统内核中虚拟出来的。lo网卡是不能和外界联通,且可以配置子接口。
    VIP配置到lo网卡上,就可以做到对外隐藏,对内可见。
    在这里插入图片描述

负载均衡算法

  • 静态调度
参数描述说明
rr轮询调度(Round-Robin,RR)最简单的调度算法,LB按照顺序将请求依次转发给后端的RS,并没有考量后端RS的状态(处理速度以及响应时间)。大部分情况下,RS的性能状态都是各不一致的,这种算法显然无法满足合理利用资源的要求。
wrr带权重的轮询调度(Weighted Round-Robin,WRR)在轮询算法的基础上加上权重设置,权重越高的RS被分配到的请求越多。适用于按照服务器性能高低,配置不同的权重,以达到合理的资源利用。
dh目标地址散列调度(Destination Hashing, DH)也是针对请求报文目标IP地址的负载均衡调度,但它是一种静态映射算法,通过一个散列(hash)函数将一个目标IP地址映射到一台服务器。DH算法先根据请求的目标IP地址,作为散列键(hash key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且为超载,将请求发送到该服务器,否则返回空。
sh源地址散列调度(Source Hashing, SH)该算法正好与DH调度算法相反,它根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。算法流程与目标地址散列调度算法基本相似,只不过将请求的目标IP地址换成请求的源IP地址。
  • 动态调度
参数描述说明
lc最小连接调度(Least-Connection, LC)把新的请求分配给连接数最少的RS。连接数少说明服务器空闲。
wlc带权重的最小连接调度(Weight Least-Connection, WLC)在最小连接算法的基础上加上权重设置,这样可以人为地控制请求分配。
sed最短期望延迟
nqnever queue
LBLC基于本地最少连接
DH
LBLCR基于本地的带复制功能的最少连接

ipvs内核模块

在这里插入图片描述

管理集群服务中心的RS

在这里插入图片描述

实验手册(DR模式)

在这里插入图片描述

实操部分


按照实验手册进行安装、配置、测试。我们用3台服务器:node01、node02、node03。其中:
node01(192.168.174.11):负载均衡服务器,将请求负载到node02、node03。VIP(192.168.174.100)是要接收公网请求的,要在物理网卡ens33上配置子接口。
node02(192.168.174.12):真实服务器(real server),安装httpd,提供网页服务。VIP(192.168.174.100)是要对外隐藏,对内可见的,需要修改内核参数、在环卫接口lo上配置子接口。
node03(192.168.174.13):真实服务器(real server),安装httpd,提供网页服务。VIP(192.168.174.100)是要对外隐藏,对内可见的,需要修改内核参数、在环卫接口lo上配置子接口。

配置真实服务器node02、node03

修改内核参数

这两个参数是不能用vi来修改的,要用echo来修改。修改后是即时生效的。如果服务器重启,这两个参数是会被还原的。

# 查看网卡接口
ifconfig

# 进入目录
cd /proc/sys/net/ipv4/conf/ens33

# 查看目录
ls

# 查看内核参数
cat arp_ignore
cat arp_announce

# 定义接收到 ARP请求时的响应级别
echo 1 > arp_ignore

# 定义将自己地址向外通告时的通告级别
echo 2 > arp_announce

# 再次查看内核参数
cat arp_ignore
cat arp_announce

# 修改所有接口
cd /proc/sys/net/ipv4/conf/all
echo 1 > arp_ignore
echo 2 > arp_announce

node02:
在这里插入图片描述
node03:
在这里插入图片描述

配置隐藏的VIP

掩码要配置成255.255.255.255,目标ip和掩码做与运算,如果是4个255,那么,网络号就是192.168.174.100;如果配置成255.255.255.0,那么目标ip和掩码做与运算,网络号就是192.168.174.0。这样环卫接口和物理网卡的接口,就通了,隐藏不住了。所以,必须要配置成4个255才行。

# 配置隐藏的VIP
ifconfig lo:2 192.168.174.100 netmask 255.255.255.255

# 查看网卡接口
ifconfig

node02:
在这里插入图片描述

node03:
在这里插入图片描述

提供网页服务
# 安装 httpd
yum install httpd -y

# 进入网页发布目录
cd /var/www/html

# 创建首页
vim index.html

# 编辑页面内容
# from 192.168.174.12		# 这是node02的index.html的内容
# from 192.168.174.13		# 这是node03的index.html的内容

# 保存编辑的内容
:wq

# 查看网页内容
cat index.html	# 这是node02查看index.html的内容
cat index.html	# 这是node03查看index.html的内容

# 启动服务
service httpd start

# 开放 80端口
firewall-cmd --zone=public --query-port=80/tcp	# 检查端口是否开放
firewall-cmd --zone=public --add-port=80/tcp --permanent	# 开放指定端口
firewall-cmd --reload	# 重启防火墙,使设置生效

# 浏览器访问
# http://192.168.174.12	# 这是node02提供的网页服务
# http://192.168.174.13	# 这是node03提供的网页服务
# http://192.168.174.100 # 这是node01的VIP,还没配置,我们先访问一下看看

node02:
在这里插入图片描述
在这里插入图片描述
node03:
在这里插入图片描述
在这里插入图片描述
访问 http://192.168.174.12
在这里插入图片描述
访问 http://192.168.174.13
在这里插入图片描述
访问 http://192.168.174.100
在这里插入图片描述

配置负载均衡服务器node01

配置VIP

VIP(192.168.174.100)是要接收公网请求的,要在物理网卡ens33上配置子接口。

# 查看网卡接口
ifconfig

# 在ens33物理网卡接口上,配置子接口ens33:3
ifconfig ens33:3 192.168.174.100/24

# 和上面的命令是一样的效果,netmask 255.255.255.0的简写是/24
# ifconfig ens33:3 192.168.174.100 netmask 255.255.255.0

# 再次查看网卡接口
ifconfig

在这里插入图片描述

提供负载均衡服务

LVS是系统自带的(现在的主机都会把LVS模块集成进来的),是系统内核中的服务。我们要想使用LVS服务,可以安装ipvsadm,它相当于对内核服务调用封装了一套api,直接可以给用户使用的。

# 安装ipvsadm
yum install ipvsadm -y

# 配置管理入口
ipvsadm -A -t 192.168.174.100:80 -s rr		# ens33物理网卡上配置的子接口ens33:3,VIP

# 配置管理出口
ipvsadm -a -t 192.168.174.100:80 -r 192.168.174.12 -g -w 1		# real server node02
ipvsadm -a -t 192.168.174.100:80 -r 192.168.174.13 -g -w 1		# real server node03

# 查询负载均衡列表
ipvsadm -ln

# 查询负载均衡偷窥列表
ipvsadm -lnc

# 开放 80端口
firewall-cmd --zone=public --query-port=80/tcp	# 检查端口是否开放
firewall-cmd --zone=public --add-port=80/tcp --permanent	# 开放指定端口
firewall-cmd --reload	# 重启防火墙,使设置生效

# 浏览器访问
# http://192.168.174.100

在这里插入图片描述
在这里插入图片描述
访问 http://192.168.174.100,F5刷新几次
在这里插入图片描述
在这里插入图片描述
查看偷窥列表
在这里插入图片描述

偷窥表state说明

ESTABLISHED 已连接
我们把node02的物理网卡ens33停掉,过一会发现Xshell断开连接了。

# 停掉物理网卡ens33
ifconfig ens33 down

在这里插入图片描述
我们直接在虚拟机中看一下,发现ens33网卡已经不存在了
在这里插入图片描述
刷新页面http://192.168.174.100,查看偷窥列表
在这里插入图片描述
192.168.174.12的状态变成了SYN_RECV。这个状态说明,lvs没事,一定是后边的网络层出问题了。
我们启动node02的物理网卡ens33

# 启动物理网卡ens33
ifconfig ens33 up

在这里插入图片描述
Xshell连接node02
在这里插入图片描述
访问http://192.168.174.12
在这里插入图片描述
访问http://192.168.174.100,F5多刷新几次,观察偷窥列表,发现node02又变成ESTABLISHED已连接的状态了
在这里插入图片描述
至此,LVS的DR模型试验搭建完成。
接下来考虑一个问题:如果LVS出了问题怎么办呢?
如果LVS挂了,那么流量就进不来了,对于企业来说,就是服务下线了。企业是不允许这种情况出现的。但是,程序没有办法保证一定不出问题。那么LVS出了问题该怎么处理呢?
可以人为处理,修复好了再把LVS启动起来。但是人处理会很慢,而且还很容易出错,也不够及时。如果可以让计算机自己处理就好了,比如:当发现LVS出现问题了,这台LVS服务器马上下线,同时切换到另一台备用的LVS服务器,等工程师将LVS服务器处理好了,再自动切换回这台LVS服务器。对于用户来讲,这个过程是透明的,用户是完全不知道有这回事。这样的用户体验就很好了吧!
那么要怎样实现呢?咱们下一篇文章接着说!


上一篇《02 高并发负载均衡:LVS的DR,TUN,NAT模型推导》
下一篇《04 高并发负载均衡:基于keepalived的LVS高可用搭建》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值