Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linux LVS 负载均衡

Avatar for hjue hjue
November 27, 2012

Linux LVS 负载均衡

Avatar for hjue

hjue

November 27, 2012
Tweet

More Decks by hjue

Other Decks in Technology

Transcript

  1. • LVS 集群介绍 • LVS负载均衡集群系统相关概念 • LVS负载均衡集群系统优点 • 三种 IP

    负载均衡技术大致原理 • IPVS 调度器八种负载调度算法 • LVS+Keepalived 实现高性能高可用负载均衡 12年11月27⽇日星期⼆二
  2. LVS 集群介绍 • 针对高可伸缩、高可用网络服务的需 求,中国的章文嵩博士给出了基于 IP 层和 基于内容请求分发的负载平衡调度解决方 法,并在 Linux

    内核中实现了这些方法, 将一组服务器构成一个实现可伸缩的、高 可用网络服务的虚拟服务器。 • 虚拟服务器的体系结构如右图所示, 一组服务器通过高速的局域网或者地理 分 布的广域网相互连接,在它们的前端有一 个负载调度器(Load Balancer)。负载调 度器能无缝地将网络请求调度到真实服务 器上,从而使得服务器集群的结构对客户 是透明的,客户访问集群系统提供的网络 服务就像访问一台高性能、高可用的服务 器一样。客户程序不受服务器集群的影响 不需作任何修改。系统的伸缩性通过在服 务机群中透明地加入和删除一个节点来达 到,通过检测节点或服务进程故障和正确 地重置系统达到高可用性。由于该负载调 度技术是在Linux内核中实现的,因此称之 为Linux 虚拟服务器(Linux Virtual Server)。 12年11月27⽇日星期⼆二
  3. LVS负载均衡集群系统相关概念 • 基于Linux的虚拟服务器(Linux Virtual Server,即LVS)是一个具有高可 用性特点的负载均衡集群系统。该负载均衡集群系统可以提供与服务 器节点的数量、性能成正比的负载能力,有效提高服务的吞吐量、可靠 性、冗余度、适应性,性能价格比高。同时,LVS也是利用低端设备实现 高端服务器性能的有效途径。 •

    Linux虚拟服务器(Linux Virtual Server,即LVS)是建立在一个主控服务 器(director)及若干真实服务器(real-server)所组成的集群之上。real- server负责实际提供服务,主控服务器根据指定的调度算法对real- server进行控制。而集群的结构对于用户来说是透明的,客户端只与单 个的IP(集群系统的虚拟IP)进行通信,也就是说从客户端的视角来看,这 里只存在单个服务器。 • Real-server可以提供众多服务,如ftp, http, dns, telnet, nntp, smtp 等。主控服务器负责对Real-Server进行控制。客户端在向LVS发出服 务请求时,Director会通过特定的调度算法来指定由某个Real-Server来 应答请求,而客户端只与Load Balancer的IP(即虚拟IP,VIP)进行通信。 12年11月27⽇日星期⼆二
  4. IP 虚拟服务器软件 IPVS • 在调度器的实现技术中,IP 负载均衡技术是效率最高 的。在已有的 IP 负载均衡 技术中有通过网络地址转换

    (Network Address Translation)将一组服务器构成一个 高性能的、高可用的虚拟服务器,我们称之为 VS/NAT 技 术(Virtual Server via Network Address Translation), 大多数商品化的 IP 负载均衡调度器产品都是使用此方 法,如 Cisco 的 LocalDirector、F5 的 Big/IP 和 Alteon 的 ACEDirector。在分析VS/NAT 的缺点和网络服务的非对 称性的基础上,我们提出通过 IP 隧道实现虚拟服务器的 方法 VS/TUN (Virtual Server via IP Tunneling),和通 过直接路由实现虚拟服 务器的方法 VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的 伸缩性。所以,IPVS 软件实现了这三种 IP 负载均衡技 术,它们的大致原理如下(稍后会有详细介绍): 12年11月27⽇日星期⼆二
  5. 三种 IP 负载均衡技术大致原理 • (1)Virtual Server via Network Address Translation(VS/NAT)

    • 通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度 算法, 将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器 时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。 • (2)Virtual Server via IP Tunneling(VS/TUN) • 采用 NAT 技术时,由于请求和响应报文都必须经过调度器地址重写, 当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问 题,调度器把请求报文通过 IP 隧道转发至真实服务器,而真实服务器将响应 直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请 求报文大许多,采用 VS/TUN 技 术后,集群系统的最大吞吐量可以提高10 倍。 • (3)Virtual Server via Direct Routing(VS/DR) • VS/DR 通过改写请求报文的 MAC 地址,将请求发送到真实服务器,而 真实服务器将响应直接返回给客户。同 VS/TUN 技术一样,VS/DR 技术可极 大地提高集群系统的伸缩性。这种方法没有 IP 隧道的开销,对集群中的真实 服务器也没有必须支持 IP 隧道协议的要求,但是要求调度器与真实服务器都 有一块网卡连在同一物理网段上。 12年11月27⽇日星期⼆二
  6. IPVS 调度器八种负载调度算法 • (1)轮叫(Round Robin) • 简写:RR。调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集 群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的 连接数和系统负载。 •

    (2)加权轮叫(Weighted Round Robin) • 简写:WRR。调度器通过“加权轮叫”调度算法根据真实服务器的不同处 理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问 流量。 • (3)最少链接(Least Connections) • 简写:LC。调度器通过“最少连接”调度算法是把新的连接请求分配到当 前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器 当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器 已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接 中止或超时,其连接数减一。 • (4)加权最少链接(Weighted Least Connections) • 简写:WLC。是最小连接调度的超集,各个服务器用相应的权值表示其 12年11月27⽇日星期⼆二
  7. • (5)基于局部性的最少链接(Locality-Based Least Connections) • 简写:LBLC。“基于局部性的最少链接”调度算法是针对请求报文的目标IP地址的负载均衡调 度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这 里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下, 将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中 率,从而整个集群系统的处理能力。

    • (6)带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) • 简写:LBLCR。“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均 衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一 组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的 服务请求,一台Cache 服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会从所有的 Cache服务器中按“最小连接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器, 很快这台Cache服务器也会超载,就会重复上述过程选出新的Cache服务器。这样,可能会导致 该“热门”站点的映像会出现在所有的Cache服务器上,降低了Cache服务器的使用效率。LBLCR调 度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时, 会增加集合里的Cache服务器,来处理不断增长的负载;当该“热门”站点的请求负载降低时,会减 少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的Cache服务器 上,从而提供Cache集群系统的使用效率。 • (7)目标地址散列(Destination Hashing) • 简写:DH。“目标地址散列”调度算法也是针对目标IP地址的负载均衡,但它是一种静态映射 算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。 12年11月27⽇日星期⼆二
  8. IP信息列表: 名称 IP LVS-DR-Master 61.164.122.6 LVS-DR-BACKUP 61.164.122.7 LVS-DR-VIP 61.164.122.8 WEB1-Realserver

    61.164.122.9 WEB2-Realserver 61.164.122.10 GateWay 61.164.122.1 12年11月27⽇日星期⼆二
  9. 安装LVS和Keepalvied软件包 1.下载相关软件包 #mkdir /usr/local/src/lvs #cd /usr/local/src/lvs #wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

    2. 安装LVS和Keepalived 内核源代码:需要 2.4.24 以后版本的内核源代码 #uname -r 2.6.18-53.el5PAE #lsmod | grep ip_vs ip_vs 84289 4 ip_vs_wrr #tar zxvf ipvsadm-1.24.tar.gz #cd ipvsadm-1.24 #make && make install #tar zxvf keepalived-1.1.15.tar.gz #cd keepalived-1.1.15 #./configure && make && make install #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 12年11月27⽇日星期⼆二
  10. 配置负载均衡服务器 配置在主负载均衡服务器上配置keepalived.conf #vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs

    { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } # VIP1 vrrp_instance VI_1 { state MASTER #备份服务器上将MASTER改为BACKUP interface eth0 #实例绑定的网卡 virtual_router_id 51 #标记(0...255)相同实例要相同 priority 100 # 备份服务上将100改为99(数字大的优先级高) advert_int 1 #检查间隔,默认1s authentication { 12年11月27⽇日星期⼆二
  11. virtual_ipaddress { 61.164.122.8 #(指定VIP,如果有多个VIP,继续换行填写.) } } virtual_server 61.164.122.8 80 {

    delay_loop 6 #(每隔6秒查询realserver状态) lb_algo wrr #lvs调度算法这里使用加权轮询 有:rr|wrr|lc|wlc|lblc|sh|dh lb_kind DR #负载均衡转发规则NAT|DR|TUN persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver) protocol TCP #(用TCP协议检查realserver状态) real_server 61.164.122.9 80 { #设置VIP port weight 3 #(权重) TCP_CHECK { #tcp健康检查 connect_timeout 10 #(10秒无响应超时) nb_get_retry 3 #重连次数 12年11月27⽇日星期⼆二
  12. keepalive配置文件说明: 全局定义块 1、 email 通知。作用:有故障,发邮件报警。这是可选项目。 2、 Lvs 负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 3、 花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived

    运行时,不会得到预期 的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号, 这点要特别注意。 VRRP 定义块 1、 同步 vrrp 组 vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有 2 个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪 些? 2、 实例组 group.至少包含一个 vrrp 实例。 3、 Vrrp 实例 vrrp_instance.实例名出自实例组 group 所包含的那些名字。 (1) 实例状态 state.只有 MASTER 和 BACKUP 两种状态,并且需要大写这些单词。其中MASTER 为工作状态,BACKUP 为备用状态。当 MASTER 所在的服务器失效时,BACKUP 所在的系统会 自动把它的状态有 BACKUP 变换成 MASTER;当失效的MASTER 所在的系统恢复时,BACKUP 从 MASTER 恢复到 BACKUP 状态。 (2) 通信接口 interface。对外提供服务的网络接口,如 eth0,eth1.当前主流的服务器都有2 个或 2 个 12年11月27⽇日星期⼆二
  13. 虚拟服务器 virtual_server 定义块 虚拟服务器定义是 keepalived 框架最重要的项目了,是 keepalived.conf 必不可少的部分。 1、 虚拟服务器

    virtual_server. 这个 ip 来自于 vrrp 定义块的第“4”步,后 面一个空格,然后加上端口号。定义一个 vip,可以实现多个 tcp 端 口的负载均衡功能。 (1) delay_loop。健康检查时间间隔,单位是秒。 (2) lb_algo. 负载均衡调度算法,互联网应用常使用 wlc 或 rr。 (3) lb_kind. 负载均衡转发规则。一般包括 DR,NAT,TUN3 种。 (4) persistence_timeout.会话保持时间,单位是秒。 (5) 转发协议 protocol.一般有 tcp 和 udp 两种。 2、 真实服务器 real_server.也即服务器池。Real_server 的值包括 ip 地 址和端口号。 (1) 权重 weight.权重值是一个数字,数值越大,权重越高。使用不同 12年11月27⽇日星期⼆二
  14. 配置realserver #vi /usr/local/sbin/realserver.sh #!/bin/bash # description: Config realserver lo and

    apply noarp SNS_VIP=61.164.122.8 . /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" 12年11月27⽇日星期⼆二
  15. 这里对配置文件里重要的一些项进行说明: 1、 vip(virtual ip)。直接路由模式的 vip 必须跟服务 器对外提供服务的 ip 地址在同一个网段,并且 lvs

    负载均衡器和其他所有提供相同功能的服务器 都使用这个 vip. 2、 vip 被绑定在环回接口 lo0:0 上,其广播地址是 其本身,子网掩码是 255.255.255.255。这与标准 的网络地址设置有很大的不同。采用这种可变长 掩码方式把网段划分成只含一个主机地址的目的 是避免 ip 地址冲突。 3、 echo “1”,echo “2” 这段的作用是抑制 arp 广播。 如果不做 arp 抑制,将会有众多的机器向其他宣 称:“嗨!我是奥巴马,我在这里呢!”,这样就乱 套了。 12年11月27⽇日星期⼆二
  16. • 查看lvs服务是否正常 #watch ipvsadm –ln IP Virtual Server version 1.2.1

    (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 61.164.122.8:80 wrr persistent 60 -> 61.164.122.10:80 Route 3 0 0 -> 61.164.122.9:80 Route 3 0 0 • #tail –f /var/log/message 监听日志,查看状态。 12年11月27⽇日星期⼆二
  17. LVS后记: 1、InActConn并不代表错误连接,它是指不活跃连接(Inactive Connections), 我们将处于TCP ESTABLISH状态以外的连接都称为不活跃连接,例如处于 SYN_RECV状态的连接,处于TIME_WAIT状态的连接等。 2、用四个参数来关闭arp查询响应请求: echo 1 >

    /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 3、ipvsadm -L -n --stats Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes 连接数 输入包 输出包 输入流量 输出流量 4、注意事项: 12年11月27⽇日星期⼆二
  18. ipvsadm命令参数详解 ipvsadm -a|e -t|u VIP: PORY -r RIP [-g|i|m] [-w

    weight] 命令参数详解 1,virtual-service-address:是指虚拟服务器的ip 地址 2,real-service-address:是指真实服务器的ip 地址 3,scheduler:调度方法 命令选项解释: 有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。 -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 功能。 12年11月27⽇日星期⼆二