LVS 负载均衡搭建服务器集群架构

1. LVS 虚拟服务器;

相关概念:

  • LVS 是 Linux Virtual Server 的简写,意思就是 Linux 虚拟服务器,是一个虚拟的服务器集群系统
  • 本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一

目的:

  • 目前提供 Web 服务的架构是单台 Nginx。如果并发量非常大的情况下,单台 Nginx 是不够用的
  • 通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器集群,它具有良好的可靠性、可扩展性和可操作性
  • 低廉的成本实现最优的服务性能

实现原理:

  • 基于 DNS 域名轮流解析的方法
  • 基于客户端调度访问的方法
  • 基于应用层系统负载的调度方法
  • 基于 IP 地址的调度方法

IP 负载均衡技术:

  • IP负载均衡技术是通过 ipvs 内核模块来实现的,ipvs 是 LVS 集群系统的核心软件
  • 安装在 Director Server 上,同时在 Director Server 上虚拟出一个 IP(VIP-Virtual IP)地址。域名解析的时候可以解析到 VIP 上,然后会根据 VIP 找到 Director Server,再通过 Director Server 分发到其他真实的服务器上
  • 访问的请求首先经过 VIP 到达负载调度器
  • 由负载调度器从 Real Server (真实的 Nginx 或者 Apache 服务器)列表中选取一个服务节点响应用户的请求
  • Real Server 节点如何返回数据给用户,是 ipvs 实现的重点技术,ipvs 实现负载均衡机制有三种
  • NAT(定时转发)、TUN(IP 隧道) 和 DR(直接路由)

LVS 优点

  • 开源、免费
  • 技术资源较为丰富
  • 具有软件负载均衡的一些优点:配置轻松、成本低
    在这里插入图片描述

2. 安装 ipvsadm;

# 查询 Linux 内核版本
uname -r
# 返回 3.10.0-957.el7.x86_64

# 可以安装官网的 IPVS,也可以 yum 安装
yum -y install ipvsadm

# 查看
ipvsadm -h

3. NAT 模式;

实现原理:

  • 地址转换技术
  • DR (Director Server)只需要将 VIP 配置到 DR 上
  • DR 将收到的集群服务请求报文目标地址转换成根据算法计算得出的后端主机 IP 地址
  • 在这个过程中,用户发来一个请求,它会把这个请求的报文的目标地址转换成后端主机 IP 地址
  • 然后后端主机将响应报文发送至 DR(负载均衡器)
  • 再由 DR 将源地址转换成 VIP 的地址,返回给用户
    在这里插入图片描述

特点:

  • LVS(DR)上面需要双网卡:DIP(内网)和 VIP(外网),用户访问是通过VIP(外网)访问,DIP(内网)是用来和真实服务器相连
  • 内网的 Real Server 主机的 IP 必须和 DIP 在同一个网络中,并且要求 Real Server 的网关都需要指向 DIP 的地址。因为在往回走数据的时候需要回给 DR,如果不指定网关的话会回不来
  • Real Server IP 都是私有 IP 地址,仅用于各个节点之间的通信。也就是说,真实的服务器用的都是内网 IP,公网是访问不到的
  • DR 位于 client 和 Real Server 之间,负载处理所有的进站、出站的通信
  • 支持端口映射
  • 应用在较大规模的应用场景中,但是 DR 容易成为整个架构的瓶颈

配置:

## 步骤 1:
# 192.168.2.218 机器需要加一个 VIP(另外一块网卡)
# 如果是虚拟机操作,可以在设置里添加一个设备(网络适配器)
# 配置 ip
ifconfig ethxxx 10.0.0.228
# 注释:
# 确认新设置了一个 ip 和 192.168.2.218 区分
# 这里新设置了一个 ip 为 10.0.0.228 充当 vip 
# 之后通过 10.0.0.228 去访问调度器(DR)
# 用户访问是通过 10.0.0.228 进行访问
# 用户访问到 10.0.0.228 的时候,
# 轮询到 192.268.2.214 或者 192.268.2.215

## 步骤 2:配置网关
# 接下去给真实服务器(214 和 215)添加网关,添加 218
# 添加好之后,通过 214 和 215 往回返数据的时候,就能够返回到 218
# 登录 214 和 215
# 2.1 首先删除其它网关
route del default
# 2.2 添加新网关
route add default gw 192.168.2.218
# 查看网关
route -n

## 步骤 3:
# 为 218(负载均衡调度器)配置负载均衡相关内容:使用 ipvsadm
# 3.1 开启 ip 转发,这样数据包过来就可以转发
echo "1" > /proc/sys/net/ipv4/ip_forward
# 3.2 配置 ipvsadm
# 先清除以前的规则
ipvsadm -C
# 添加规则:添加 VIP,用轮询算法 rr
ipvsadm -A -t 10.0.0.228:80 -s rr
# 把真实服务器添加进来
ipvsadm -a -t 10.0.0.228:80 -r 192.168.2.214:80 -m
ipvsadm -a -t 10.0.0.228:80 -r 192.168.2.215:80 -m
# 查看
ipvsadm -l

4. DR 模式;

实现原理:

  • 直接路由模式
  • client 发送一个请求给 VIP
  • VIP 收到请求后会跟 LVS 设置的 LB 算法(负载均衡算法)选择一个 LB 比较合理的 Real Server(真实服务器)
  • 然后把此请求数据包的 MAC 地址修改为 Real Server 的 MAC 地址
  • ARP 协议会把这个包发送给真正的 Real Server(根据 MAC 找到机器)
  • Real Server 收到这个数据包后,首先判断目标 IP 是否是自己的 IP 地址;如果不是就丢掉包;如果是就处理这个包
  • 在所有的 Real Server 的机器上面绑定 VIP 的 IP 地址,也就是说当用户请求 VIP 的时候,所有的机器都有 VIP
  • Real Server 处理这个包后,会把目标 IP 设置为 client IP (用户)直接发送给 client IP,不经过 LVS,效率比较高(比 NAT 高很多)
    在这里插入图片描述

特点:

  • 各个集群的节点必须和 DR 在同一个物理网络中
  • Real Server IP 地址不能为私有地址,可以实现便捷的远程管理和监控
  • DR 仅仅负责处理入站请求,响应报文则由 Real Server 直接发往客户端
  • 集群节点 Real Server 的网关一定不能指向 DIP,而是指向外部路由。因为数据要往外发。
  • 不支持端口映射。
  • DR 可以支持比 NAT 多很多的 Real Server

配置:

## 步骤 1:网络配置
# DR 模式只需要一块网卡,把之前 NAT 模式添加的网卡删除
# 就只剩下一块网卡和 lo 回环
# VIP 绑在原来的那一块网卡上

## 步骤 2: 给二台机器(214,215)都绑定 VIP
# 2.1 绑定 VIP
# 定义 netmask 255.255.255.255 表示一个 ip 独占一个网段
# 永久生效需要把命令写入 vim /etc/rc.d/rc.local
ifconfig lo:0 192.168.2.250 netmask 255.255.255.255 broadcast 192.168.2.250

# 2.2 重置网关
route -n	# 查看网关
route del default
route add -host 192.168.2.250 dev lo:0
# 以后访问 ip 的时候不能让真实服务器直接给到响应,是需要通过 DR 来处理,
# 如果直接响应的话,三台机器都是同样的 ip,会凌乱的,所以不能让它去广播
# 比如:有人在喊,250 谁在啊?不能让它答应,
# 所以需要设置一些内容

# 2.3 设置 arp_ignore 和 arp_announce
# 仅向与本地接口地址匹配的网络进行通信,这样就搞定了广播问题
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/enp0s3/arp_announce
# 如果桥接
echo 2 > /proc/sys/net/ipv4/conf/xxx-bridge/arp_announce

# 定义接收 arp 请求时候的一个响应级别
# 只在目标 ip 为本地地址的时候,并且配置在请求进来的接口上的时候,才给响应
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/enp0s3/arp_ignore
# 如果桥接
echo 1 > /proc/sys/net/ipv4/conf/xxx-bridge/arp_ignore

## 步骤 3:配置 DR
ifconfig xxx-bridge:0 192.168.2.250/24
ipvsadm -C 
ipvsadm -A -t 192.168.2.250:80 -s rr
# -g: dr 模式
ipvsadm -a -t 192.168.2.250:80 -r 192.168.2.214:80 -g
ipvsadm -a -t 192.168.2.250:80 -r 192.168.2.215:80 -g
# 查看
ipvsadm -l
# 打开浏览器访问 http://192.168.2.250/
# 实际测试效果和 Nginx 的 iphash 类似

5. IP-TUNNELING 模式。

实现原理:

  • IP 隧道模式
  • 首先 client 通过 VIP 发送请求给 DR
  • DR 收到数据包后,会根据 LVS 设置的算法选择一个合适的 Real Server,并把 client 发送的包装到一个新的 IP 包里面(和 DR 模式不一样,DR模式直接去改 MAC 地址),新的 IP 包的目标地址是 Real Server 的 IP
  • Real Server 收到包后判断目标 IP 是不是自己,是的就留下处理,不是的话就丢弃
  • 需要给 Real Server 绑定 VIP
    在这里插入图片描述

配置:

## 步骤 1:恢复网卡
rm -rf /etc/sysconfig/network-scripts/多余的文件
system restart network
ifconfig

## 步骤 2:给三台机器(214,215,218)绑定 VIP
# 绑定 vip
# 关于 netmask ,之前写 4 个 255 是因为不想让外面访问到 ip,而现在是在隧道里面,本身就访问不到
ifconfig tunl0 192.168.2.250 broadcast 192.168.2.250 netmask 255.255.255.0 up
# 添加路由
route add -host 192.168.2.250 dev tunl0
route -n

## 步骤 3:给 214 和 215 指定广播条件
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

## 步骤 4:配置 DR(218)
ipvsadm -C 
ipvsadm -A -t 192.168.2.250:80 -s rr
# -g: dr 模式
ipvsadm -a -t 192.168.2.250:80 -r 192.168.2.214:80 -i
ipvsadm -a -t 192.168.2.250:80 -r 192.168.2.215:80 -i
# 查看
ipvsadm -l
# 打开浏览器访问 http://192.168.2.250/
发布了119 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hualaoshuan/article/details/102575975
今日推荐