Zhi-LVS

LVS简介

  • Linux Virtual Server
  • LVS(ipvs)已被集成到Linux内核中
  • 负载均衡调度器,基于四层的负载均衡,基于IP+端口号
  • 由章文嵩博士主导的开源的负载均衡项目

什么是LVS?

Lvs是一个高伸缩性和高可用的服务,是真实的服务器集群,带有负载均衡器,跑在Linux操作系统上。只能在linux操作系统上去运行,对于用户来讲整个集群是透明的,对于用户访问的时候,它是一个高性能的整体。
lvs是一个负载均衡调度器,可以通过自己算法可以把请求发送到后端的某一个真实的web服务器(RS)。
通过使用这种负载均衡的集群,可以扩展服务器的性能,带宽,提高吞吐量,提高网络数据的处理能力,增强服务的灵活性以及可用性。

为什么使用LVS + Nginx

  • LVS基于四层,工作效率高,基于四层性能会更高,它接受到的请求是可以直接去转发的,对于nginx来讲接受到请求后,还要对请求进行处理,相应的nginx就会有一定的性能损耗,lvs的负载要远远高于Nginx
  • 单个nginx承受不了压力,需要集群,是需要多个nginx共同请求用户的请求,
  • LVS充当nginx集群的调度者,LVS不会处理请求和报文的,所以它的负载能力会更高,
  • nginx接受请求来回,LVS可以只接受不响应

lvs原理:通过ipvs模块来实现的,ipvs可以虚拟出来一个IP地址,用户是通过虚拟IP来进行访问的,访问的请求首先会经过VIP,然后到达负载均衡的调度器(lvs),然后由负载均衡的调度器根据自己的算法,在从RS中挑选出一个节点来响应用户的请求。

LVS的三种模式

LVS模式之NAT

基于网络地址的转换,在这个模式中,lvs充当用户的请求与响应,类似于nginx做负载均衡,如果有并发的场景下,使用NAT是不行的。LVS是处于公网的,用户可用请求、访问,RS处于内部的局域网。

LVS模式之TUN

IP隧道模式,有一个硬性的要求,每一个节点都要有一个计算机网卡,这个网卡用于建立隧道,计算机彼此的通信都会经过隧道,通过建立隧道以后,才能够达到通讯,用户所有的响应不会经过lvs,RS处理完请求之后,会把请求报文直接返回给用户,这个时候,lvs的压力就大大的降低了。通过这种方式,可以大大提升了并发和吞吐量,但是每一个节点都要配置一个网卡,这个RS集群是暴露在公网的。

LVS模式之DR

直接路由模式,RS接受响应的时候,会统一的经过一个路由,通过路由中转以后,在返回给用户,相应的RS集群就不会处于公网了,处于企业的私网。
用户通过虚拟IP来请求LVS,返回的时候也构建一个虚拟IP,当构建一个虚拟IP以后,响应就会经过虚拟IP,在返回给用户。

搭建LVS-DR模式

配置LVS节点与ipvsadm

  1. 服务器与IP约定
    LVS:
    DIP:内网IP
    VIP:虚拟IP

Nginx:作为真实服务器
RIP:内网IP
VIP:虚拟IP 用户处理完数据,通过这个IP返回回去,这个IP和LVS VIP保持一致就可以了

- LVS -台
		vip : 172.16.139.150
		dip : 172.16.139.134
- Nginx -2台(RS)
		vip : 172.16.139.150
		dip : 172.16.139.135   172.16.139.136
  1. 所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:
    systemctl stop NetworkManager
    systemctl disable NetworkManager
    在这里插入图片描述

  2. 构建虚拟IP,和网卡有关系
    进入到网卡配置目录,找到咱们的ens33:
    cd /etc/sysconfig/network-scripts/
    拷贝并且创建子接口:
    cp ifcfg-ens33 ifcfg-ens33:1
    vi ifcfg-ens33:1

    BOOTPROTO=static                                                                                                      
    DEVICE=ens33:1                                                                                                        
    ONBOOT=yes                                                                                                            
    IPADDR=172.16.139.150                                                                                                 
    NETMASK=255.255.255.0 
    

    172.16.139.150就是vip,是提供给外部用户访问的IP地址,道理和nginx+keepalived的vip是一样的。

  3. 重启网络服务,
    service network restart
    查看IP ip addr
    在这里插入图片描述
    虚拟IP150就构建好了

  4. 安装集群管理工具ipvsadm
    yum install ipvsadm
    ipvsadm -Ln
    集群还没有配置,所以列表为空,配置好之后,会有相应的展示
    在这里插入图片描述

  5. 注:
    如果是云服务器:
    虚拟IP建立在网卡上面的,需要成本的,要去付费的
    1.阿里云不支持虚拟IP,需要购买他的负载均衡服务
    2.腾讯云支持虚拟IP,但是需要额外购买,一台节点最大支持10个虚拟IP

为两台RS配置虚拟IP

  1. 构建虚拟IP,用于返回用户数据报文
    进入到网卡配置目录,找到lo(本地环回接口,用户构建虚拟网络子接口),拷贝一份新的随后进行修改:
    cd /etc/sysconfig/network-scripts/
    在这里插入图片描述
    cp ifcfg-lo ifcfg-lo:1

  2. 编辑子接口内容
    vi ifcfg-lo:1

    DEVICE=lo:1                                                                                                           
    IPADDR=172.16.139.150                                                                                                 
    NETMASK=255.255.255.255                                                                                               
    NETWORK=127.0.0.0                                                                                                     
    # If you're having problems with gated making 127.0.0.0/8 a martian,                                                  
    # you can change this to something else (255.255.255.255, for example)                                                
    BROADCAST=127.255.255.255                                                                                             
    ONBOOT=yes                                                                                                            
    NAME=loopback ```
    :wq  保存退出
    
  3. 重启后通过ip addr 查看如下
    ifup lo 或者service network restart 重启网络
    ip addr 在这里插入图片描述

  4. 另外一台RS也做相同的操作

为两台RS配置arp --设置网卡的行为

arp目的是更加精准的响应用户的请求,处理用户的请求,如何去处理用过的request,方式。网卡的行为要做设置

  1. arp-ignore:ARP响应级别(处理请求)
  • 0 : 只有本机配置了ip,就能响应请求
  • 1:请求的目标地址到达对应的网络接口,才会响应请求
  1. arp-announce:ARP通告行为(返回响应)
  • 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通知
  • 1:尽可能避免本网卡与不匹配的目标进行通告
  • 2:只在本网卡通告

配置ARP

  1. 打开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
    
  2. 配置所有网卡默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,lo:

  3. 刷新配置文件:
    sysctl -p

  4. 增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:
    route add -host 172.16.139.150 dev lo:1
    route -n 查看

  5. 防止重启失效,做如下处理,用户开启自启动:
    echo “route add -host 172.16.139.150 dev lo:1” >> /etc/rc.local

使用ipvsadm配置集群规则

(以上150的虚拟IP 在下文中都换成了140)
在lvs节点上:

  1. 创建LVS节点,用户访问的集群调度者
    ipvsadm -A -t 172.16.139.140:80 -s rr

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

    在这里插入图片描述

  2. 创建2台RS真实的服务器
    ipvsadm -a -t 172.16.139.140:80 -r 172.16.139.135:80 -g
    ipvsadm -a -t 172.16.139.140:80 -r 172.16.139.136:80 -g

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

  3. 保存到规则库,否则重启失效
    ipvsadm -S

  4. 检查集群
    ipvsadm -Ln 查看集群列表
    ipvsadm -Ln --stats 查看集群状态

LVS持久化

经过多次的刷新,只访问同一个节点,明明设置的是轮询规则,因为lvs有持久化连接的配置
man ipvsadm 可以查看手册

  1. 重新配置持久化时间:
    ipvsadm -E -t 172.16.139.140:80 -s rr -p 5

    -p :当一个用户发起多次的请求的话,它会转发到同一个RS根据第一次请求,默认为300s,所以不管怎么刷新,访问的都是134,只有时间过了以后,再次进行访问 轮询才会起作用。

  2. 再次查看集群列表,发现多了持久化时间
    在这里插入图片描述

  3. 再次刷新,发现还是没有用,还会有另外一个超时时间
    #设置tcp tcpfin udp的过期时间(一般保存默认) --set tcp tcpfin udp
    ipvsadm --set 1 1 1
    #查看过期时间
    ipvsadm -Ln --timeout
    在这里插入图片描述

如果没有发生轮询就表示已经持久化了,平时使用保存默认设置就可以了

搭建Keepalived + Lvs + Nginx高可用负载均衡

目前的架构一旦Lvs发生故障之后,所有的用户请求都不能向用户提供服务了,所以要搭建双主热备,通过主备切换实现高可用,并且当使用Keepalived之后,还能对RS进行健康检查,如果RS宕机了,就会将宕机的RS踢出集群,如果恢复了之后,会自动加入。

1.主备LVS安装Keepalived
2.配置
keepalived.conf

#全局配置
global_defs {
   #路由id:当前安装keepalived的节点主机标识符,保证全局唯一
   router_id keep_133
}

#基于vrrp的一个实例   就是一个服务器节点
vrrp_instance VI_1 {
    #表示的状态  当前133nginx的主节点 master|backup
    state MASTER
    #当前实例绑定的网卡
    interface ens33
    #虚拟路由ip  保证主备节点一致即可
    virtual_router_id 41
    #权重 谁的优先级高,在master挂掉之后,就成为master
    priority 100
    #主备之间同步检查时间间隔  s
    advert_int 1
    #认证授权密码,防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    #vip
    virtual_ipaddress {
        172.16.139.140
    }
}

#配置集群地址 访问的IP+端口
virtual_server 172.16.139.140 80 {
    #健康检查的时间  单位:s
    delay_loop 6
    #配置负载均衡的算法,默认是轮询
    lb_algo rr
    #设置LVS的模式   NAT|TUN|DR
    lb_kind DR
    #设置会话持久化的时间
    persistence_timeout 5
    #协议 -t
    protocol TCP

    real_server 172.16.139.135 80 {
        #轮询的默认权重配比设置为1
        weight 1
        #设置健康健康
        TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间
            connect_timeout 2
            #重试次数
            nb_get_retry 2
            #间隔时间
            delay_before_retry 3
        }
    }


    real_server 172.16.139.136 80 {
        weight 1
        #设置健康健康
        TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间
            connect_timeout 2
            #重试次数
            nb_get_retry 2
            #间隔时间
            delay_before_retry 3
        }
    }
}

3.清除集群现有的规则,重启Keepalived
ipvsadm -C
systemctl restart keepalived.service
查看集群配置规则
在这里插入图片描述
4. 配置备用节点

#全局配置
global_defs {
   #路由id:当前安装keepalived的节点主机标识符,保证全局唯一
   router_id LVS_137
}

#基于vrrp的一个实例   就是一个服务器节点
vrrp_instance VI_1 {
    #表示的状态  当前133nginx的主节点 master|backup
    state BACKUP
    #当前实例绑定的网卡
    interface ens33
    #虚拟路由ip  保证主备节点一致即可
    virtual_router_id 41
    #权重 谁的优先级高,在master挂掉之后,就成为master
    priority 50
    #主备之间同步检查时间间隔  s
    advert_int 1
    #认证授权密码,防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    #vip
    virtual_ipaddress {
        172.16.139.140
    }
}

#配置集群地址 访问的IP+端口
virtual_server 172.16.139.140 80 {
    #健康检查的时间  单位:s
    delay_loop 6
    #配置负载均衡的算法,默认是轮询
    lb_algo rr
    #设置LVS的模式   NAT|TUN|DR
    lb_kind DR
    #设置会话持久化的时间
    persistence_timeout 5
    #协议 -t
    protocol TCP

    real_server 172.16.139.135 80 {
        #轮询的默认权重配比设置为1
        weight 1
        #设置健康健康
        TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间
            connect_timeout 2
            #重试次数
            nb_get_retry 2
            #间隔时间
            delay_before_retry 3
        }
    }

    real_server 172.16.139.136 80 {
        weight 1
        #设置健康健康
        TCP_CHECK {
            #检查的80端口
            connect_port 80
            #超时时间
            connect_timeout 2
            #重试次数
            nb_get_retry 2
            #间隔时间
            delay_before_retry 3
        }
    }
}

在这里插入图片描述
5. 测试
停止主节点的keepalived,查看备用节点的ip addr,发现虚拟IP绑定到备用节点上,又称为IP飘逸技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的精简博客系统,源码+数据库+毕业论文+视频演示 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前企业对于博客信息的管理和控制,采用人工登记的方式保存相关数据,这种以人力为主的管理模式已然落后。本人结合使用主流的程序开发技术,设计了一款基于Springboot开发的精简博客系统,可以较大地减少人力、财力的损耗,方便相关人员及时更新和保存信息。本系统主要使用B/S开发模式,在idea开发平台上,运用Java语言设计相关的系统功能模块,MySQL数据库管理相关的系统数据信息,SpringBoot框架设计和开发系统功能架构,最后通过使用Tomcat服务器,在浏览器中发布设计的系统,并且完成系统与数据库的交互工作。本文对系统的需求分析、可行性分析、技术支持、功能设计、数据库设计、功能测试等内容做了较为详细的介绍,并且在本文中也展示了系统主要的功能模块设计界面和操作界面,并对其做出了必要的解释说明,方便用户对系统进行操作和使用,以及后期的相关人员对系统进行更新和维护。本系统的实现可以极大地提高企业的工作效率,提升用户的使用体验,因此在现实生活中运用本系统具有很大的使用价值。 关键词:博客管理;Java语言;B/S结构;MySQL数据库
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值