高可用集群架构 LVS 负载均衡


1. LVS 负载均衡

Linux Virtual Server
章文嵩博士主导的开源的负载均衡项目
LVS(ipvs)已被集成到Linux内核中
负载均衡调度器

2. 为什么要使用 LVS + Nginx?

LVS 基于四层负载均衡,工作效率高
单个 Nginx 承受不了压力,需要集群
LVS 充当 Nginx 集群的调度者
Nginx 接受请求来回,LVS 可以只接受不响应

3. LVS 的三种模式

3.1. LVS 模式之 NAT

3.2. LVS 模式之 TUN

3.3. LVS 模式之 DR

3. 搭建 LVS-DR 模式 - 配置LVS节点与ipvsadm

3.1. 服务器与IP约定

LVS:
DIP:192.168.1.151(内网IP)
VIP:192.168.1.150(虚拟IP)

Nginx1:

RIP:192.168.1.171(内网IP)
VIP:192.168.1.150(虚拟IP)

Nginx2:

RIP:192.168.1.172(内网IP)
VIP:192.168.1.150(虚拟IP)

3.2. 关闭网络配置管理器

所有主机节点关闭网络配置管理器,因为可能会和网络接口冲突

systemctl stop NetworkManager
systemctl disable NetworkManager

3.3. 创建子接口虚拟IP

  • 进入到网卡配置目录,找到本机网卡(如,ens33或者eth0)

    cd /etc/sysconfig/network-scripts/
    ls
  • 拷贝并且创建子接口(这里以网卡ens33为例,实际情况自定)

    cp ifcfg-ens33 ifcfg-ens33:1

    注:数字’1’为别名,可以任取其它数字

  • 配置子接口vim ifcfg-ens33:1

    DEVICE="ens33:1"
    BOOTPROTO="static"
    ONBOOT="yes"
    IPADDR=192.168.1.150
    NETMASK="255.255.255.0"
  • 刷新网络配置

    service network restart
  • 查看配置是否成功

    ip addr

    出现192.168.1.150ens33:1
    至此,子接口 虚拟IP已配置成功

3.4. 安装集群管理工具ipvsadm

yum install ipvsadm

验证安装

ipvsadm -Ln

安装成功会出现版本号集群等信息

3.5. 注意事项

目前所涉及到的有关虚拟ip的配置,都是在本地虚拟机进行的
需要注意的是,在云服务器,如阿里云、腾讯云
阿里云:不支持系统级别的虚拟ip,需要购买官方提供的负载均衡服务
腾讯云:支持系统级别的虚拟ip,但是也是需要额外购买的(单台服务器最多支持10个ip)
因为虚拟ip是建立在网卡的基础上,需要成本的

4. 搭建 LVS-DR 模式 - 为两台RS配置虚拟IP

4.1. 192.168.1.171配置创建子接口虚拟IP

  • 进入到网卡配置目录,找到本机网卡ifcfg-lo

    为什么这里使用ifcfg-lo,而不使用之间提到的ens33或者eth0?
    ifcfg-l0 是本地回环接口,相当于 127.0.0.1
    因为在这里我们要构建的虚拟ip仅用于返回用户数据,不对外提供访问,所以使用ifcfg-lo构建子接口

    cd /etc/sysconfig/network-scripts/
    ls
  • 拷贝并且创建子接口

    cp ifcfg-lo ifcfg-lo:1

    注:数字’1’为别名,可以任取其它数字

  • 配置子接口vim ifcfg-lo:1

    DEVICE="lo:1"
    IPADDR=192.168.1.150
    NETMASK=255.255.255.255
    NETWORK=127.0.0.0
    BROADCAST=127.255.255.255
    ONBOOT="yes"
    NAME=loopback
  • 刷新网络配置

    ifup lo
  • 查看配置是否成功

    ip addr

    出现192.168.1.150lo:1
    至此,子接口 虚拟IP已配置成功

4.2. 192.168.1.172配置创建子接口虚拟IP

  • 进入到网卡配置目录,找到本机网卡ifcfg-lo

    cd /etc/sysconfig/network-scripts/
    ls
  • 拷贝并且创建子接口

    cp ifcfg-lo ifcfg-lo:1

    注:数字’1’为别名,可以任取其它数字

  • 配置子接口vim ifcfg-lo:1

    DEVICE="lo:1"
    IPADDR=192.168.1.150
    NETMASK=255.255.255.255
    NETWORK=127.0.0.0
    BROADCAST=127.255.255.255
    ONBOOT="yes"
    NAME=loopback
  • 刷新网络配置

    ifup lo
  • 查看配置是否成功

    ip addr

    出现192.168.1.150lo:1
    至此,子接口 虚拟IP已配置成功

5. 搭建 LVS-DR 模式 - 为两台RS配置arp

  • arp-ignore:ARP响应级别(处理请求)

    0:只要本机配置了ip,就能响应请求
    1:请求的目标地址到达对应的网络接口,才会响应请求

  • arp-announce:ARP通告行为(返回数据)

    0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
    1:尽可能避免本网卡与不匹配的目标进行通告
    2:只在本网卡通告

5.1. 192.168.1.171配置ARP

  • 配置ARP,打开sysctl.conf
    vim /etc/sysctl.conf
  • 配置所有网卡
    # configration for lvs
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
  • 刷新网络配置
    sysctl -p
  • 增加一个网关,用户接收数据报文,当有请求到本机后,会交给lo去处理
    # 增加网关(此方式重启后会失效)
    route add -host 192.168.1.150 dev lo:1
    

检查配置

route -n

* 把网关配置加到开机自启,防止重启失效
```bash
echo "route add -host 192.168.1.150 dev lo:1" /etc/rc.local

5.2. 192.168.1.172配置ARP

同上

6. 搭建 LVS-DR 模式 - 使用ipvsadm配置集群规则

通过上面的章节,我们已经配置好了三台主机,接下来我们使用 ipvsadm 为它们配置集群

  • 创建 LVS 节点,用户访问的集群调度者

    ipvsadm -A -t 192.168.1.150:80 -s rr -p 5

    -A:添加集群
    -t:tcp协议
    ip地址:设定集群的访问ip,也就是LVS的虚拟ip
    -s:设置负载均衡的算法,rr表示轮询
    -p:设置连接持久化的时间

  • 创建2台RS真实服务器

    ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g
    ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.172:80 -g

    -a:添加真实服务器
    -t:tcp协议
    -r:真实服务器的ip地址
    -g:设定DR模式

  • 保存到规则库,否则重启失效

    ipvsadm -S
  • 检查集群

    # 查看集群列表
    ipvsadm -Ln
    

查看集群状态

ipvsadm -Ln –stats


* 其它命令
```bash
# 重启 ipvsadm,重启后需要重新配置
service ipvsadm restart
# 查看持久化连接
ipvsadm -Ln --persistent-conn
# 查看连接请求过期时间以及请求ip和目标ip
ipvsadm -Lnc
# 设置 tcp tcpfin udp 的过期时间(一般保持默认)
ipvsadm --set 1 1 1
# 查看过期时间
ipvsadm -Ln --timeout
  • 更新详细的帮助文档
    ipvsadm -h
    man ipvsadm

7. 搭建 LVS-DR 模式 - 验证DR模式

ipvsadm -Ln --stats

注意:测试发现每次请求还是同一台节点,并不是我们所配置轮训,这是为什么呢?
原因1:ipvsadm会默认持久化连接,默认时间为300s
原因2:ipvsadm会默认配置tcp tcpfin udp的连接超时时间

# 重新配置持久化时间为5s
ipvsadm -E -t 192.168.1.150:80 -s rr -p 5
# 重新配置 tcp tcpfin udp的连接超时时间,1分钟
ipvsadm --set 1 1 1

# 检查配置
ipvsadm -Ln
ipvsadm -Lnc

等1分钟过后,刷新请求,会看到轮训请求到第二个节点,验证通过
注:在正常使用时,这些配置可以保持默认

8. 总结

以上,我们完成了 LVS-DR 模式,实现高可用集群架构 LVS 负载均衡


文章作者: 小动物不困
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小动物不困 !
评论
 上一篇
高可用集群架构 Keepalived+Lvs+Nginx 高可用集群架构 Keepalived+Lvs+Nginx
服务器与IP约定 LVS1-Master:DIP:192.168.1.151(内网IP)VIP:192.168.1.150(虚拟IP)LVS2-Backup:DIP:192.168.1.152(内网IP)VIP:192.168.1.150
2020-09-14
下一篇 
高可用集群架构 Keepalived 高可用集群架构 Keepalived
1. Keepalived 概念 解决单点故障 组件免费 可以实现高可用HA机制 基于VRRP协议 虚拟路由冗余协议 VRRPVirtual Router Redundancy Protocol解决内网单机故障的路由协议构建有多个路由器 M
2020-09-13
  目录