1 / 51

网站集群架构设计 LVS 实现网络负载均衡实例精讲

网站集群架构设计 LVS 实现网络负载均衡实例精讲. CU 版主 kns0124wh( 百湖) 2009 年 6 月 20 日 西安. 清楚为什么会出现 LVS LVS 能够做到的 LVS 实现方式 LVS 需要 High Availability LVS 的应用延伸. 互联网的发展. Unix 诞生于 1969 年 1987 商业化的互联网诞生 1990 年互联网的膨胀在继续. 群集概念的出现. 人口大爆炸,男的比女的多 3700 万,都去上网。于是服务器吃不消了,有人提出了群集、云 ------ 概念。. 解决之道. Html 语法 URL 重定向

alta
Download Presentation

网站集群架构设计 LVS 实现网络负载均衡实例精讲

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 网站集群架构设计LVS实现网络负载均衡实例精讲网站集群架构设计LVS实现网络负载均衡实例精讲 CU版主 kns0124wh(百湖) 2009年6月20日 西安

  2. 清楚为什么会出现LVS • LVS能够做到的 • LVS实现方式 • LVS需要High Availability • LVS的应用延伸

  3. 互联网的发展 • Unix诞生于1969年 • 1987商业化的互联网诞生 • 1990年互联网的膨胀在继续

  4. 群集概念的出现 • 人口大爆炸,男的比女的多3700万,都去上网。于是服务器吃不消了,有人提出了群集、云------概念。

  5. 解决之道 • Html语法URL重定向 • Location • 返回代码 • 早前的DNS的多个A记录 • 负载均衡产品 • F5硬件 • GSLB服务端应用负载均衡 从程序解决

  6. 开源解决之道 • 节约采购硬件成本、减少开发难度 • 基于开源应用软件的Modules解决之路 • apache mod_geoip mod_proxy_balancer mod_proxy_ajp • nginx GEO Module • tomcat sessions • 1998年5月创立LVS • 成为了Linux内核的一部分 效率高 • 真实运行的Web proxy集群系统

  7. 什么是LVS • LVS是章文嵩博士发起和领导的优秀的集群解决方案,许多商业的集群产品,比如RedHat的Piranha等,都是基于LVS的核心代码的。 • LVS是一个开源的软件,在LINUX平台下实现基于IP负载均衡技术和内容请求分发技术 。 • LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。 • http://www.linuxvirtualserver.org/ • http://zh.linuxvirtualserver.org/

  8. LVS能做到的 • The Linux Virtual Server is a highly scalable and highly available server built on a cluster of real servers, with the load balancer running on the Linux operating system. The architecture of the server cluster is fully transparent to end users, and the users interact as if it were a single high-performance virtual server. • http://www.linuxvirtualserver.org/

  9. 高性能的调度器 • LVS集群采用IP负载均衡技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,结合健康检测功能调度器自动屏蔽掉服务器的故障,结合High Availability技术从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

  10. LVS不能做到的 • 机器数量需要多 • Nginx 在一个主机上就可以实现很好的负载 • 基于IP的调度算法不能实现基于语意的调度 • 对于应用程序的sessions需要借助其他方式 • 对于数据库RAC、REPLICATION不同 • Google file system, Bigtable, Mapreduce • (Hadoop开源的可运行于大规模集群上的分布式并行编程框架 )

  11. 典型LVS结构 • 一般来说,LVS集群采用三层结构,负载调度器、服务器池、共享存储主要部分组成。

  12. LVS的三个部分 • 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。 • 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。 • 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

  13. 三种IP负载均衡技术 • 可伸缩网络服务结构,都需要一个前端的负载调度器(主从备份) • 基于IP负载均衡技术是在负载调度器的实现技术中效率最高的。 • 在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。 • 在分析VS/NAT的缺点和网络服务的非对称性的基础上 • 通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling) • 通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing), • VS/DR可以极大地提高系统的伸缩性。 • VS/NAT、VS/TUN和技术是LVS集群中实现的三种IP负载均衡技术。

  14. VS/NAT的体系结构

  15. 半连接的TCP有限状态机

  16. VS/TUN的体系结构

  17. VS/DR的体系结构

  18. 调度算法 • 轮叫调度(Round-Robin Scheduling) • 加权轮叫调度(Weighted Round-Robin Scheduling) • 最小连接调度(Least-Connection Scheduling) • 加权最小连接调度(Weighted Least-Connection Scheduling) • 基于局部性的最少链接(Locality-Based Least Connections Scheduling) Cache • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)Cache • 目标地址散列调度(Destination Hashing Scheduling) • 源地址散列调度(Source Hashing Scheduling)

  19. LVS实现方式 • IP Virtual Server Netfilter module • ls -l /lib/modules/`uname -r`/kernel/net/ipv4/ipvs • RedHat 7.3/8.0都把ipvs预先编译到了RedHat发行版的内核当在redhat9.0取消了预编译 • 目前IPVS包含在2.6的内核中,不需要重新编译,非常简单 • ipvsadm utility to administer the IP Virtual Server inside the Linux kernel

  20. ipvsadm常用命令 • 增加调度服务 • ipvsadm -A -t 虚拟服务地址:服务端口 -s 调度算法 • 增加真实服务器 • ipvsadm -a -t 虚拟服务地址:服务端口 -r 真实服务地址 –g工作模式 • 删除真实服务器 • ipvsadm -d -t 虚拟服务地址:服务端口 -r 真实服务地址 –g工作模式 • 删除调度服务 • ipvsadm -D -t 虚拟服务地址:服务端口 -s 调度算法 • 查看调度状态 • ipvsadm –ln • ipvsadm -lnc

  21. 状态同步 • 主节点 • ipvsadm --start-daemon master --mcast-interface eth0 • 从节点 • ipvsadm --start-daemon backup --mcast-interface eth0

  22. session会话保持Persistence • -p –persistent [timeout] • 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。 • 解决这个问题,最有效的办法就是在后端web节点间实现session复制,用户在任何一个真实web节点上的session发生变化时,通过一定的策略同步复制到其它web节点上。

  23. 调度器与真实服务器配置 • 在调度器上 • 设置VIP调度地址 • 开启IP转发 ifconfig eth0:0 虚拟服务地址 netmask 255.255.255.255 broadcast 虚拟服务地址 up route add -host 虚拟服务地址 dev eth0:0 echo 1 > /proc/sys/net/ipv4/ip_forward

  24. 调度器与真实服务器配置 • 在真实服务器上 • 设置VIP应答地址 • 屏蔽arp请求 ifconfig lo:0 虚拟服务地址 netmask 255.255.255.255 borcast 虚拟服务地址 up route add -host 虚拟服务地址 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

  25. RealServer标准配置方式 • 编辑/etc/sysconfig/network-scripts/ifcfg-lo:0 设置VIP地址 DEVICE=lo:0 IPADDR=192.168.1.160 #VIP地址 NETMASK=255.255.255.255 BROADCAST=192.168.1.160 #广播地址设置为VIP地址 ONBOOT=yes NAME=loopback • 编辑/etc/sysctl.conf 设置禁用arp net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2

  26. 演示环境 采用VS/DR模式,通过ipvsadm命令方式建立演示一个典型的环境:一个dr节点、两个realserver节点运行WEB服务。 VIP:192.168.1.160/24 DR: 192.168.1.161/24 RealServerA:192.168.1.167/24 RealServerB:192.168.1.168/24 GATEWAY:192.168.1.1 DNS:192.168.1.1

  27. Demo 演示视频

  28. 问题 • 配置脚本问题 • DR节点成为单点故障源 • 无RealServer的监控状态检测 LVS需要High Availability

  29. LVS需要High Availability • LVS Piranha • LVS heartbeat ldirectord • LVS Keepalived

  30. LVS Piranha • piranha为REDHAT开发的一个LVS集群管理工具叫Piranha,用于控制LVS集群,并提供了一个图形化的配置界面。 • Piranha - Load-balanced Web and FTP Clusters • piranha-gui service • pulse service • Linux Virtual Server Administration • http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Virtual_Server_Administration/index.html

  31. Piranha

  32. GET / HTTP/1.0\r\n\r\n

  33. Piranha安装 • Piranha是调度节点的配置,RealServer节点的配置仍不能缺少 • rs节点设置VIP • rs节点禁用ARP • 对于centos • yum -y install piranha ipvsadm • 不能使用yum需要安装如下包(具体版本因OS不同) • php-common • php-cli • php • ipvsadm • piranha

  34. Piranha配置文件 • /etc/sysconfig/ha/lvs.cf • 添加删除节点 • 更改调度服务定义 • 更改参数设置 • 更改后重新启动pulse

  35. Piranha结合Kickstart定制 • 结合Kickstart %post脚本定制 • 预定义 • 修改lvs.cf • 快速

  36. 采用VS/DR模式,通过Piranha方式建立演示一个典型的环境:一个dr节点、两个realserver节点运行WEB服务。采用VS/DR模式,通过Piranha方式建立演示一个典型的环境:一个dr节点、两个realserver节点运行WEB服务。 VIP:192.168.1.160/24 DR: 192.168.1.161/24 BDR:192.168.1.162/24 RealServerA:192.168.1.167/24 RealServerB:192.168.1.168/24 GATEWAY:192.168.1.1 DNS:192.168.1.1 配置监控检测,测试节点移除

  37. Demo 演示视频

  38. LVS Keepalived • keepalived • http://keepalived.sourceforge.net • Keepalived在这里主要用作RealServer的健康状态检查以及DR调度Master主机和BackUP主机之间failover的实现 • 当网卡就可以实现(主备监听) VRRP • 提示:在centos 5.3 上有异常

  39. VRRP:Virtual Router Redundancy Protocol(虚拟路由器冗余协议 • 虚拟路由器冗余协议(VRRP)是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。

  40. LVS Keepalived • Keepalived • keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。 • Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: • Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。 • Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。 • Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

  41. Demo 演示视频

  42. heartbeat ldirectord • heartbeat • http://www.linux-ha.org • Heartbeat • heartbeat是一种心跳检测机制。他可以让两台服务器(Master Server 和Slave Server)互为备份。Heartbeat的中文是“心跳检测”。Slave Server利用heartbeat来检测Master Master的当前状态,当Master Server不能工作时(如:down机)Slave Server通过heartbeat来接管Master Server的所有工作,这个接管过程在10秒以内完成,对用户来说没有什么察觉。Heartbeat中包含一个IP take over(IP 地址接管)的功能,此功能是通过ARP欺骗的手段来完成的。

  43. heartbeat ldirectord • ldirectord工作原理: • ldirectord需要在每台真实服务器web服务器的根目录下建立你在配置文件所指定的文件与内容,然后ldirectord通过循环检查此文件来确定真实服务器是否存活,如果不存活,则自动将其权重设为0,以确保后面客户的连接不会再导向失效的真实服务器,如果真实服务修复上线后,则其又将它的权重设为以使它能够继续为客端连接提供服务。ldirectord主要是通过调用ipvsadm来创建ipvs虚拟服务器表。 • "ldirectord"(LinuxDirectorDaemon)可以对服务和物理服务器进行监测,被广泛地用于http和https等服务。它是专门为LVS(LinuxVirtualServer)监控而编写的,不仅能从heartbeat的配置文件/etc/ha.d/xxx.cf中读取所有有关IPVS(IPVirtulServer)路由表配置的信息,还可以方便地被heartbeat管理(比如由heartbeat来启动和停止ldirectord服务)。

  44. Demo 演示视频

  45. LVS的应用延伸 • Web站点负载(LAMP /J2EE /Lighttpd) • 结合Squid服务成为CDN • 结合MySQL Cluster成为MySQL高性能高可靠群集 • 基于LVS的二次开发

  46. 在CU上发起的两个项目 • 计划发起一个项目:基于Centos或Ubuntu重构OS 最新进展整合Discuz • http://linux.chinaunix.net/bbs/thread-1062281-1-1.html • [集群] LVS-HOWTO中文翻译计划,感兴趣加入群72050696 • http://linux.chinaunix.net/bbs/viewthread.php?tid=1037724

More Related