LB负载均衡的目的是为了提高访问的并发性和服务器的性能。实现 LB 的方式主要有软件方式和硬件方式。软件方式实现的软件有LVS工作于传输层、nginx工作于应用层haproxy工作于传输层和应用层硬件方式实现的软件有 BIG-IPF5,A10A10等。这里主要介绍软件方式实现 LB。 lvs方式实现 LB原理部分一、lvs介绍lvsLinux Virtual Server,Linux虚拟服务是工作在第四层的一款软件。是工作在内核的netfilter模块上的类似于iptables的工作模型。它是一个前端调度器Director,由它来具体实现负载均衡。它的工作原理如下图
cip请求客户端的 ip 地址。 vip是lvs调度器的 ip 地址通常也是客户端请求服务的的目标 ip 地址。 dip: 是directory和后端 real serveer 之间通信使用的 ip 地址。 rip: 是提供真正服务的real server的 IP 地址。 Director是lvs的前端调度器是ipvs的核心组件。 Real Server: 是后端真正提供服务的服务器。 lvs在内核中是由ipvs实现具体的数据包转发包括软发到后端那个real server、响应报文如何工作在netfilter的INPUT链上在此处决定是否进行数据包的转发。可以使用ipvsadm工具配置 ipvs 规则。 二、lvs的调度算法(Scheduler)调度算法是在Directory转发集群数包的时候使用的具体算法目的是为了选择哪个后端Real Server服务器。ipvs代码必须提供的调度方法。 如何查看自己的内核是否支持ipvs功能以及支持的算法
静态方法仅考虑调度算法进行调度RR: round robin、WRR: weighted 轮询 、加权轮询实现了起点公平。新的连接请求被轮流分配至各RealServer算法的优点是其简洁性它无需记录当前所有连接的状态所以它是一种无状态调度。轮叫调度算法假设所有服务器处理性能均相同不管服务器的当前连接数和响应速度。该算法相对简单不适用于服务器组中处理性能不一的情况而且当请求服务时间变化比较大时轮叫调度算法容易导致服务器间的负载不平衡 SHSource Hash 源地址hash,目的是session保持。意义来源于同一源地址的CIP请求会被定向到同一RS。它根据请求的源IP地址作为散列键Hash Key从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载将请求发送到该服务器否则返回空。它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外它的算法流程与目标地址散列调度算法的基本相似。在实际应用中源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中它们可以保证整个系统的唯一出入口。 DH: Destination Hash 目标地址Hash。是针对目标IP地址的负载均衡但它是一种静态映射算法通过一个散列Hash函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址作为散列键Hash Key从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载将请求发送到该服务器否则返回空。 动态方法根据调度算法和当前RS的负载情况进行调度,讲究结果公平LC: Least Connection 最少连接 如何监控一般情况是根据tcp协议的计数等相关信息判断 Overhead = Active * 256 + Inactive 表示负载情况越小说明负载越小,会优先选择 WLC: weigthed Overhead = (Active * 256 + Inactive)/weight 默认机制 SED: shortest expection dalay 最短期望连接 Overhead = (Actived + 1)/weight目的是为了让权重大的优先匹配。问题权重小的可能一直空的。 NQ: Never Quene 工作机制是先每一个 Real Server 都请求一次。 LBLC: locality-based Least connection LBLCR: Replicated LBLC,带复制的LBLC 三、lvs的工作模型工作模型可以这么理解就是 LB 的Real Server接收到报文到底以哪种方式响应给客户端。lvs原生态支持的类型有NAT网络地址转换、DR直接路由、TUN隧道。 NAT模型的工作原理
DR的原理大致如下
2、RS可以使用私有地址也可以使用公网地址 TUN的大致原理
补充随着互联网的出现了lvs的第四种模型。
FullNat模型是基于NAT模型的扩展可实现局域网内可以有子网的情况。实现方式同时修改请求报文的源地址和目标地址。 NAT的优点1)可以隐藏内部rip地址安全2)配置简单 四、ipvs配置工具ipvadmipvsadm是配置ipvs规则的工具和iptables类似。 常用的用法
常与的option的有
四、防护墙标记和持久连接1、防护墙标记借助netfilter的mangle将作为集群服务的请求报文打标记在PREROUTING链上完成。这样做的目的后者说是好处是只要是防火墙标记相同的就可以认为同一集群服务。例如在访问web服务时有用http协议的也有用https协议的此时就需要在director处定义2个集群服务这样可以实现功能。但是管理起来不方便防火墙标记就可以解决这样的困扰。 具体做法(例如将http 和 https 服务定义成统一的集群服务) 1)iptables -t mangle -A PREROUTING -d {vip} -p tcp -m mulitport --dports 80 -j MARK --set-mark 10 2)基于mark定义集群服务 ipvsadm -A -f 10 -s rr ipvsadm -a -f 10 -r {rip} -g -w 1 2、持久连接持久连接是无论使用什么调度算法持久连接都能保证指定的一段时间内来自同一客户端的请求始终低定向到同个RS,其调度基准是集群服务。持久连接时基于内核中的持久连接模板persistent template来实现的基于ssl点对点实现全程加密实现数据安全。常见的持久连接类型 PCC:持久客户端连接 在基于tcp或udp定义集群服务时其端口为0。表示将来自客户端的所有请求都转发到后端的RS。基于客户端持久连接时来自同一个client的所有请求都被转发到同一RS. 示例ipvsadm -A -t vip:0 -p 60 -p指定持久连接的时间 PPC:持久端口连接 仅针对某一特定的服务启用的持久服务。单服务调度各个集群分开调度。 示例ipvsadm -A -t vip:80 -s rr -p 60 PFM:持久防火墙标记 持久防火墙标记单服务调度。可以通过防火墙标记来定义一个集群的多个端口。 示例ipvsadm -A -f 10 -p 60 实践部分一、示例NAT模型实验原理如下实验实现的目标是实现通过访问Director实现Discuz的访问。真正实现的discuz服务地后端的Real Sever从而实现负载均衡的效果。此时就必须要有单独的文件服务器和数据库服务器分别来存储像图片等的非结构数据和像账号、密码等的结构化数据。
操作系统CentOS 6.5 安装在VMware虚拟机上 配置步骤 在172.16.10.16
在172.16.10.22
![]()
在172.16.10.33可参照172.16.10.22步骤可完成。 在Director 上172.16.10.9 192.168.1.66
注意real sever和director的172.16.10.9属于同一局域网中在VMware中可以使用如下方式配置
二、示例DR模型1、vip和rip在相同的网络内实验原理图如下实现的目标是web服务。
解释 arp_announce:如何通告本地地址 0表示有arp请求时会通告本机所有网卡的mac地址。 默认 2 表示仅通过网络直连的接口的地址 arp_ignore:表示如何响应接收到的arp请求 0 表示请求的地址可以通过其他网卡响应 默认。 1 表示仅在请求的地址必须在请求报文接口进行响应 在172.16.10.33中
在172.16.10.22中 此配置可参照172.16.10.33配置配置基本相同 在Director172.16.10.9 172.16.10.20中
实验结果
三、防火墙标记和持久连接实验拓扑图如下,实验实现的目的是:使用防火墙标记实现将80和443端口实现持久连接。
1、提供IP地址和网关
httpd软件和mod_ssl软件
在192.168.1.202上 在192.168.1.202上的配置于192.168.1.201类似ip地址和测试页面不同。 在192.168.1.50172.16.0.50上
如何获得证书可以参照http://guoting.blog.51cto.com/8886857/1535032。这里说明一点的是RealServer1和RealServer2使用相同的证书。 结果说明
在访问web服务时最主要的一个功能是会话保持 session如何利用lvs实现呢此时只需要修改ipvs的规则如下
此时在访问到一个RealServer时会话会保持一段时间结果如下 至此所有配置完成。 本文出自 “逆水寒” 博客,请务必保留此出处http://guoting.blog.51cto.com/8886857/1550809 (责任编辑:IT) |