LVS+nginx负载均衡(一)-企业实战lvs负载均衡

一、LVS简介

1、LVS简介

LVS是linux虚拟服务器,是一个虚拟的服务器集群;通过LVS的负载均衡技术和linux操作系统可以实现一个人高性能、高可用的Linux服务器集群,并具有良好的高可靠性、可扩展性和可操作性;LVS架构从逻辑上可分为调度层、Server集群层和共享存储层。

2、LVS相关术语

术语 说明
DS 负载均衡节点服务器
RS 后端真实服务器
DIP 用于与内部主机通信的IP地址
VIP 用于用户请求的目标IP地址
RIP 后端真实服务器IP地址
CIP 访问客户端的IP地址

二、LVS的工作模式

1、网络地址转换模式(NAT)

在网络地址转换工作模式下,调度器(LB)重写请求报文的目标地址或端口,然后根据调度算法将请求分流到不同的后端真实服务器,真实服务器响应响应请求报文后返还给调度器,在经过调度器(LB)重写报文的源地址,从而返回给客户端请求用户。

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第1张图片

过程描述:

  1. 客户端发出请求(假设客户端CIP:10.0.0.1:80为数据包源地址,目标地址为VIP:20.0.0.1:80)
  2. 用户请求的数据包经过调度器(LB),目标地址会被调度器改写成后端其中某个真实主机地址(RIPA:192.168.2.2:80)
  3. 后端真实服务器收到请求后,对比发现请求目标是自己,响应并返回信息给调度器,此时源地址为RIPA,目标地址为VIP。
  4. 调度器收到后端真实服务器响应后,将源地址改写成VIP地址(实际地址为RIPA),然后将数据返回个请求客户端。请求完成。

LVS网络地址转换模式的特点:

  1. 后端真是主机使用私有地址,但网关必须指向DIP,且DIP和RIP必须在同一网段为。
  2. 请求和返回都要经过调度器,
  3. 支持端口映射,后端主机可以使用任意的操作系统。

2、直接路由模式(DR)

直接路由模式(DR)通过改写请求报文的目标MAC地址(将报文中的MAC改写成后端某台RS主机的MAC),将请求发到后端真实主机服务器,而真实主机服务器响应后的数据直接返回给请求的客户端。此模式要求调度器与真实主机服务器要有一块网卡是连接在同一网段中的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GhUxqGnS-1660702303224)(https://m.zhimalian.xyz/upload/2022/05/%E6%9C%AA%E5%91%BD%E5%90%8D%20(1)]-7eaade90a239447c871f6ae106f3fcf1.png)

过程描述:

  1. 客户端发出请求的数据包。
  2. 调度器接受请求数据包后,不转换其地址和端口,也不进行地址封装,只将请求数据报文中数据报文中的源MAC地址改写成DIP的MAC地址,将目标的MAC地址改写成RIP的MAC地址,但此时的源IP和目标IP是不改变的,然后将数据包转发出去。
  3. 后端真实服务器接收到数据包,发现目标MAC地址是自己,继续解包发现目标IP是VIP(事先在本机LO端口绑定VIP,开启抑制ARP功能),从而接受数据报文信息进行处理,处理完成后通过LO接口传递给外网口,在向外发送。直接由真实主机服务器对客户端的请求做出的回复。
  4. 客户端接受到数据包,请求完成。

LVS直接路由模式的特点:

  • 此模式可保证客户端访问的目标地址为VIP的数据报文全部由DS服务器接受,而非后端真实服务器。
  • 此模式不支持地址转换和端口映射。
  • RS主机与DS主机必须在同一物理网络中,RS主机可以使用公网或死亡地址,如果使用公网地址,此时可通过公网对RIP进行直接访问。
  • RS主机网关禁止指向DIP,且RS主机LO接口必须配置VIP地址并开启ARP功能。

三、LVS调度算法

  • 轮询(RR)
  • 加权轮询(WRR)
  • 最少连接(LC)
  • 加权最少连接(WLC)
  • 基于局部性的最少连接(LBLC)
  • 复杂的基于局部性的最少连接(LBLCR)
  • 目标地址散射调度(DH)
  • 源地址散列调度(SH)
  • 最短延迟调度(SED)
  • 最少队列调度/永不排队调度(NQ)

四、LVS服务的DR模式部署

1、环境准备

服务器角色 服务器ip地址 备注
LVS 192.168.73.136 提供VIP:192.168.73.130对外提供服务
RS节点A 192.168.73.137 后端真实服务器A
RS节点B 192.168.73.138 后端真实服务器B

2、查看服务器系统环境

cat /etc/redhat-release
uname -r #查看系统内核版本
## 下载ipvsadm时须下载与内核行相对应的版本
## 查看系统是否存在kernel-devel的软件包,如不存在,使用yum安装

3、部署后端服务器

安装nginx或者apache都可以,详细安装见前面文章

4、安装ipvsadm

解压上传的ipvsadm压缩包

tar -zxvf ipvsadm-1.31.tar.gz
cd ipvsadm
##编译安装
make && make install

编译过程中如果报错:
ip_vs.h:15:29: 致命错误:netlink/netlink.h:没有那个文件或目录
#include
LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第2张图片
使用yum安装libnel和popt包

yum install libnl* popt*

编译完成,使用命令ipvsad -v查看是否安装完毕,如果出现版本号,则表示安装完毕。

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第3张图片

5、配置LVS DR模式负载均衡

1、 lvs服务器配置VIP地址,对外提供服务

#配置VIP
ifconfig ens33:250 192.168.73.130/24
#查看是否配置成功
ifconfig ens33:250

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第4张图片

2、配置LVS服务

ipvsadm -C #清空原配置
#配置VIP与调度算法
ipvsadm -A -t 192.168.73.130:80 -s wrr 
#查看配置
ipvsadm -L -n

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第5张图片

3、添加后端真实主机服务器

#添加后端真实服务器
ipvsadm -a -t 192.168.73.130:80 -r 192.168.73.137:80 -g -w 1
ipvsadm -a -t 192.168.73.130:80 -r 192.168.73.138:80 -g -w 1
#查看配置
ipvsadm -L -n

6、后端真实服务器配置抑制ARP功能与绑定VIP地址

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_ignore 
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce 
ifconfig lo:250 192.168.73.130/32

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第6张图片

7、测试访问

  • 修改请求持久化时间为5s,默认情况下为300s
ipvsadm -E -t 192.168.73.150:80 -s rr -p 5
  • 设置tcp、udp连接时间为1s
ipvsadm --set 1 1 1

浏览器输入VIP地址,刷新网页查看是否成功分配调度
LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第7张图片
查看LVS调度情况

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第8张图片

三、ipvsadm命令选项

LVS+nginx负载均衡(一)-企业实战lvs负载均衡_第9张图片

-A        添加一个虚拟服务,使用ip地址、端口号、协议来唯一定义一个虚拟服务
-E        编辑一个虚拟服务
-D        删除一个虚拟服务
-C        清空虚拟服务列表
-R        从标准输入中还原虚拟服务列表
-S        保存虚拟服务规则至标准输出,输出规则可使用-R选项还原
-L        显示虚拟服务列表
-Z        虚拟服务器列表计数器清零(清空当前连接数)
-a        添加一台真实服务器
-e        编辑一台真实服务器
-d        减少一台真实服务器
-t        使用TCP服务,该参数后需加主机与端口信息
-u        使用UDP服务,该参数后需加主机与端口信息
-s        指定lvs的调度算法
-r        设置真实服务器IP与端口
-g        设置lvs工作模式为DR直连路由
-i        设置lvs工作模式为TUN隧道
-m        设置lvs工作模式为NAT地址转换模式
-w        指定真实服务器权重
-c        连接状态,配和-L使用
-n        数字格式显示
--stats   显示统计信息
--rate    显示速率信息
--sort    对虚拟服务器和真实服务器排序输出
--set tcp tcpfin udp
          设置ipvs连接超时值,三个参数分别代表tcp会话超时时间、收到FIN包后tcp会话超时时间、udp超时时间
--timeout
          显示tcp tcpfin udp的timeout值
--start-daemon
          启动同步守护进程
--stop-daemon
          停止同步守护进程

你可能感兴趣的:(运维,linux,负载均衡,lvs,nginx)