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

Linux LVS 负载均衡

hjue
November 27, 2012

Linux LVS 负载均衡

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⽇日星期⼆二