• LVS负载均衡及LVS-NAT模式


    一、集群概述

    1.1 集群的背景

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

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

    集群发展历史:
    垂直扩展:向上扩展,增加单个机器的性能,即升级硬件
    水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题

    1.2 集群的类型

    • 负载均衡集群:LB(loab blance),由多个主机组成,每个主机只承担一部分访问请求。主要靠负载均衡算法来实现
    • 高可用集群:HA(high availiablity),避免SPOF(single point of failure)单点故障。系统当中有一部分组件出现故障,可以保障整个系统继续运行
    • 高性能集群:HPC(hish-performance computing),快速转发,快速响应

    1.3 集群的可靠性指标

    • MTBF:mean time between failure,系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示。MTBF值越高,系统的可靠性越高,出现故障的概率也越小
    • MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示,MTTR值越小,说明系统恢复故障的能力越强
    • A:系统的可靠性指标,A值越高越好

    三者关系:A=MTBF/(MTBF+MTTR)

    停机时间:

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

    计划外停机:运维人员主要关注

    1.4 设计集群的原则

    1、可扩展性:集群要有随时可以添加或者删除设备的能力以及动态地扩缩容
    2、可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换
    3、负载均衡:合理地分配负载,避免单个节点过载,影响整体性能
    4、可维护性:能够方便地进行配置、维护、监控,降低成本
    5、安全性:防止恶意攻击以及数据泄露、丢失
    6、易用性:相关的工作人员可以方便地进入集群,能够快速地开发、部署、测试等等

    二、LVS虚拟服务器

    2.1 LVS概述

    Linux Virtual Server:是一个部署在Linux系统通过内核层面实现负载均衡的软件

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

    LVS集群当中的术语:

    vs(virtual server):lvs服务的逻辑名字,外部访问lvs集群时提供的一个虚拟ip地址和端口
    DS(Directop 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地址

    2.2 LVS访问流程

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

    这种情况下,客户端既不知道请求的真实服务器,也不知道响应的服务器

    2.3 LVS的负载均衡方式

    • NAT(Network Address Translation):地址转换,访问的是vip,进入集群,调度器来选择一台后端的真实服务器,然后转发到真实服务器;响应过程是先到调度器,调度器做地址转换,再把响应发送到客户端。

    • DR(Direct Routing):直接路由模式 ,在LVS集群和后端服务器之间建立一个虚拟接口,将客户端请求直接发送到后端服务器,并将后端服务器返回的响应包通过LVS集群进行转发。

    • TUN(Tunneling):隧道协议, 将客户端请求通过LVS集群中的一个IP地址和端口号发送到后端服务器,同时在LVS集群和后端服务器之间建立一个隧道进行数据传输。

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

    2.4 LVS集群的设置

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

    ipvasdm工具常用选项:

    -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:设置连接保持的时间60s

    三、LVS-NAT部署实操

    1. 实验配置:
    2. 20.0.0.10:调度器内网网卡
    3. 12.0.0.1:调度器外网网卡
    4. 20.0.0.40:nfs共享存储
    5. 20.0.0.61:web集群1
    6. 20.0.0.62:web集群2
    7. 20.0.0.20:访问客户端

     配置nfs服务器

    1. 406162
    2. yum -y install nfs-utils rpcbind
    3. 40
    4. [root@pup4 ~]# cd /opt
    5. [root@pup4 opt]# mkdir pup benet
    6. [root@pup4 opt]# chmod 777 /opt/kgc/ /opt/benet/
    7. [root@pup4 opt]# echo "this is pup" > /opt/pup/index.html
    8. [root@pup4 opt]# echo "this is benet" > /opt/benet/index.html
    9. [root@pup4 opt]# vim /etc/exports
    10. --添加--
    11. /opt/pup 20.0.0.0/24(rw,sync)
    12. /opt/benet 20.0.0.0/24(rw,sync)
    13. [root@pup4 opt]# systemctl restart rpcbind
    14. [root@pup4 opt]# systemctl restart nfs
    15. [root@pup4 opt]# exportfs -rv
    16. exporting 20.0.0.0/24:/opt/benet
    17. exporting 20.0.0.0/24:/opt/pup

     配置web服务器

    1. 61
    2. [root@nginx1 ~]# systemctl restart rpcbind
    3. [root@nginx1 ~]# systemctl restart nfs
    4. [root@nginx1 ~]# showmount -e 20.0.0.40
    5. Export list for 20.0.0.40:
    6. /opt/benet 20.0.0.0/24
    7. /opt/pup 20.0.0.0/24
    8. [root@nginx1 ~]# mount 20.0.0.40:/opt/pup /usr/local/nginx/html
    9. [root@nginx1 ~]# systemctl restart nginx
    10. 62
    11. [root@nginx2 ~]# systemctl restart rpcbind
    12. [root@nginx2 ~]# systemctl restart nfs
    13. [root@nginx2 ~]# showmount -e 20.0.0.40
    14. Export list for 20.0.0.40:
    15. /opt/benet 20.0.0.0/24
    16. /opt/pup 20.0.0.0/24
    17. [root@nginx2 ~]# mount 20.0.0.40:/opt/benet /usr/local/nginx/html
    18. [root@nginx2 ~]# systemctl restart nginx

    1. 6162相同操作:
    2. [root@nginx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
    3. --修改--
    4. GATEWAY=20.0.0.10
    5. #DNS1=218.2.135.1
    6. [root@nginx1 ~]# systemctl restart network

    配置调度器

    1. [root@pup1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
    2. --修改--
    3. #GATEWAY=20.0.0.2
    4. #DNS1=218.2.135.1

    1. [root@pup1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
    2. [root@pup1 network-scripts]# vim ifcfg-ens36

    1. [root@pup1 network-scripts]# systemctl restart network
    2. [root@pup1 network-scripts]# iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 12.0.0.1

    1. [root@pup1 network-scripts]# yum install ipvsadm* -y
    2. [root@pup1 yum.repos.d]# ipvsadm -A -t 12.0.0.1:80 -s rr
    3. [root@pup1 yum.repos.d]# ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.61:80 -m
    4. [root@pup1 yum.repos.d]# ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.62:80 -m
    5. [root@pup1 yum.repos.d]# ipvsadm-save>/etc/sysconfig/ipvsadm
    6. [root@pup1 yum.repos.d]# systemctl restart ipvsadm.service

    1. [root@pup1 yum.repos.d]# vim /etc/sysctl.conf
    2. --添加--
    3. net.ipv4.ip_forward = 1
    4. [root@pup1 yum.repos.d]# sysctl -p
    5. net.ipv4.ip_forward = 1

    访问测试

     20.0.0.20客户端网卡配置:

  • 相关阅读:
    docker安装以及部署
    500报错解决了
    一文搞定注意力机制(Attention)
    使用jdbc技术,在数据库中存储大数据对象(使用字节IO流读取图片等给blob等二进制类型数据赋值)
    数字化转型系列主题:数据中台知识体系
    unet医学肺部ct图分割简单记录
    StringAOP统一问题处理
    代理的匿名级别有哪些?为什么匿名性很重要?
    pnpm、npm、yarn 包管理工具『优劣对比』及『环境迁移』
    人们对区块链的认识开始变得深入和完善,另一条新路径开始衍生
  • 原文地址:https://blog.csdn.net/pupcarrot/article/details/133943696