一.集群和分布式
1.1 集群
集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统。即当单独一台主机无法承载现有的用户请求量;或者一台主机因为单一故障导致业务中断的时候,就可以增加服务主机数,这些主机在一起提供服务,就叫集群。
类型:
LB(负载均衡);HA(高可用);HPC(高性能计算)
1.2 分布式
一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务。
1.3 集群与分布式的区别
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的,即通过提高单位时间内执行的任务数来提升效率,不会因个别主机无法响应而无法进行业务访问。
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务 分布式是以缩短单个任务的执行时间来提升效率的,若个别主机无法响应则会导致无法完成完整的业务,导致无法完成服务。
二.lvs运行原理
2.1 LVS概念
VS:调度器
RS:服务器
CIP:用户 IP
VIP: 调度器链接外网的IP
DIP: 调度器链接内网的IP
RIP: 服务器 IP
访问流程:CIP VIP == DIP RIP
2.2 lvs集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
2.2.1 nat模式
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发。
工作原理
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端
缺点:lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞。
部署NAT模式集群案例
实验环境
主机名 | ip | 角色 |
client | eth0:172.25.254.111/24 | 用户主机 |
lvs | eth0:172.25.254.100/24(VIP) eth1:192.168.0.100/24(DIP)仅主机 | 调度器 |
rs1 | eth0:192.168.0.10(RIP1) | web服务器1 |
rs2 | eth0:192.168.0.20(RIP2) | web服务器2 |
配置命令
client:
1.设置路由
dr-lvs:
1.安装ipvsadm(下图为主机已安装的图片)
2.设置内核路由功能
3.添加和查看调度策略
ipvsadm:
(1)管理集群服务中的增删改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A :添加
-E:修改
-Z:清空计数器
-C:清空lvs策略
-L:查看lvs策略
-t:tcp服务
-u:udp服务
-s:指定调度算法,默认为WLC -p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver -f #firewall mask 火墙标记,是一个数字
(2)管理集群中RealServer的增删改
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
-a:添加realserver
-e:更改realserver
-t:tcp协议
-u:udp协议
-f:火墙 标签
-r:realserver地址
-g:直连路由模式
-i:ip隧道模式
-m:nat模式
-w:设定权重
--rate :输出速率信息
4.关闭火墙
rs1/rs2:
1.设置路由(以rs1为例):
2.关闭rs的防火墙/允许http服务通过火墙
效果 :
2.2.2 dr模式
工作原理
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC
特点:
(1)Director和各RS都配置有VIP
(2)确保前端路由器将目标IP为VIP的请求报文发往Director
(3)在前端网关做静态绑定VIP和Director的MAC地址
部署DR模式集群案例
实验环境
主机名 | IP | 角色 |
client | eth0:172.25.254.111/24(CIP) | 客户端主机 |
route | eth0:172.25.254.100/24 eth1:192.168.0.100/24(仅主机) | 路由器 |
lvs | eth0:192.168.0.220/24(VIP)(仅主机) eth0:192.168.0.200/24(DIP)(仅主机) | 调度器 |
rs1 | lo:127.0.0.1/8 lo:192.168.0.220/32(VIP) eth0:192.168.0.10(RIP)(仅主机) | web服务器1 |
rs2 | lo:127.0.0.1/8 lo:192.168.0.220/32(VIP) eth0:192.168.0.20(RIP)(仅主机) | web服务器2 |
配置命令
client:
1.如nat模式设置
route:
2.设置内核路由功能
lvs:
1.添加和查看调度策略
2.若未关闭火墙则将其关闭
rs(以rs1为例):
解决rs的响应问题,使其不对外响应
效果:
2.2.3 tun模式
工作原理
1.客户端发送请求数据包,包内有源IP+vip+dport
2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给client
2.2.4 fullnet模式
特点:
fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director
4.支持端口映射
2.3 lvs持久链接
在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单 纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh算法,但是sh算法比较简单 粗暴,可能会导致调度失衡
解决方案
在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把 这个源的主机调度到了那个RS上 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS上。 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上
效果:
三.lvs的调度算法
3.1 lvs调度算法类型
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
3.2 lvs静态调度算法
1. RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
2. WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
3. SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往 第一次挑中的RS,从而实现会话绑定
4. DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS
3.3 lvs动态调度算法
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1. LC:least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活 动链接数)
2. WLC:Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight 3、SED:Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接
4. NQ:Never Queue,第一轮均匀分配,后续SED
5. LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6. LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS
四.防火墙标签解决轮询错误
以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
问题呈现:
RS1和RS2中安装mod_ssl并重启apache(以rs1为例)