网站集群架构设计LVS实现网络负载均衡实例精讲 清楚为什么会出现LVS LVS能够做到的 LVS实现方式 LVS需要High Availability LVS的应用延伸互联网的发展 Unix诞生于1969年 1987商业化的互联网诞生 1990年互联网的膨胀在继续群集概念的出现 人口大爆炸,男的比女的多3700万,都去上网于是服务器吃不消了,有人提出了群集、云-概念解决之道 Html语法URL重定向 Location 返回代码 早前的DNS的多个A记录 负载均衡产品 F5硬件 GSLB服务端应用负载均衡 从程序解决开源解决之道 节约采购硬件成本、减少开发难度 基于开源应用软件的Modules解决之路 apache mod_geoip mod_proxy_balancer mod_proxy_ajp nginx GEO Module tomcat sessions 1998年5月创立LVS 成为了Linux内核的一部分 效率高 真实运行的Web proxy集群系统 什么是LVS LVS是章文嵩博士发起和领导的优秀的集群解决方案,许多商业的集群产品,比如RedHat的Piranha等,都是基于LVS的核心代码的。
LVS是一个开源的软件,在LINUX平台下实现基于IP负载均衡技术和内容请求分发技术LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器http:/www.linuxvirtualserver.org/http:/zh.linuxvirtualserver.org/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/高性能的调度器 LVS集群采用IP负载均衡技术。
调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,结合健康检测功能调度器自动屏蔽掉服务器的故障,结合High Availability技术从而将一组服务器构成一个高性能的、高可用的虚拟服务器整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性LVS不能做到的 机器数量需要多 Nginx 在一个主机上就可以实现很好的负载 基于IP的调度算法不能实现基于语意的调度 对于应用程序的sessions需要借助其他方式 对于数据库RAC、REPLICATION不同 Google file system,Bigtable,Mapreduce(Hadoop开源的可运行于大规模集群上的分布式并行编程框架)典型LVS结构 一般来说,LVS集群采用三层结构,负载调度器、服务器池、共享存储主要部分组成LVS的三个部分 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务三种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负载均衡技术VS/NAT的体系结构 半连接的TCP有限状态机 VS/TUN的体系结构 VS/DR的体系结构 调度算法 轮叫调度(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)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 ipvsadm常用命令 增加调度服务 ipvsadm-A-t 虚拟服务地址:服务端口-s 调度算法 增加真实服务器ipvsadm-a-t 虚拟服务地址:服务端口-r 真实服务地址 g工作模式 删除真实服务器ipvsadm-d-t 虚拟服务地址:服务端口-r 真实服务地址 g工作模式 删除调度服务 ipvsadm-D-t 虚拟服务地址:服务端口-s 调度算法 查看调度状态 ipvsadm ln ipvsadm-lnc状态同步 主节点 ipvsadm-start-daemon master-mcast-interface eth0 从节点 ipvsadm-start-daemon backup-mcast-interface eth0session会话保持Persistence -p persistent timeout 持久稳固的服务。
这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理timeout 的默认值为300 秒解决这个问题,最有效的办法就是在后端web节点间实现session复制,用户在任何一个真实web节点上的session发生变化时,通过一定的策略同步复制到其它web节点上调度器与真实服务器配置 在调度器上 设置VIP调度地址 开启IP转发ifconfig eth0:0 虚拟服务地址 netmask 255.255.255.255 broadcast 虚拟服务地址 uproute add-host 虚拟服务地址 dev eth0:0echo 1 /proc/sys/net/ipv4/ip_forward调度器与真实服务器配置 在真实服务器上 设置VIP应答地址 屏蔽arp请求ifconfig lo:0 虚拟服务地址 netmask 255.255.255.255 borcast 虚拟服务地址 uproute add-host 虚拟服务地址 dev lo:0echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce RealServer标准配置方式编辑/etc/sysconfig/network-scripts/ifcfg-lo:0 设置VIP地址DEVICE=lo:0IPADDR=192.168.1.160#VIP地址NETMASK=255.255.255.255 BROADCAST=192.168.1.160#广播地址设置为VIP地址ONBOOT=yesNAME=loopback编辑/etc/sysctl.conf 设置禁用arpnet.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.lo.arp_announce=2net.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2演示环境 采用VS/DR模式,通过ipvsadm命令方式建立演示一个典型的环境:一个dr节点、两个realserver节点运行WEB服务。
VIP:192.168.1.160/24DR:192.168.1.161/24RealServerA:192.168.1.167/24RealServerB:192.168.1.168/24GATEWAY:192.168.1.1DNS:192.168.1.1Demo 演示视频问题 配置脚本问题 DR节点成为单点故障源 无RealServer的监控状态检测LVS需要High AvailabilityLVS需要High Availability LVS Piranha LVS heartbeat ldirectord LVS KeepalivedLVS Piranha piranha为REDHAT开发的一个LVS集群管理工具叫Piranha,用于控制LVS集群,并提供了一个图形化的配置界面Piranha-Load-balanced Web and FTP Clusters piranha-gui service pulse service Linux Virtual Server Administration http:/ GET/HTTP/1.0rnrnPiranha安装 Piranha是调度节点的配置,RealServer节点的配置仍不能缺少 rs节点设置VIP rs节点禁用ARP 对于centos yum-y install piranha ipvsadm 不能使用yum需要安装如下包(具体版本因OS不同)php-common php-cli php ipvsadm piranhaPiranha配置文件/etc/sysconfig/ha/lvs.cf 添加删除节点 更改调度服务定义 更改参数设置 更改后重新启动pulsePiranha结合Kickstart定制 结合Kickstart%post脚本定制 预定义 修改lvs.cf 快速 采用VS/DR模式,通过Piranha方式建立演示一个典型的环境:一个dr节点、两个realserver节点运行WEB服务。
VIP:192.168.1.160/24DR:192.168.1.161/24BDR:192.168.1.162/24RealServerA:192.168.1.167/24RealServerB:192.168.1.168/24GATEWAY:192.168.1.1DNS:192.168.1.1配置监控检测,测试节点移除Demo 演示视频LVS Keepalived keepalived http:/ Keepalived在这里主要用作RealServer的健康状态检查以及DR调度Master主机和BackUP主机之间failover的实现 当网卡就可以实现(主备监听)VRRP 提示:在centos 5.3 上有异常VRRP:Virtual Router Redundancy Protocol(虚拟路由器冗余协议 虚拟路由器冗余协议(VRRP)是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。
LVS KeepalivedKeepalivedkeepalived是一个类似于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将把服务器从服务器群中剔除Demo 演示视频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欺骗的手段来完成的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服务)。
Demo 演示视频 Web站点负载(LAMP/J2EE/Lighttpd)结合Squid服务成为CDN 结合MySQL Cluster成为MySQL高性能高可靠群集 基于LVS的二次开发 计划发起一个项目:基于计划发起一个项目:基于Centos或或Ubuntu重构重构OS 最新进展整合最新进展整合Discuz http:/ 集群集群 LVS-HOWTO中文翻译计划,感兴中文翻译计划,感兴趣加入群趣加入群72050696 http:/。