精华内容
下载资源
问答
  • LVS四层负载均衡

    2019-09-18 06:54:03
    LVS四层负载均衡 IP报文不经过forward链1、LVS工作在内核空间的netfilter的input链上,就像netfilter框架一样,安装iptables命令编写规则就可以作用于早已编译进内核的netfilter框架上。同样,ipvs早已编译好了在...

    LVS四层负载均衡
    LVS四层负载均衡

    • IP报文不经过forward链
      1、LVS工作在内核空间的netfilter的input链上,就像netfilter框架一样,安装iptables命令编写规则就可以作用于早已编译进内核的netfilter框架上。同样,ipvs早已编译好了在内核中,我们只要安装ipvsadm管理命令,写规则,即可生效。
      2、ipvsadm: 用户空间定义管理LVS的命令行工具
      ipvs:工作于内核空间input链上的框架,已经编译好进内核了。

    LVS类型:
    1、LVS-NAT(地址转换):将请求的目标地址转换为real server的地址。多目标DNAT。
    LVS四层负载均衡
    所有进出流量都将经过director,real server网关都应指向director。
    2、LVS-DR(直接路由):director和real server必须在同一物理网络,中间无路由器
    LVS四层负载均衡
    director只处理进来的请求,响应由real server直接和client进行
    3、LVS-TUN(隧道):和DR方式相似,只是将IP报文在封装一层,形成隧道传输。

    负载均衡算法:
    常用算法(默认为wlc,可见wlc是最靠谱的):
    1、rr:round robin,轮询方式
    2、wrr:weight round robin,加权轮询
    3、sh:source hash,原地址hash,用于绑定session会话
    4、lc:least connections,基于最少连接
    5、wlc:weight least connections,加权最少连接
    6、dh:destination hash,作用于后端为缓存服务器时可用

    展开全文
  • lvs四层负载均衡

    2018-06-13 21:58:46
    lvs四层负载均衡 1 nat模式 后端服务器支持数量10-20台 使用最少两个网段 2 dr模式 后端服务器支持数量100+台 使用一个网段 3 隧道模式 后端服务器支持数量100左右 异地负载均衡 realserver必须使用公网Ip,还得...
    lvs四层负载均衡

    1  nat模式

    后端服务器支持数量10-20台
    使用最少两个网段

    2  dr模式

    后端服务器支持数量100+台
    使用一个网段

    3  隧道模式

    后端服务器支持数量100左右
    异地负载均衡 realserver必须使用公网Ip,还得需要服务器支持ip隧道协议

    4  full-nat


    ↓↑↵→←↔

    nat:数据流向从client-->dr--->rs rs-->dr--->client
    client cip
           ↑↓
           ↑↓------->vip
            dr
            ↑↓------->dip
        -------------
            ↑↓ ↓
         rs1 rs2----->rip

    dr模式:流量从client-->dr-->rs rs-->client
    →→→→→→ client cip
    ↑ ↓
    ↑ ↓------->vip
    dr
    ↑ ↓------->dip
    ↑ +----------+
    ←←←←↓ ↓
    rs1 rs2----->rip  
    展开全文
  • lvs四层负载均衡 nat模式 后端服务器支持数量10-20台 使用最少两个网段 可以说是3层负载均衡dr模式 后端服务器支持数量100+台 使用一个网段 可以说是2层负载均衡隧道模式 后端服务器支持数量100左右 异地负载均衡 ...

    lvs四层负载均衡

    nat模式
    后端服务器支持数量10-20台
    使用最少两个网段
    可以说是3层负载均衡

    dr模式
    后端服务器支持数量100+台
    使用一个网段
    可以说是2层负载均衡

    隧道模式
    后端服务器支持数量100左右
    异地负载均衡 realserver必须使用公网Ip,还得需要服务器支持ip隧道协议

    full-nat

    ↓↑↵→←↔

    nat:数据流向从client-->dr--->rs rs-->dr--->client
    client cip
    ↑↓
    ↑↓------->vip
    dr
    ↑↓------->dip
    -------------
    ↑↓ ↓
    rs1 rs2----->rip

    dr模式:流量从client-->dr-->rs rs-->client



    →→→→→→ client cip 23
    ↑ ↓
    ↑ ↓------->vip 30
    dr
    ↑ ↓------->dip 20
    ↑ +----------+
    ←←←←↓ ↓
    rs1 rs2----->rip
    21 22
    设置vip30/32 设置vip30/32

    路由数据包:源Ip不会发生变化 目标IP发生变化
    源和目标MAC都会发生变化

    23--->30
    30--->23

    1.来回数据包不一致
    1)在rs的lo网卡设置vip/32
    2)在rs上拒绝arp回应
    3)设置让更好的IP回应数据包

    2.在同一台机器上出现两块同一网段的网卡,数据包出去的时候,谁的路由条目在上面,就走哪块网卡

    dr --- rs
    s ip 23
    d ip 30

    s ip 30
    d ip 23

    信 要发给小明

    #ipvsadm -A -t vip:80 -s rr
    #ipvsadm -a -t vim:80 -r rip1:80 -g
    #ipvsadm -a -t vim:80 -r rip2:80 -g

    #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    dr模式问题:
    arp广播
    1.9 ping 192.168.1.8

    1. 客户端要找vip访问80端口,因为是在同一个网段,所以发arp广播找vip的mac地址通信
    2. 因为有rs上也有vip,我们不能直接让rs上的vip回应客户端的广播,所以设置文件arp_ignore的内容为1
    1的意思是如果发来的广播包里面目标地址不是我的“进口地址”-->也就是“eth0”(对应的是非进口地址本地回环接口lo),那我就不回应这个arp广播)。
    3. 当dr的vip收到这个广播之后,回应mac地址,然后得到客户端发来的80端口请求,再通过lvs分发到一个rs
    4. 那么dr如何分发到一个rs?
    dip发出arp广播询问rs的ip地址所对应的mac地址,然后发出一个目标ip为rs_vip,目标mac为rs_eth0_mac的包到rs
    5. 这个rs必须要使用他lo设置的vip把回应包发出去(这样client收到之后一看源地址是vip,他就会相信这是正确的地址发来的包)
    6. 那么怎样让rs使用lo的vip而不使用eth0?
    设置arp_announce文件的内容为2, 2的意思是使用本机最好的本地IP地址把回应包发出去
    7. 最后怎么算是最好的本地IP地址?
    同一个网段下,使用可变长度子网掩码最长的IP地址被认为是好IP,因为他更精确

    dr模式


    数据链路层负载均衡
    顾名思义,数据链路层负载均衡是指在通信协议的数据链路层修改mac地址进行负载均衡。
    这种数据传输方式又称作三角传输模式,负载均衡数据分发过程中不修改IP地址,只修改目的mac地址,通过配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,从而达到不修改数据包的源地址和目的地址就可以进行数据分发的目的,由于实际处理请求的真实物理服务器IP和数据请求目的IP一致,不需要通过负载均衡服务器进行地址转换,可将相应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。这种负载均衡方式又称作直接路由方式(DR)。

    使用三角传输模式的链路层负载均衡时目前大型网站使用最广的一种负载均衡手段。在linux平台上最好的链路层负载均衡开源产品是LVS(linux virtual server)

    3台机器
    10.0.0.20 dr1 负载均衡器
    10.0.0.21 rs1 web1
    10.0.0.22 rs2 web2

    1.两个rs上部署web服务
    #yum install nginx -y
    修改主机内容
    启动服务:
    #systemctl start nginx

    2. 给两个web服务器的lo网卡设置子网掩码为32位vip
    rs1:
    # ifconfig lo:0 10.0.0.30/32
    rs2:
    # ifconfig lo:0 10.0.0.30/32

    3.给两个web服务器设置内核参数
    为了让vip发包出去
    # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    忽略arp响应
    # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    4.保证dr这台机器数据包是从dip发出去的
    如何判断:两块网卡
    谁的路由条目在上面,谁就是dip,另一个就是vip

    5.在dr上设置lvs路由条目
    # yum install ipvsadm -y
    # ipvsadm -A -t 10.0.0.30:80 -s rr
    # ipvsadm -a -t 10.0.0.30:80 -r 10.0.0.21:80 -g
    # ipvsadm -a -t 10.0.0.30:80 -r 10.0.0.22:80 -g


    -A 添加virtual server
    -t 指定使用tcp协议
    -s 指定调度策略为rr
    -a 添加realserver
    -r 指定realserver是谁


    让配置永久生效:
    # ipvsadm-save > /etc/sysconfig/ipvsadm
    # systemctl enable ipvsadm


    命令选项解释:

    -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
    -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
    -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
    -C --clear 清除内核虚拟服务器表中的所有记录。
    -R --restore 恢复虚拟服务器规则
    -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
    -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
    -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
    -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
    -L|-l --list 显示内核虚拟服务器表
    -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
    --set tcp tcpfin udp 设置连接超时值
    --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。
    --stop-daemon 停止同步守护进程
    -h --help 显示帮助信息
    -p --persistent [timeout] 持久稳固的服务(持久性连接)。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
    -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
    -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
    -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]

    -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.

    -M --netmask netmask persistent granularity mask
    -r --real-server server-address 真实的服务器[Real-Server:port]
    -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
    -i --ipip 指定LVS 的工作模式为隧道模式
    -m --masquerading 指定LVS 的工作模式为NAT 模式
    -w --weight weight 真实服务器的权值
    --mcast-interface interface 指定组播的同步接口
    -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
    --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
    --daemotcpdump -i ens33 tcp and port 80 -v -nnn 显示同步守护进程状态
    --stats 显示统计信息
    --rate 显示速率信息
    --sort 对虚拟服务器和真实服务器排序输出
    -n --numeric 输出IP地址和端口的数字形式

    抓包:
    #tcpdump -i ens33 tcp and port 80 -v -nn
    -i 指定网卡
    tcp 抓tcp协议的数据包
    port 指定要抓哪个端口的包
    -v 显示详细信息
    -nn 以数字的形式显示ip和端口


    --------------------
    查看
    #ip a
    #ip a l dev ens33
    添加IP:
    # ip a a 192.168.1.8/24 dev ens33
    删除IP:
    # ip a d 192.168.1.8/24 dev ens33

    #ifconfig
    #ifconfig ens33
    #ifconfig ens33 192.168.1.8

    #ifconfig ens33:0 192.168.1.9
     

    LVS调度算法

    =================================================================================
    1. 轮询调度(Round Robin)(简称rr)
    调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

    2. 加权轮询(Weighted Round Robin)(简称wrr)
    调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    3. 最少链接(Least Connections)(LC)
    调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用 “最小连接” 调度算法可以较好地均衡负载。

    4.加权最少链接(Weighted Least Connections)(WLC)
    在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负
    载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    5. 基于局部性的最少链接(Locality-Based Least Connections)(LBLC)
    “基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。


    A B C D E A1 B1 C1 D1 E1 A2 B2 C2 D2 E2
    1
    2
    3

    6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)
    “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标
    IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按
    “最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台
    服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复
    制的程度。

    7. 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)
    基于wlc算法。这个必须举例来说了

    A B C
    1 2 3
    1 2 3



    ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
    A(1+1)/1
    B(1+2)/2
    C(1+3)/3
    根据运算结果,把连接交给C。
    注:前面的1是给所有连接数加1,后面的除数是权重
    我本来负载就小,所以才连接数少,假如我这点负载再添加一个连接,我可能就挂了,但是你负载高的再添加1个连接,挂的可能小就比较小

    8.最少队列调度(Never Queue Scheduling NQ)(NQ)
    无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算

    9. 目标地址散列(Destination Hashing)(DH) 特点是查找速度快
    “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    10. 源地址散列(Source Hashing)(SH)
    “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
    =================================================================================
    外翻:
    目标地址散列调度(Destination Hashing Scheduling)算法
    是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。
    目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。该算法的流程如下:
    目标地址散列调度算法流程

    假设有一组服务器S = {S0, S1, ..., Sn-1},W(Si)表示服务器Si的权值,
    C(Si)表示服务器Si的当前连接数。ServerNode[]是一个有256个桶(Bucket)的
    Hash表,一般来说服务器的数目会小于256,当然表的大小也是可以调整的。
    算法的初始化是将所有服务器顺序、循环地放置到ServerNode表中。若服务器的
    连接数目大于2倍的权值,则表示服务器已超载。

    n = ServerNode[hashkey(dest_ip)];
    if ((n is dead) OR
    (W(n) == 0) OR
    (C(n) > 2*W(n))) then
    return NULL;
    return n;
    在实现时,我们采用素数乘法Hash函数,通过乘以素数使得散列键值尽可能地达到较均匀的分布。所采用的素数乘法Hash函数如下:
    素数乘法Hash函数

    static inline unsigned hashkey(unsigned int dest_ip)
    {
    return (dest_ip* 2654435761UL) & HASH_TAB_MASK;
    }
    其中,2654435761UL是2到2^32 (4294967296)间接近于黄金分割的素数,
    (sqrt(5) - 1) / 2 = 0.618033989
    2654435761 / 4294967296 = 0.618033987


    源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一一叙述。
    在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

    =====================================
    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
     

    展开全文
  • LVS四层负载均衡 DR模式 简述 实战 安装负载均衡的机器 后台真实的网站服务器 LVS四层负载均衡 NAT模式 简述 实战 安装负载均衡的机器 1.做域名解析 cat /etc/hosts 2.给自己设置虚拟IP ,(VIP) 首先给虚拟机添加...

    lvs 与负载均衡关系: 通过lvs实现负载均衡

    一、负载均衡技术

    ① 负载均衡(Load Balance):负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。

    ② 负载通常包括应用程序处理负载和网络流量负载,每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。
    +++++++++++++++++++
    负载均衡技术类型:基于 4 层负载均衡技术和基于 7 层负载均衡技术

    负载均衡实现方式:硬件负载均衡设备或者软件负载均衡

    硬件负载均衡产品:F5 、深信服 、Radware

    软件负载均衡产品: LVS(Linux Virtual Server)(四层)、 Haproxy、Nginx(七层)、Ats(apache traffic server)
    ++++++++++++++++++

    1.1四层负载均衡(代表 – lvs)

    lvs: 配置简单,传输速度快,模式多
    所谓四层负载均衡,也就是在负载均衡服务器收到用户的数据包后,解封装时,解到第四层(传输层)时,修改报文的目标ip地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,所以说它用户和负载均衡服务器不建立三次握手,因为负载均衡服务器收到包后,只拆到第四层,就修改了IP和端口,发给了真实后台服务器,让它们建立了三次握手。

    1. 在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

    2. 以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,解封装时并对请求报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

    3. 对应的负载均衡器要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

    4. 实现四层负载均衡的有:

    • F5:硬件负载均衡器,功能很好,但是成本很高。
    • lvs:重量级的四层负载均衡软件
    • haproxy:模拟四层转发,较灵活

    1.2七层负载均衡(代表 – nginx)

    nginx: 功能多 ,简介方便
    所谓七层负载均衡,也称为“内容交换”,在负载均衡服务器收到用户的数据包后,解封装时,解到第七层(应用层)时,直接修改了内容,**所以负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接,因为负载均衡器收到包后,拆到第四层时就需要建立tcp,三次握手,一直到第七层,完了修改完内容后再封装发给后台服务器,让它们再次建立tcp三次握手。**再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

    1. 在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据IP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。

    2. 负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。

    3. 对应的负载均衡器除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI等信息,实现七层负载均衡。此种负载均衡器能理解应用协议。

    4. 实现七层负载均衡的软件有:

      • haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
      • nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
      • apache:功能较差
      • Mysql proxy:功能尚可。

    1.3两者区别

    在这里插入图片描述
    总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。

    • 四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高。
    • 而七层负载均衡的优势则体现在功能多,控制灵活强大。
      所以使用七层负载或者四层负载还得根据具体的情况综合考虑。

    二、LVS(linux虚拟服务器)

    2.1介绍

    LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,因此性能较高。
    LVS软件作用:通过LVS提供的负载均衡技术实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
    1、优势

    高并发连接:LVS基于内核工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。

    **稳定性强:**是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。

    **成本低廉:**硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。

    **配置简单:**LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。

    **支持多种算法:**支持多种论调算法,可根据业务场景灵活调配进行使用

    **支持多种工作模型:**可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。

    **应用范围广:**因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等

    2、不足

    工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
    3、LVS 核心组件和专业术语

    一、核心组件

    LVS的管理工具和内核模块 ipvsadm/ipvs

    ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;

    ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发;

    二、专业术语

    VS:Virtual Server #虚拟服务

    Director, Balancer #负载均衡器、分发器

    RS:Real Server #后端请求处理服务器

    CIP: Client IP #用户端IP

    VIP:Director Virtual IP #负载均衡器虚拟IP

    DIP:Director IP #负载均衡器真实IP

    RIP:Real Server IP #后端请求处理服务器IP

    2.2四种工作模式

    • LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址) --利用三层功能
    • LVS/DR :直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)–利用二层功能mac地址
    • LVS/TUN: 隧道模式,只有进站的数据流量经过分发器
    • LVS/full-nat:双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
      区别:
      lvs-nat与lvs-fullnat:请求和响应报文都要经过负载均衡服务器Director。
      lvs-dr与lvs-tun:请求报文要经过负载均衡服务器Director,但响应报文由后台真实服务器RS直接发往客户。

    三、LVS四层负载均衡 DR模式

    3.1简述

    原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。
    优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
    缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与真实后台服务的网卡在一个物理段上。
    在这里插入图片描述

    3.2实战

    3.2.1负载均衡的机器

    1.域名解析(无所谓)
    三台机器都做
    在这里插入图片描述
    2.设置虚拟ip (vip)
    ip addr add dev ens33 虚拟IP,可自己定,但是一定要在当前所在的 /32
    在这里插入图片描述
    3.安装ipvsadm
    yum -y install ipvsadm
    创建启动文件,要不启动会报错:
    在这里插入图片描述
    启动ipvsadm:
    在这里插入图片描述
    4.定义分发策略:
    首先清除内核虚拟服务器中的所有记录:
    ipvsadm -C
    在这里插入图片描述
    ++++
    在这里插入图片描述
    ++++
    在这里插入图片描述
    要给所有后台的真实的服务器都分发,这里有两台,所以要做两次。
    ++++
    保存:
    在这里插入图片描述
    ++++
    查看一下分发的策略:
    在这里插入图片描述

    3.3.2后台真实的网站服务器

    1.在lo接口上绑定虚拟IP (VIP)
    在接收到真实服务器里的分发的虚拟IP后,需要绑定虚拟IP到lo的回环接口:
    ip addr add dev lo 虚拟IP/32
    在这里插入图片描述

    2.忽略arp广播,只接受负载均衡机器的连接:
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    在这里插入图片描述
    3.匹配精确ip地址回包
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    在这里插入图片描述
    这就配置完成了
    接下做测试:
    1.两台真实服务器安装nginx
    2.在浏览器测试
    real-server1:
    在这里插入图片描述
    同样,real-server2的默认页面也是
    +++++
    页面搜索:
    在这里插入图片描述

    在这里插入图片描述
    这就是lvs负载均衡的DR模式

    四、LVS四层负载均衡 NAT模式

    4.1简述

    原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,转发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
    优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
    缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
    在这里插入图片描述

    4.2实战

    4.2.1负载均衡的机器

    modprobe ip_vs #动态加载ip_vs 模块,这个命令只是临时生效,需要添加到开机启动项目里面:
    echo “modprobe ip_vs” >> /etc/rc.local
    chmod +x /etc/rc.local 切记添加执行权限
    1.做域名解析
    cat /etc/hosts
    在这里插入图片描述
    2.给自己设置虚拟IP ,(VIP)
    首先给虚拟机添加一个网卡,设置为桥接模式,那么就会有一个新的IP,这个IP就作为虚拟IP
    在这里插入图片描述
    3.设置路由
    设置开启路由转发:
    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    在这里插入图片描述
    开启转发功能
    sysctl -p
    在这里插入图片描述
    4.安装ipvsadm
    yum install -y ipvsadm
    生成启动保存文件,要不然启动会报错:
    ipvsadm --save > /etc/sysconfig/ipvsadm
    启动ipvsdam:
    service ipvsadm start
    在这里插入图片描述
    5.生成分发策略
    添加虚拟IP:
    ipvsadm -A -t 虚拟IP:端口号 -s rr
    在这里插入图片描述
    给后台服务器增加虚拟地址
    ipvsadm -a -t 虚拟地址 -r 真实后台服务器地址 -m
    在这里插入图片描述
    补:-m 加在后面 ,-m 的意思是net模式!!!
    给所有的后台服务器设置
    ++++
    设置完后保存策略:
    ipvsadm -S > /etc/sysconfig/ipvsadm
    完了查看一下设置的策略:
    ipvsadm -ln
    在这里插入图片描述

    4.2.2后台真实的网站服务器

    1.只需要把默认网关指向负载均衡服务器的真实IP
    route add default gw 真实的负载均衡服务器IP dev ens33
    可以通过 ip r 查看
    注意:网关在一段时间后会失效,需要重新设置!!!
    2.安装网站服务器
    nginx即可
    +++++
    接下来测试一下
    我们先在服务器上的nginx服务的默认页面里写入服务器名称
    real-server1:
    在这里插入图片描述
    同样,real-server2的默认页面也是
    +++++
    页面搜索:
    在这里插入图片描述

    在这里插入图片描述
    这就是lvs四层负载均衡的NET模式

    展开全文
  • LVS四层负载均衡原理解析

    千次阅读 2019-09-21 07:58:16
    四层负载均衡主要工作在网络七层ISO协议的第四层,即传输层。传输层的代表协议为TCP。相对于网络层,传输层对于数据包的区分,除了包含IP地址外,还包含端口号,并且TCP实现的是通过在不同机器的两个进程之间建立...
  • master端3.1.2 LVS-backup端3.1.3 启动keepalived3.2 部署Nginx服务3.2.1 两台机器部署nginx服务3.2.2 两台机器lo均配置vip3.2.3 两台机器均配置nginx反向代理3.3 部署Tomcat后端应用服务3.4 部署PHP后端应用服务...
  • 原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为...
  • 原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,006
精华内容 402
关键字:

lvs四层负载均衡