• LVS集群


    集群:nginx四层和七层+动静分离

    为解决某个特定问题将多个计算机组合起来形成一个单系统

    集群的目的就是为了解决系统的性能瓶颈

    垂直扩展:向上扩展,增加单个机器的性能,升级硬件。硬件升级是有瓶颈的

    水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题

    集群的类型:

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

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

    主从——同步(某些特定的服务需要)——负载均衡

    HPC:high-performance computing 快速转发,快速响应

    集群的可靠性指标:

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

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

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

    A=MTBF/(MTBF+MTTR)

    集群响应时间

    99.9% 1年=365天=8760小时 99.9=8760*0.1%=8.76小时

    停机时间(故障时间):

    计划内停机:预定时间内的维护或者检修时间

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

    发版期

    设计集群时需要考虑的一些原则:

    1.可扩展性:集群要有随时可以添加或者删除设备的能力。动态的扩缩容

    2.可靠性:在集群中如果有节点发生故障,可以快速检测并且自动切换

    3.负载均衡:合理的分配负载,避免单个节点过载,影响整体性能。

    4.可维护性:能够方便的进行配置,部署,维护,监控,降低成本

    5.安全性:防止恶意的攻击,以及数据泄密和数据丢失

    6.易用性:相关的工作人员,可以方便的进入集群,能够快速的开发、部署、测试等等

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

    开发者:章文嵩 发起的开源项目

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

    阿里的SLB server load balance 基于lvs+keepalived实现

    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 调度器在lvs内部使用的ip地址,用于和真实服务器进行通信

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

    lvs访问的大致流程:

    1. 客户端访问都是访问vip
    2. DS接受到请求,根据调度算法选择好后端服务器(rs)请求发送给rs
    3. RS处理请求并将响应发送到DS
    4. DS把RS的响应包装成自己响应,发送到客户端

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

    lvs的负载均衡方式:

    NAT DR TUN

    其中NAT和DR最常用的方式

    NAT模式

    是最常用的lvs负载方式之一

    在NAT方式下,LVS会将来自客户端的请求报文的目标IP地址和端口修改为LVS的IP地址和端口,
    并将报文转发至后端的服务器。
    后端服务器返回的报文经过LVS后,LVS会将目标IP地址和端口修改为原始的客户端IP地址和端口,
    并将报文返回给客户端。

    这种方式的好处是,对客户端来说,请求的目标地址始终不变,因此无需修改客户端的配置。
    而且,由于LVS会修改请求和响应的目标地址和端口,因此后端服务器无需修改任何配置。
    同时,这种方式也存在一些缺点,比如性能损失和单点故障的问题。

    地址转换

    NAT模式:

    1.在调度器上配置双网卡,一个指内,一个指外

    2.配置一个可以和公网进行通信的VIP

    3.配置转发策略,如果访问VIP,就会把请求的数据转发到后台的RS

    请求的格式是报文,调度器会修改请求的目标ip地址和端口

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

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

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

    调度器的内网ip地址和真实服务器的ip地址要在同一网段

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

    性能损失和单点故障

    NAT模式的工作流程:

    客户端发送请求:当客户端发送请求时,请求首先到达负载均衡器。

    负载均衡器接收请求:负载均衡器接收到请求后,根据预先配置的负载均衡算法(如轮询、加权轮询、最小连接数等)
    选择一个后端服务器来处理该请求。

    源地址转换:负载均衡器通过NAT技术将请求的源地址更改为自己的地址,并将请求转发给被选中的后端服务器。

    后端服务器处理请求:被选中的后端服务器接收到请求后进行处理,并生成响应。

    目的地址转换:负载均衡器接收到后端服务器的响应后,将响应的目的地址更改为原始客户端的地址,并将响应发送回客户端。

    在这个过程中,LVS服务器使用了iptables中的nat表的prerouting链来实现地址转换,
    将请求报文和响应报文中的IP地址进行了改写,从而实现了负载均衡。
     

    NAT实验:

    Nat模式的部署方式:

    负载调度器:

    配置双网卡:192.168.233.10(内网) 12.0.0.1(ens36)

    二台后端web真实服务器:192.168.233.20 192.168.233.30

    一台NFS共享服务器:192.168.233.40

    客户端:192.168.120.70

    先安装ipvsadm*软件

    创建虚拟服务器

    查看策略

    ipvsadm -ln

    ipvsadm -A -t 12.0.0.1:80 -s rr

    创建VIP地址 -s指定调度算法 rr

    添加服务器节点

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

    删除服务器节点

    ipvsadm -d -r 192.168.120.30:80 -t 12.0.0.1:80

    删除整个虚拟服务器

    ipvsadm -D -t 12.0.0.1:80

    以上命令操作完必须先保存才能刷新否则会报错

    保存策略

    ipvsadm-save >/etc/sysconfig/ipvsadm

    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

    客户端:192.168.120.10

    NFS服务器:192.168.120.70

    两台后端web真实服务器:192.168.120.30 192.168.120.40

    配置NFS服务器

    关闭防火墙

    systemctl stop firewalld.service

    setenforce 0

    安装nfs软件

     yum install nfs-utils rpcbind -y

    在opt目录下创建两个目录

    mkdir /opt/kgc /opt/benet  

    赋权

    chmod 777 /opt/kgc/ /opt/benet/

    创建站点文件

    echo 'this is kgc !' > /opt/kgc/index.html

    echo 'this is benet !' > /opt/benet/index.html

    设置共享策略

    vim /etc/exports

    /opt/kgc 192.168.120.0/24(rw,sync)

    /opt/benet 192.168.120.0/24(rw,sync)

    发布服务

    exportfs -rv

    Web服务器30:

    关闭防火墙

    systemctl stop firewalld.service

    setenforce 0

    安装nfs服务

     yum install nfs-utils rpcbind -y

    接收服务

    showmount -e 192.168.120.70

    挂载

    mount 192.168.120.70:/opt/kgc /usr/local/nginx/html/

    刷新

    systemctl restart nginx.service

    修改网卡

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    Web服务器40:

    关闭防火墙

    systemctl stop firewalld.service

    setenforce 0

    安装nfs服务

     yum install nfs-utils rpcbind -y

    接收服务

    showmount -e 192.168.120.70

    挂载

    mount 192.168.120.70:/opt/benet /usr/local/nginx/html/

    刷新

    systemctl restart nginx.service

    修改网卡

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    调度器配置:

    关闭防火墙

    systemctl stop firewalld.service

    setenforce 0

    加载内核模块

    modprobe ip_vs

    cat /proc/net/ip_vs

    清空策略

    iptables -F

    添加策略

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

    查看策略

    iptables -nL -t nat

    安装软件:

    yum install ipvsadm* -y

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

    ipvsadm -A -t 12.0.0.1:80 -s rr

    先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式

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

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

    保存配置文件

    ipvsadm-save >/etc/sysconfig/ipvsadm

    刷新

    systemctl restart ipvsadm.service

    先添加一个新网卡

    配置网卡

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    vim /etc/sysconfig/network-scripts/ifcfg-ens36

    刷新

    systemctl restart network

    开启服务器的转发功能

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

    即刻生效

    sysctl -p

    结果显示:

    DR:直接路由模式,请求由调度器完成,但是响应客户端由真实服务器直接响应,不需要通过调度器。

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

    LVS-DR模式的工作原理:

    1.客户端发送请求到vip

    2. LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求的报文的目的MAC地址,修改成后端真实服务器的MAC地址,转发。

    3.后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址,直接把响应报文转发到客户端

    4.调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段

    DR模式的特点:

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

    ARP协议:网络层协议,将IP地址解析为物理mac地址。

    ARP请求:主机A和主机B

    ARP解决局域网内部的通信,IP地址和MAC地址映射

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

    问题1:

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

    对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求

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

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

    问题2:

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

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

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

    20为调度器

    25web集群1

    26web集群2

    30 nfs

    VIP地址20.0.0.100

    客户端随机

    实验流程:

    关闭四台机器的防火墙和安全机制

    配置20调度器主机

    modprobe ip_vs
    yum -y install ipvsadm
    ifconfig ens33:0 20.0.0.100/24
    #配置调度器vip地址
    vim /etc/sysctl.conf
    #调度器的内核优化
    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不发送重定向消息

    sysctl -p 
    #立即生效
    ipvsadm -A -t 20.0.0.100:80 -s rr 
    ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.25:80 -g
    ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.26:80 -g
    #设置配置策略
    ipvsadm-save > /etc/sysconfig/ipvsadm
    #保存
    systemctl restart ipvsadm

    配置30nfs主机

    mkdir /opt/kgc
    mkdir /opt/benet
    vim /etc/exports
    /opt/kgc 20.0.0.0/24(rw,sync)
    /opt/benet 20.0.0.0/24(rw,sync)
    chmod 777 kgc benet

    echo "this is kgc" > kgc/index.html
    echo "this is benet" > benet/index.html
    #页面创建完毕

    到25和26设置访问页面

    配置25 web1主机

    #启动nginx和rpcbind和nfs
    showmont -e 20.0.0.30
    mount 20.0.0.30:/opt/kgc /usr/local/nginx/html/
    #挂载

    cd /etc/sysconfig/network-scripts/
    cp ifcfg-lo ifcfg-lo:0 
    vim ifcfg-lo

    route add -host 20.0.0.100 dev lo:0
    #把vip的地址绑定到lo:0 作为lvs的vip地址。标识。告诉调度器,进行转发请求的ip地址寻址。
    vim ets/sysctl.conf
    #内核优化
    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

    配置26

    配置相同

    重启nginx服务

    mount 20.0.0.40:/opt/benet /usr/local/nginx/html   #挂载

    cp ifcfg-lo ifcfg-lo:0

    vim ifcfg-lo:0

    ifup ifcfg-lo:0

    内核优化
    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  
    #立即生效

    使用客户机40访问

    DR模式总结
    DR模式的核心:响应客户端由后端的真实服务器完成。不需要经过调度器完成。

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

    vip地址的作用: 1、 暴露访问地址 2、 调度器转发请求的标识 3、 调度器和后端服务器之间进行vip地址进行通信 4、 高可用(DR模式)

    其他所有的请求和响应都被禁用。
     

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

    设置lvs:

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

    -A:添加虚拟服务器

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

    -s:指定负载调度的算法:rr轮询

                           wrr加权轮询

                           dh目的地址hash 根据IP地址查找静态hash表,获取需要真

                               实的RS的地址

                           sh原地址hash

    动态调度:

    lc:最小连接数调度

    wlc:加权最小连接数调度  

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

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

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

    -a:添加真实服务器

    -d:删除真实服务器

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

    -r:指定RIP的端口号

    -m:表示使用nat模式

    -g:表示使用DR模式

    -i:表示使用TUN模式

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

    -p 60:设置连接保持的时间60秒(默认不带)

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

    上述总结:
    集群的扩展方式:水平扩展

    集群的类型:负载均衡和高可用

    集群的可靠性指标:MTBF MTTR 最低也是99%

    设计集群的原则:可靠性 可拓展性 负载均衡

    非计划外停机时间:主要的工作职责排障和解决问题

    LVS集群中的术语:vs -- VIP DS --- DIP RS --- RIP

    访问流程

    LVS负载均衡的方式:NAT模式 DR模式

    1、 LVS的负载均衡的工作方式

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

    NAT模式优点:配置简单。 缺点:性能瓶颈。 真实服务器:ANY。 支持网络模式:私网。 后端真实服务器数量:low(最多10-20台)

    DR模式的优点:性能最好。 缺点:调度服务器和后端真实服务器不能跨网段的得在一个网段之间。 真实服务器:NOARP(请求只能到真实服务器) 支持网络模式:后端服务器既可以是私网也可以是公网 后端真实服务器数量:100台

    TUN 公司不用

    2、 LVS调度器中常用的算法

    负载均衡策略:rr wrr dh sh

    动态调度:wlc lc lb lc

    工作原理:NAT和DR的工作原理

    NAT的工作原理总结:

    1、 在调度器上配置双网卡,一个指内,一个指外

    2、 配置一个可以和公网进行通信的VIP

    3、 通过配置转发策略,访问公网的VIP会把请求转发到后台的RS。请求的格式是报文。调度器会修改请求的目标IP地址和端口(12.0.0.1:80 20.0.0.20:80)

    4、 RS处理完请求后响应客户端,先到调度器,调度器进行地址转换,把内网地址转换成公网地址。最后响应调度器给用户。 20.0.0.20:80 ---- 调度器 ---- nat地址转换 ----- 12.0.0.1:80 ---- 客户端

    客户端进入是改请求报文。出去是地址转换 转发由调度器通过算法来完成,后端服务器只管接受响应。也不需要修改任何配置。

    DR的工作原理总结:

    1、 客户端发送请求到vip

    2、 LVS的调度器接受请求后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求报文的目的MAC地址。修改成后端真实服务器的MAC地址。然后转发。

    3、 后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改。直接把响应报文转发到客户端。

    4、 调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。

    客户端进入时请求调度器的VIP地址,通过LVS交换器配置的算法把请求的目的MAC地址,修改为后台的真实服务器的MAC地址。实现转发。后端服务器处理完成后,会修改响应报文中的目的MAC地址,之间转发到客户端。

     

  • 相关阅读:
    【源码+项目部署】Java项目实战_Java进销存管理系统_Java项目开发_Java开源项目_Java课程设计_Java毕业设计_Java课设项目
    国家网络安全周 | 金融日,一起 get金融行业数据安全
    BrakTooth安全漏洞可劫持蓝牙设备
    pytorch学习神经网络的搭建
    Java学习:NIO<一>
    阿里家代码规范学习笔记
    流式响应Web小工具实践
    消息队列实现进程之间通信方式
    Selenium基础:自动化你的网页交互
    2023年辽宁省数学建模竞赛C题用科幻思维研究智能化战争指挥决策
  • 原文地址:https://blog.csdn.net/DDYYmmm/article/details/134495392