LVS和keepalived基础笔记——简单明了

LVS

1、基础
  1. LVS。Linux虚拟服务器(Linux Virtual Server)是一个基于四层、具有强大性能的反向代理服务器。

    LVS通过工作于内核的ipvs模块来实现功能,其主要工作于netfilter 的INPUT链上。
    而用户需要对ipvs进行操作配置则需要使用ipvsadm这个工具。
    ipvsadm主要用于设置lvs模型、调度方式以及指定后端主机。

    在这里插入图片描述

  2. 常用集群软硬件

    软件:lvs,keepalived,haproxy,nginx,apache,heartbeat

    硬件:F5,Netscaler,Radware,A10等

  3. LVS的优点和缺点

    LVS的优点是:
    1、抗负载能力强、4层分发之用,不握手。
    2、配置性比较低,错误率少
    3、工作稳定,自身有完整的双机热备方案,最多的还是LVS/DR+Keepalived。
    
    LVS的缺点是:
    1、软件本身不支持正则表达式处理,不能做动静分离;
    2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了
    
  4. ipvs工作于内核空间的INPUT链上,当收到用户请求某集群服务时,经过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWORD链,将报文转发至后端真实提供服务的主机。

    img

  5. 学习网址

    https://blog.youkuaiyun.com/u010563833/article/details/78047036
    https://www.cnblogs.com/zhuimengle/p/5954170.html
    https://blog.youkuaiyun.com/weixin_44214830/article/details/89344829
    https://www.jianshu.com/p/8a61de3f8be9
    https://www.cnblogs.com/gaoxu387/p/7941381.html
    
2、调度模式

​ 工作模式

  1. LVS-NAT

    网络地址转换,Network Address Transform。

    关键点是:1、真实服务器的默认网关配置为LVS均衡负载服务器。

    过程:CIP-VIP,CIP-RIP,RIP-CIP,VIP-CIP
    在这里插入图片描述

  2. LVS-DR

    直接路由,Director Routing

    关键点是:1、mac欺骗,mac设置为某真实服务器。2、真实服务器配置VIP,对外不可见,对内可见。

    过程:CIP-VIP、CIP-VIP(mac为某真实服务器的),VIP-CIP
    在这里插入图片描述

  3. TUN模式

    隧道模式,Tunnel。

    关键点:1、IP背着IP,外层包含内层真实的ip。2、真实服务器设置vip。

    过程:cip-vip,dip-rip(cip-vip),真实服务器解开外层ip,再返回vip-cip
    在这里插入图片描述

  4. LVS-FULLNAT

    FULLNAT原理: FULLNAT转发数据包是类似NAT模式,IN和OUT数据包都是经过LVS;唯一的区别:后端RealServer 或者交换机不需要做任何配置。

    关键点是:后端RealServer 或者交换机不需要做任何配置。

    过程:cip-vip,lip-rip,rip-lip,vip-cip
    在这里插入图片描述

  5. 四种模式的优缺点

    LVS-NAT:
    	优点:支持端口映射,适合流量较小的场景。
    	缺点,请求和响应报文都经过负载均衡服务器LB,lb性能瓶颈。
    LVS-DR:
    	优点:响应报文不经由Director。性能最高。
    	缺点:不能端口映射,必须统一局域网,下一跳mac地址限制。
    LVS-TUN:
    	优点:公网地址
    	缺点:不能端口映射,隧道技术会额外花费性能,加解密等,增大开销。
    FULLNAT:
    	优点:真实服务器可以不用配置默认网关为LB
    	缺点,RealServer无法获得用户IP;
    
3、调用算法

​ 一共有10种,默认是加权最少链接 wlc,它可以知道数据包的数据,记录有多少正在连接等。

​ 还有其他,只需要记住轮询,加权轮询,最少连接,加权最少连接,还有目标地址、源地址散列算法。

​ 4种静态的

  1. 轮循调度 rr

    均等地对待每一台服务器,不管服务器上的实际连接数和系统负载

  2. 加权轮调 wrr

    调度器可以自动问询真实服务器的负载情况,并动态调整权值

  3. 目标地址散列调度算法 dh

    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器

  4. 源地址散列调度算法 sh

    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

​ 6种静态的

  1. 最少链接 lc

    动态地将网络请求调度到已建立的连接数最少的服务器上。如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡

  2. 加权最少链接 wlc

    调度器可以自动问询真实服务器的负载情况,并动态调整权值带权重的谁不干活就给谁分配,机器配置好的权重高

  3. 最少期望延迟 sed

    不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙

  4. 永不排队 nq

    无需队列,如果有realserver的连接数为0就直接分配过去

  5. 基于局部性的最少连接调度算法 lblc

    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

  6. 复杂的基于局部性最少的连接算法 lblcr

    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

4、keepalived
  1. Keepalived是Linux下一个轻量级别的高可用解决方案,高可用(High Avalilability,HA)

  2. VRRP协议,虚拟路由冗余协议,工作方式如下:

    Master角色的服务器(虚拟路由器),通过IP多播方式发送一直发送心跳包(VRRP数据包),

    处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态

    BACKUP服务器会对比优先级priority,根据是否为抢占策略判断是否自己切换为Master。

    或者BACKUP服务器在约定时间内就无法收到Master发过来的信息,于 就认定Master出现故障,优先级最高的BACKUP将称为新的MASTER,切换速度极快。

  3. 配置

    主要有2点需要注意:

    配置实例的时候,确定本服务器是主服务器(master)还是从服务器(BACKUP),同时配置自己的优先级(priority)。最后配置VIP和VMCA。

    配置VIP对应的真实服务器集群时,可以配置调用模式和调用算法,然后设置真实地址和健康检查方法。

    配置参考地址

    https://www.cnblogs.com/rexcheny/p/10778567.html

    # 全局配置
    global_defs {
       # 邮件通知信息
       notification_email {
         # 定义收件人
         acassen@firewall.loc
       }
       # 定义发件人
       notification_email_from Alexandre.Cassen@firewall.loc
       # SMTP服务器地址
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       # 路由器标识,一般不用改,也可以写成每个主机自己的主机名
       router_id LVS_DEVEL
       # VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值
       vrrp_mcast_group4 224.0.0.18
       vrrp_mcast_group6 ff02::12
    }
    
    # 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换
    vrrp_script SCRIPT_NAME {
    
    }
    
    # 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
    vrrp_instance VI_1 {
        # 定义初始状态,可以是MASTER或者BACKUP
        state MASTER
        # 工作接口,通告选举使用哪个接口进行
        interface ens33
        # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
        # ID还是虚拟MAC最后一段地址的信息,取值范围0-255
        virtual_router_id 51
        # 使用哪个虚拟MAC地址
        use_vmac XX:XX:XX:XX:XX
        # 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
        track_interface {
            eth0
            ens33
        }
        # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
        priority 100
        # 通告频率,单位为秒
        advert_int 1
        # 通信认证机制,这里是明文认证还有一种是加密认证
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        # 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
        virtual_ipaddress {
            # IP/掩码 dev 配置在哪个网卡
            10.10.10.2/24 dev eth1
            # IP/掩码 dev 配置在哪个网卡的哪个别名上
            192.168.200.17/24 dev label eth1:1
        }
        # 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
        virtual_routes {
            192.168.110.0/24 dev eth2
        }
        # 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
        nopreempt|preempt
        # 如果是抢占默认则可以设置等多久再抢占,默认5分钟
        preempt delay 300
        # 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
        track_script {
    
        }
        # 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
        notify_master ""
        notify_backup ""
        notify_fault ""
    }
    
    # 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
    # 所以通过这里就可以看出来keepalive天生就是为ipvs而设计的
    virtual_server 10.10.10.2 1358 {
        delay_loop 6
        # 算法
        lb_algo rr|wrr|lc|wlc|lblc|sh|dh 
        # LVS的模式
        lb_kind NAT|DR|TUN
        # 子网掩码,这个掩码是VIP的掩码
        nat_mask 255.255.255.0
        # 持久连接超时时间
        persistence_timeout 50
        # 定义协议
        protocol TCP
        # 如果后端应用服务器都不可用,就会定向到那个服务器上
        sorry_server 192.168.200.200 1358
    
        # 后端应用服务器 IP PORT
        real_server 192.168.200.2 1358 {
            # 权重
            weight 1
            # MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是
            # 针对应用服务器做健康检查的方法
            MISC_CHECK {}
            # 用于检查SMTP服务器的
            SMTP_CHEKC {}
    
            # 如果应用服务器不是WEB服务器,就用TCP_CHECK检查
            TCP_CHECK {
              # 向哪一个端口检查,如果不指定默认使用上面定义的端口
              connect_port <PORT>
              # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
              bindto <IP>
              # 连接超时时间
              connect_timeout 3
            }
    
            # 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样
            SSL_GET {}
    
            # 应用服务器UP或者DOWN,就执行那个脚本
            notify_up "这里写的是路径,如果脚本后有参数,整体路径+参数引起来"
            notify_down "/PATH/SCRIPTS.sh 参数"
    
            # 使用HTTP_GET方法去检查
            HTTP_GET {
                # 检测URL
                url { 
                  # 具体检测哪一个URL
                  path /testurl/test.jsp
                  # 检测内容的哈希值
                  digest 640205b7b0fc66c1ea91c463fac6334d
                  # 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
                  status_code 200
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                # 向哪一个端口检查,如果不指定默认使用上面定义的端口
                connect_port <PORT>
                # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
                bindto <IP>
                # 连接超时时间
                connect_timeout 3
                # 尝试次数
                nb_get_retry 3
                # 每次尝试之间间隔几秒
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.3 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    

以上就是lvs的相关理论基础,喜欢就点个赞呗~~~
【完】

正在去BAT的路上修行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值