生产环境之负载均衡LVS+keepalived方案(2)_LVS介绍_ip virtual server version 1.2.1 (size=4096)-程序员宅基地

技术标签: keepalived  流量负载均衡  负载均衡  lvs  # 负载均衡LVS+keepalived方案  网络负载均衡  

LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,linux内核2.6.X之后的版本默认已集成了LVS模块(内核模块名为:ipvs),实现了基于传输层的请求负载均衡调度方案,LVS支持的工作模式:NAT模式、TUN模式、DR模式及FULLNAT模式。

主要管理工具

ipvsadm

安装

yum install ipvsadm

主要命令

大部分命令可采用keepalived的配置策略来实现,常用的用于维护的主要命令:
ipvsadm -Ln    // 显示转发策略

[root@node1 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.200.2:22 wrr
  -> 192.168.0.44:22              Masq    1000   1          0 

ipvsadm -lnc   // 查看当前ipvs模块中记录的连接

[root@node1 keepalived]# ipvsadm -lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 14:50  ESTABLISHED 192.168.200.5:13645 192.168.200.2:22   192.168.0.44:22

ipvsadm -Ln --stats   // 显示统计信息

[root@node1 keepalived]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.200.2:22                    3      295      300    28082    46370
  -> 192.168.0.44:22                     3      295      300    28082    46370

ipvsadm -C   //清楚策略

命令详解

ipvsadm --help 可以得到支持的详细命令:

ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
  ipvsadm -D -t|u|f service-address
  ipvsadm -C
  ipvsadm -R
  ipvsadm -S [-n]
  ipvsadm -a|e -t|u|f service-address -r server-address [options]
  ipvsadm -d -t|u|f service-address -r server-address
  ipvsadm -L|l [options]
  ipvsadm -Z [-t|u|f service-address]
  ipvsadm --set tcp tcpfin udp
  ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
  ipvsadm --stop-daemon state
  ipvsadm -h

Commands:
Either long or short options are allowed.
  --add-service     -A        add virtual service with options
  --edit-service    -E        edit virtual service with options
  --delete-service  -D        delete virtual service
  --clear           -C        clear the whole table
  --restore         -R        restore rules from stdin
  --save            -S        save rules to stdout
  --add-server      -a        add real server with options
  --edit-server     -e        edit real server with options
  --delete-server   -d        delete real server
  --list            -L|-l     list the table
  --zero            -Z        zero counters in a service or all services
  --set tcp tcpfin udp        set connection timeout values
  --start-daemon              start connection sync daemon
  --stop-daemon               stop connection sync daemon
  --help            -h        display this help message

Options:
  --tcp-service  -t service-address   service-address is host[:port]
  --udp-service  -u service-address   service-address is host[:port]
  --fwmark-service  -f fwmark         fwmark is an integer greater than zero
  --ipv6         -6                   fwmark entry uses IPv6
  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                                      the default scheduler is wlc.
  --pe            engine              alternate persistence engine may be sip,
                                      not set by default.
  --persistent   -p [timeout]         persistent service
  --netmask      -M netmask           persistent granularity mask
  --real-server  -r server-address    server-address is host (and port)
  --gatewaying   -g                   gatewaying (direct routing) (default)
  --ipip         -i                   ipip encapsulation (tunneling)
  --masquerading -m                   masquerading (NAT)
  --weight       -w weight            capacity of real server
  --u-threshold  -x uthreshold        upper threshold of connections
  --l-threshold  -y lthreshold        lower threshold of connections
  --mcast-interface interface         multicast interface for connection sync
  --syncid sid                        syncid for connection sync (default=255)
  --connection   -c                   output of current IPVS connections
  --timeout                           output of timeout (tcp tcpfin udp)
  --daemon                            output of daemon information
  --stats                             output of statistics information
  --rate                              output of rate information
  --exact                             expand numbers (display exact values)
  --thresholds                        output of thresholds information
  --persistent-conn                   output of persistent connection info
  --nosort                            disable sorting output of service/server entries
  --sort                              does nothing, for backwards compatibility
  --ops          -o                   one-packet scheduling
  --numeric      -n                   numeric output of addresses and ports
  --sched-flags  -b flags             scheduler flags (comma-separated)

如:
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m   //添加真实服务器,指定传输模式为NAT
ipvsadm -A -t 207.175.44.110:80 -s rr   //添加地址为207.175.44.110:80的虚拟服务,指定调度算法为轮转

keepalived

Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP(Virtual Router RedundancyProtocol(虚拟路由器冗余协议))功能,解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
详见之后的文档。

LVS工作模式详解

NAT模式

LVS在将数据包(NAT到)转发到Real Server(RS服务器)服务器, 跟我们熟知的网络NAT模式不一样:NAT模式转发时源IP地址不变,即源ip地址仍然是客户端那端的ip地址。
该模式部署简单,因为请求响应数据包都要经过LVS服务器,因此性能很差。

FULLNAT模式

跟NAT模式不同在于:LVS在将数据包转发到RS服务器时,源IP地址变为LVS的内网地址。这种模式也就是我们熟知的网络NAT模式(外网进公司内网路由器的NAT模式)。
该模式性能上同NAT模式。

linux内核集成的版本默认不支持该种方式,需要而外软件的支持: lvs-fullnat-synproxy.tar.gz
已验证: CentOS Linux release 7.4.1708 (Core) Linux version 3.10.0-693.el7.x86_64 这个版本是不支持 FULLNAT模式。

DR模式

DR模式是在LVS服务器通过只改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。要求LVS服务器与真实服务器都有一块网卡连接在同一局域网内。
该模式性能最好。

TUN模式

在LVS服务器和真实服务器之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给真实服务器节点服务器,真实服务器接收到之后解开IP tunnel后,进行响应处理。并且绕过LVS服务器直接把包发送给客户端。
该模式性能基本能达到DR模式的性能。

调度算法详解

静态调度算法(4种):

  1. 轮询调度rr
    轮询调度(Round Robin)算法就是按依次循环的方式将请求调度到不同的服务器上,轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

  2. 加权轮询wrr
    加权轮询(Weight Round Robin)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

  3. 源地址散列调度算法sh
    源地址散列调(Source Hashing)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

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

动态调度算法(6种):

  1. 最少链接lc
    最小连接调度(Least Connections)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
    (集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

  2. 加权最少链接wlc
    加权最少连接(Weight Least Connections)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

  3. 基于局部性的最少连接调度算法lblc
    基于局部的最少连接调度(Locality-Based Least Connections)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

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

  5. 最少期望延迟sed
    最短的期望的延迟调度(Shortest Expected Delay)算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
    A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。

  6. 最少队列调度nq
    最少队列调度(Never Queue)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhjuan/article/details/130943766

智能推荐

(Java毕业设计)招聘信息管理系统(基于java+springboot)附源码_java人力资源管理系统招聘管理-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏17次。在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括招聘信息管理系统的网络应用,在外国招聘信息管理系统已经是很普遍的方式,不过国内的线上管理系统可能还处于起步阶段。招聘信息管理系统具有招聘信息管理功能的选择。_java人力资源管理系统招聘管理

冯诺依曼、哈佛、RISC、CISC_冯诺依曼曼指令和数据区分-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏20次。几个基础材料(源:http://jwc.seu.edu.cn/zq/signal/new/importent/zhang5_6/feng.htmhttp://jwc.seu.edu.cn/zq/signal/new/importent/zhang5_6/harvard.htmhttp://dingjun.net/dingjun/html/14/84FB43402106C575.html_冯诺依曼曼指令和数据区分

Netty——深入解析心跳检测机制_netty 服务端心跳检测-程序员宅基地

文章浏览阅读428次。客户端定时每X秒(推荐小于60秒)向服务端发送特定数据(任意数据都可),服务端设定为X秒没有收到客户端心跳则认为客户端掉线,并关闭连接触发onClose回调。当需要服务端定时给客户端发送心跳数据时, $gateway->pingData设置为服务端要发送的心跳请求数据,心跳数据是任意的,只要客户端能识别即可。当设置为服务端主动发送心跳时,如果客户端最近有发来数据,那么证明客户端存活,服务端会省略一个心跳,下个心跳大约1.5*$gateway->pingInterval秒后发送。心跳检测时间间隔 单位:秒。_netty 服务端心跳检测

linux内核SPI总线驱动分析(一)_linux spi驱动总线分析-程序员宅基地

文章浏览阅读535次。下面有两个大的模块:一个是SPI总线驱动的分析 (研究了具体实现的过程)另一个是SPI总线驱动的编写(不用研究具体的实现过程)SPI总线驱动分析 1 SPI概述 SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应_linux spi驱动总线分析

Nginx,nginx-rtmp-module-master搭建直播平台-程序员宅基地

文章浏览阅读511次。Nginx,nginx-rtmp-module-master搭建直播平台_nginx-rtmp-module-master

**The sip module implements API v11.0 to v11.2 but the PyQt5.QtCore module requires API v11.3**_the pyqt5.qtcore module failed to register with th-程序员宅基地

文章浏览阅读3.6k次。*The sip module implements API v11.0 to v11.2 but the PyQt5.QtCore module requires API v11.3*情况一 SIP版本不匹配我在使用PyQt5时遇到了这个问题:“sip模块实现了API v11.0到v11.2,但PyQt5.QtWidgets模块需要API v11.3”pip列表sip 4.18,但是使..._the pyqt5.qtcore module failed to register with the sip module

随便推点

springboot2.x The character [_] is never valid in a domain name_springboot the character [_] is never valid in a d-程序员宅基地

文章浏览阅读1k次。访问springcloud工程, springboot版本为2.1.15 ,使用域名访问接口报400但是直接用ip不报错。发现是集成的tomcat版本不支持域名下划线。大约是8.5.31以后的版本不支持带下划线的域名,但是也没办法降低版本了,会有很多冲突。先搁置。..._springboot the character [_] is never valid in a domain name.

QEMU 运行 RISC-V 64 位 Linux_qemu启动riscv环境-程序员宅基地

文章浏览阅读420次。QEMU 运行 RISC-V 64 位 Linux_qemu启动riscv环境

一年对于程序员来说有多长?_程序员 一年多少秒-程序员宅基地

文章浏览阅读4.3k次。聊这个话题,我表示又蛋疼了!你想看么?还没写过这么有争议的话题,有点小小的不安!一年有多长?让我来掐指算一算:1年=365天(今年是366天)=多少小时呢?前方高能,等我去写个程序算一下!还用写程序吗?早有人写好了!有多少分有多少秒,又有多少毫秒呢?我们只需要选择一下单位就好了,结果是:1年(yr)=31536000000毫秒(ms)为什么聊这个话题?蛋当然不可能说疼就疼了!水是有源的,树是有根的_程序员 一年多少秒

idea使用码云管理项目教程_idea 使用码云维护项目-程序员宅基地

文章浏览阅读745次。第一步 : 下载git 进入git官网 https://git-scm.com/download/win 下载git软件. 我这里演示安装Git-2.16.1.4-64-bit.exe 1 . 运行 Git-2.16.1.4-64-bit.exe 点击Next 2. 选择安装目录 点击Next 3. 第二步 : 安装码云插件第三步 : 配..._idea 使用码云维护项目

js调用百度地图API创建地图,搜索位置-程序员宅基地

文章浏览阅读186次。实现代码:<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta http-equiv="Cache-Control" content="no-store" /> <meta http-equi_百度地图js api地址搜索

Excel VSTO开发1-VSTO简介_office开发版本号与vsto-程序员宅基地

文章浏览阅读986次。VSTO(Visual Studio Tools for Office)是微软开发的一种用于创建Microsoft Office应用程序的工具集,它可以让开发者在Microsoft Office应用程序中集成自己的.NET应用程序。VSTO还提供了一些特殊的工具和库,使得开发人员可以更方便地管理Microsoft Office应用程序的生命周期、访问Microsoft Office应用程序的API和对象模型、处理Microsoft Office应用程序的事件和异常等。Office版本:2016 32位。_office开发版本号与vsto

推荐文章

热门文章

相关标签