• lvs负载均衡集群


    目录

    一、集群:

    1、集群的目的:

    2、集群的类型:

    3、集群的可靠性指标:

    4、设计集群时需要考虑的原则:

    二、lvs集群:

    1、lvs集群中的术语:

    2、lvs访问的大致流程:

    三、lvs的负载均衡方式:NAT、DR、TUN

    1、NAT模式

    2、DR模式:直接路由模式

    3、TUN模式:隧道协议

    4、如何设置lvs:

    1、lvs中的调度算法(负载均衡算法)

    三、LVS-NAT模式配置:

    四、LSV-DR模式配置:


    一、集群:

    是未解决某个特定的问题将多个计算机组合起来之后形成一个单系统

    如:nginx四层和七层+动静分离

    1、集群的目的:

    为了解决系统的性能瓶颈

    垂直扩展:向上扩展,增加单个机器的性能。也就是升级硬件。硬件升级是有瓶颈的,水平扩展应运而生

    水平扩展:向外扩展,增加设备,并行的运行多个服务,通过网络和算法

    2、集群的类型:

    负载均衡集群:LB:Load Blance多个主机组成,每个主机只承担一部分访问请求。靠负载均衡算法来实现

    高可用集群:HA:High Availablity 避免SPOF(Single point of failuer)单点故障。系统中有一部分组件出现故障,可以保障整个系统继续运行。

    高可用涉及主和从

    现在都是复杂均衡+高可用,也就是既能满足主从也能满足同步还能实现负载均衡

    HPC:High-Proformance computing 高性能集群,快速转发,快速响应

    3、集群的可靠性指标:

    MTBF:系统在正常运行时间无故障的平均时间,一般用小时或者天数来表示。MTBF值越高,系统的可靠性越高,出现故障的概率也越小。

    MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示。MTTR值越小,系统恢复故障的能力越强

    A:系统的可靠性指标,A值越高越好

    如何计算:A=MTBF/(MTBF+MTTR)

    停机时间:

    计划内停机:指的是预定时间内的维护或者检修时间。是自定义的

    计划外停机:运维人员关注的就是计划外。

    4、设计集群时需要考虑的原则:
    1. 可扩展性:集群要有随时可以添加或者删除设备的能力。动态的扩缩容
    2. 可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换。
    3. 负载均衡:合理和分配负载,避免单个节点过载,影响整体的性能
    4. 可维护性:能够方便的进行配置、部署、维护、监控。降低成本

    以上原则跟运维有关系

    1. 安全性:防止恶意的攻击以及数据泄密,数据丢失。
    2. 易用性:相关的工作人员,可以方便的进入集群,能够快速的开发、部署、测试等等

    二、lvs集群:

    lvs:linux virtual server 是一个部署在linux系统上,通过内核层面实现负载均衡的软件。

    主要作用:多个后端服务器组成一个高可用,高性能,复杂均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器

    阿里的SLB就是基于lvs+keepalived实现的

    1、lvs集群中的术语:

    vs(virtual server):lvs服务的逻辑名称,也就是外部访问lvs集群时提供的一个虚拟IP地址和端口号

    ds(director server):lvs集群中的主服务器,也叫调度器,使整个lvs集群的核心,接受客户端的请求转发到后端RS

    rs(real server):lvs的后端的真实服务器的IP地址,接收到了ds的请求之后,返回响应结果。

    cip(client ip):客户端的IP地址

    vip(virtual ip):对外提供访问的统一的虚拟IP地址

    dip(director IP):调度器在ivs内部使用的IP地址。用于和真实服务器进行通信

    rip:后端真实服务器的IP地址

    2、lvs访问的大致流程:
    1. 客户端访问都是访问VIP
    2. 由调度器ds接收到请求,根据调度算法选择好后端服务器(rs),请求发送给rs
    3. rs真实服务器处理请求并将响应发送到ds
    4. ds调度器把rs的响应包装成自己的响应,发送到客户端

    这种模式下,客户端既不知道请求的真实服务器,也不知道响应的服务器是谁

    三、lvs的负载均衡方式:NAT、DR、TUN

    其中NAT和DR是最常用的方式

    1、NAT模式

    NAT模式是最常用的lvs负载均衡方式之一

    NAT是地址转换的方式

    实验图:

    NAT模式:

    1. 在调度器上配置网卡,一个指内,一个指外
    2. 配置一个可以和公网进行通信的vip(12.0.0.1)
    3. 配置转发策略,如果访问vip就会把请求的数据转发到rs真实服务器

    请求的格式:报文。调度器会修改请求的目标IP地址和端口

    1. rs处理完请求之后响应客户端,先到调度器,调度器再进行地址转换,把内网地址转换成公网地址,响应给用户

    192.168.233.30:80-------调度器---------nat转换----------------12.0.0.10:80-------------客户端

    数据请求进入调度器做的是请求报文中IP地址的修改

    数据响应进入调度器,根据NAT配置进行地址转换

    进入请求报文,出去地址转换

    调度器的内网IP地址和rs真实服务器的IP地址要在同一网段。否则要利用路由器转发

    NAT:对于客户端来说请求地址始终不变,客户端不需要修改任何配置。换发由调度器通过算法完成,后端服务器只管接收响应,也不需要修改任何配置。

    缺点:可能会造成性能损失和单点故障

    2、DR模式:直接路由模式

    请求由调度器完成,但是响应客户端由rs真是服务器直接响应,不需要通过调度器。

    好处是性能高:而且可以配置代理地址vip的高可用。不存在单点故障。

    3、TUN模式:隧道协议

    使用隧道协议把请求转发到后端服务器,需要在后端服务器配置隧道协议

    4、如何设置lvs:

    ipvsadm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群。

    ipvsadm

    -A:添加虚拟服务器

    -D:删除整个虚拟服务器

    -s(小写):指定负载调度算法

    1、lvs中的调度算法(负载均衡算法)

    静态调度(固定调度):

    rr:默认算法轮询

    wrr:加权轮询

    dh:目的地址hash

    sh:原地址hash

    dh和sh都是根据IP地址查找静态hash表,获取需要的真实的rs地址

    动态调度:

    lc:最小连接数调度

    wlc:加权最小连接数调度

    权重高的转发的就多,为了避免性能瓶颈,在跟上最小连接数分配,可以把请求往连接数量较小的服务器继续转发

    lblc:基于地址的最小连接数调度

    将来自同一个目的地址的请求分配给rs,如果这台服务器尚未满负荷,就会把请求分配给连接数最小的rs,而且在下一次转发时,优先考虑这rs

    -a:添加真实服务器

    -d:删除真实服务器

    -t:指定vip地址的端口号

    -r:指定rid(real server ip)的端口号

    -m:表示使用的是nat模式

    -g;表示使用DR模式

    -i:表示使用隧道模式

    -w:设置真实服务器的权重

    -p 60:设定链接保持的时间,单位秒(默认不保持需要指定)

    -ln:以数字以及列表的形式查看lvs的配置信息

    三、LVS-NAT模式配置:

    for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

    nat模式的部署方式:

    负载调度器:配置双网卡:20.0.0.21(内网) 12.0.0.1(ens36)

    两台后端web真实服务器:20.0.0.22   20.0.0.23

    一台NFS共享服务器:20.0.0.3010

    客户端:20.0.0.40

    先关防火墙:

    配置共享服务:20.0.0.30

    安装软件

    yum install nfs-utils rpcbind -y #安装nfs服务

    vim /etc/exports

    #设置共享策略

    exportfs -rv   #发布服务

    启动NFS网络共享时注意:要先启动网络再启动服务

    配置两个后端服务器RS1、RS2:

    先检查目录是否共享:

    showmount -e NFS主机ip

    安装nginx

    之后挂载nginx访问目录

    两个共享目录分别挂载后端服务器访问目录:

    打开两边nginx服务

    用curl访问一下看是否正常

    配置RS1、RS2网卡

    将DNS解析注释

    内网网关要和调度器的内网网卡ens33的IP地址一样

    (路由器离终端最近的点,IP地址配置网段的网关)

    配置完网卡之后一定要重启网卡

    systemctl restart network

    调度器配置:

    配置网卡:

    网卡的IP地址要和距离最近的网段的网关一样

    先ifconfig查看新建的网卡名(ens36),再去网卡配置

    cd /etc/sysconfig/network-scripts

    cp -a ifcfg-ens33 ifcfg-ens36

    重启网卡

    配置防火墙策略:

    先安装iptables和ipvsadm:

    yum -y install iptables-services.x86_64 iptables

    yum -y install ipvsadm*

    用iptables配置nat转换:

    iptables -nL -t nat

    #查看策略

    iptables -t nat -F

    #清空nat策略

    iptables -t nat -A POSTROUTING -s 192.168.233.0/24 -o ens36 -j SNAT --to 12.0.0.1

    #添加策略

    iptables -nL -t nat

    #查看策略

    modprobe ip_vs

    cat /proc/net/ip_vs

    #加载内核模块

    配置ipvsadm:

    ipvsadm -A -t 12.0.0.1:80 -s rr

    #指定IP地址 外网的入口  -s rr  轮询

     ipvsadm -a -t 12.0.0.1:80 -r 192.168.233.61:80 -m

    #先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式,两个都配置

    ipvsadm -a -t 12.0.0.1:80 -r 192.168.233.62:80 -m

    ipvsadm -ln

    #查看配置情况

    ipvsadm-save >/etc/sysconfig/ipvsadm

    #配置完 保存配置文件

    systemctl restart ipvsadm.service

    #重启服务

    vim /etc/sysctl.conf打开转发功能

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

    #开启服务器的转发功能

    sysctl -p刷新

    打开新的机器,做客户端

    重启网卡

    虚拟机浏览器访问

    12.0.0.1

    四、LSV-DR模式配置:

    lvs-DR模式:是最常用的lvs负载方式,DR DIRECT ROUTING 直接路由模式

    负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果由后端服务器直接转发给客户端,不需要经过调度器处理,减轻lvs调度器的负担,提高性能和稳定性

    lvs-DR模式的工作原理:

    是根据mac地址进行转发数据,是二层转发

    1. 客户端发送请求到vip虚拟ip地址
    2. lvs调度器接受请求之后根据算法选择一台后端的真实服务器,把请求转发到后端RS,请求报文的目录mac地址修改成后端真实服务器的mac地址,然后转发
    3. 后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的的mac地址修改成客户端的mac地址。直接把响应报文转发到客户端
    4. 调度器,后端真实服务器都有vip地址,调度器的地址和后端真实服务器的地址在同一网段。

    vip的作用:代理

    1. 标识后端的真实服务器
    2. 保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器
    3. 实现高可用

    DR模式的特点:

    1. 调度器的ip和真实服务器的ip必须在同一个物理网络(网段)中
    2. 真实服务器的IP地址可以是私有地址,也可以是公网地址,如果配置公网就可以通过互联网直接访问RIP
    3. 调度器只作为访问入口,但是不作为网关。要把服务器的转发功能关闭。
    4. 后端真实服务器的网关也不能指向调度器,真实服务器的数据包不允许经过调度器。
    5. 后端真实服务器上,基于LO回环接口配置vip的IP地址

    ARP协议:(网络层协议)将ip地址解析为mac地址。

    ARP请求:主机A和主机B

    ARP核心:解决局域网内部的通信。IP地址和mac地址之间的映射

    DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现局域网内部通信

    问题一:

    由于调度器和后端服务器都有相同的vip地址,导致响应冲突,ARP通信紊乱。

    vip100和RIP 20会冲突,不知道响应哪个

    解决方案:

    要对后端真实服务器进行处理,真实服务器不响应针对vip的ARP请求

    vip地址使用LO的虚拟地址:arp_ignore=1

    后端真实服务器只响应目的ip为本地ip,也就是RIP,后端服务器的真实IP地址。ens33网卡提供的地址。

    问题二:

    返回报文使用的源地址还是vip地址100,调度器也是vip地址100。怎么把响应返回到客户端不经过调度器呢?

    解决方案:

    要对后端真实服务器做一个内核参数的优化:arp_announce=2  系统不使用ip数据包的源地址来设置ARP的请求,而是用真实的物理网卡地址。

    发送:12.0.0.10(cip)----20.0.0.100(vip)---20.0.0.20(RIP)

    返回:20.0.0.20(RIP)----12.0.0.10(cip)

    实验过程:

    如何实现DR模式的负载均衡:

    四台:

    vip虚拟地址:20.0.0.100

    调度器:20.0.0.22

    后端服务器web集群:

    web集群1:20.0.0.21

    web集群:20.0.0.23

    nfs机器:20.0.0.30

    客户端:随机选择

    先关闭防火墙

    调度器:

    现在调度器上加载ipvs内核:

    安装ipvsadm

    创建虚拟网卡:

    ifconfig ens33:0 20.0.0.100/24

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 0

    net.ipv4.conf.all.send_redirects = 0

    net.ipv4.conf.default.send_redirects = 0

    net.ipv4.conf.ens33.send_redirects = 0

    sysctl -p

    调度器的内核优化

    net.ipv4.ip_forward = 0

    #关闭服务器作为网关的转发功能

    net.ipv4.conf.all.send_redirects = 0

    #控制是否发送ICMP的重定向消息,禁止重定向

    net.ipv4.conf.default.send_redirects = 0

    #禁止默认网络接口,也就是调度器网卡,发送icmp重定向消息

    net.ipv4.conf.ens33.send_redirects = 0

    #指明网卡设备,ens33不发送重定向消息

    ipvsadm:

    nfs服务端共享服务:

    systemctl start rpcbind

    systemctl start nfs

    exportfs -rv

    去两个后端服务器:

    安装nginx

    cd /etc/sysconfig/network-scripts/

    cp ifcfg-lo ifcfg-lo:0

    vim ifcfg-lo ifcfg-lo:0

    DEVICE=lo:0

    IPADDR=20.0.0.100

    NETMASK=255.255.255.255

    ONBOOT=yes

    重启网卡

    ifup lo:0

    route add -host 20.0.0.100 dev lo:0

    把vip的地址绑定到lo:0,作为整个lvs的vip地址。标识,告诉调度器进行转发请求的IP地址寻址

    vim /etc/sysctl.conf

    只有请求到后端服务器真实ip的响应才会接收,其他的一律不接受

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

    ~                                     

    net.ipv4.conf.lo.arp_ignore = 1

    #设置lo接口忽略来自任何接口的ARP请求

    net.ipv4.conf.lo.arp_announce = 2

    设置lo接口仅会响应本地的IP地址,其他的接口ARP请求,全部忽略

    net.ipv4.conf.all.arp_ignore = 1

    所有接口忽略来自任何接口的ARP请求

    net.ipv4.conf.all.arp_announce = 2

    # 所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略

    sysctl -p

    重启

    两边后端服务器操作相同,nginx都要启动

    用客户机访问vip20.0.0.100

    DR模式:vip只做表示代理和转发请求到后端服务器还有高可用,其他一律没用

    总结:

    DR模式核心:响应客户端是后端真实服务器来完成,不需要经过调度器二次处理

    vip地址:调度器和后端服务器都要有vip地址。

    作用:

    1、暴露访问地址

    2、调度器转发请求的标识

    3、调度器和后端服务器之间进行通信

    4、基于DR模式的高可用

    只有以上四个作用,其他所有的请求和响应都被禁用。

    lvs的负载均衡算法设置:

    ipvsadm -In

    IP Virtual Server version 1.2.1(size=4096)

    Prot LocalAddress:Port Scheduler Flags

    -> RemoteAddress:Port Forward Weight ActiveConn InActConn

    TCP 192.168.233.100:80 wrr

    -> 192.168.233.20:80 Route 1   1  0      0

    -> 192.168.233.30:80 Route 1 1  0 0

    TCP 192.168.233.100:80 wrr

    表示VIP地址,wrr 负载均衡器的调度算法

    -> 192.168.233.20:80 Route 1  0 0

    -> 192.168.233.30:80 Route 1 0 0

    指向后端的真实服务器

    Forward: 负载均衡算法和负载均衡方式。route 就是DR模式

    ACtiveConn:活跃连接,表示调度器正在处理的活动连接数,表示这些链接正在进行传输数据或者正在进行交互。

    InActConn:表示当前处于非活动状态的连接数。已建立连接但是目前没有数据传输,第二个

    可以修改VIP的调度算法:

    ipvsadm -E -t 192.168.233.100:80 -s wrr

    修改策略的轮询权重:

    ipvsadm -e -t 192.168.233.100:80 -r 192.168.233,30:80 -w

    换负载均衡算法:

    修改完之后要先保存再重启

    总结题:

    1、lvs负载均衡的工作方式:

    三种:NAT、DR、TUN最常用的就是DR模式

    NAT模式:

    优点:配置简单

    缺点:性能瓶颈

    真实服务器的要求:所有都可以作为真实服务器

    后端服务器支持的网络模式:私网

    能配置的真实服务器的数量:最多10-20台,超过性能下降

    DR模式:

    优点:性能最好(响应不走调度器直接到客户端)

    缺点:调度服务器和后端真实服务器不能夸网段

    真实服务器的要求:NO ARP(请求只能到真实服务器)

    后端服务器支持网络:公网、私网

    真实服务器数量:100台

    TUN 公司不用(需要VPN隧道,要钱)

    2、lvs调度器中常用的算法(负载均衡策略):

    rr

    wrr

    dh

    sh

    wlc

    lc

    lblc

  • 相关阅读:
    canvas基础简单易懂教程(完结,多图)
    C++之生成key-value键值三种方式(一百九十)
    cmake中配置了工具链,命令行工具可以找到,但是clion中找不到
    前端知识积累
    江门車馬炮汽车金融中心 11月11日开张
    nginx+websphere sendRedirect 端口错误
    day27--Java集合10
    小熊听书项目的详细介绍
    第二十九章 目标检测中的测试模型评价指标(车道线感知)
    UNITY与安卓⭐二、AndroidStudio中关于通讯的使用教学
  • 原文地址:https://blog.csdn.net/koeda1/article/details/134019462