Linux Cluster 类型分类:
负载均衡集群:Load balancing 高可用集群:High Avaiability 高性能集群:High Performance
及分布式系统
LB:LB的实现是在提供相同服务的多台服务器之前添加调度器即负载均衡集群
工作协议层来划分;
tcp:根据请求报文中的目标地址和端口进行调度; 应用层:根据请求的内容进行调度,而且此种调度为“代理”方式;
lvs: Linux Virtual Server,虚拟服务, 由章文嵩研发工作于layer4 上的协议根据目标地址和端口作出转发与否的决策,根据调度方法作出转发至哪一个后端的决策; 组成部分:ipvs,ipvsadm Ipvs框架,工作于内核空间netfilter的input链上,通过规则把匹配到的报文改写送至FORWARD链通过POSTROUTING,经由Director IP送达指定的Real server ipvsadm:工作于用户空间为ipvs提供参数规则同于iptables netfilter; ipvsadm用于在ipvs上定义集群服务:同时也得定义此集群服务对应于有哪个后端主机可用; 根据所指定的调度方法(算法)作出调度决策; 工作原理:ipvs工作于netfilter的input链上;通过ipvsadm定义集群服务器及指定的调度方法作出调度决策 lvs4大模型:
一、lvs-nat(masquerade):地址伪装
类似于DNAT,但支持多目标转发;
(1)RS ,RIP,必须为私有地址
(2)RS网关必须指定为RIP,请求响应报文经由Director,高负载场景中 Director易成为瓶颈 (3)支持端口映射
(4)RS可以使用任意类型的OS;
(5) RS与RIP必须与Director 的DIP必须在同一网络中 lvs-nat Director与Real server ,RIP的网关必须指向Director 适用场景: 适用于少量Real server的(因报文请求与回应必须经由Director, Director易成为瓶颈)可以隐藏内部RIP和DIP
二、lvs-dr(lvs-direct routing):直接路由 Director在实现转发时不修改请求的IP首部,而是通过直接封装MAC首部完成转发;目标MAC是Director根据调度方法挑选出某RS的MAC地址;拓扑结构有别有NAT类型;
架构特性: (1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Director 解决方案: 静态绑定:在前端路由直接将VIP对应的目标MAC静态配置为Director的MAC地址; arptables:在各RS上,通过arptables规则拒绝其响应对VIP的ARP广播请求; 内核参数:在RS上修改内核参数,并结合地址的配置方式实现拒绝响应对VIP的ARP广播请求; (2) RS的RIP可以使用私有地址;但也可以使用公网地址,此时可通过互联网上的主机直接对此RS发起管理操作; (3) 请求报文必须经由Director调度,但响应报文必须不能经由Director; (4) 各RIP必须与DIP在同一个物理网络中;如果不在同一个物理网络中源MAC和目的MAC就会被修改(不能通过路由转发,switch可以) (5) 不支持端口映射; (6) RS可以使用大多数的OS; (7) RS的网关一定不能指向Director; 适用场景:因响应报文不经过Director极大减轻了Director压力适用于大多数场景; 三、lvs-tuneling 隧道
lvs-tun: 不修改请求报文IP首部,而是通过IP隧道机制在原有的IP报文之外再封装IP首部,经由互联网把请求报文交给选定的RS; CIP;VIP DIP;RIP 架构特性: (1) RIP, DIP, VIP都是公网地址; (2) RS的网关不能,也不可能指向DIP; (3) 请求报文由Director分发,但响应报文直接由RS响应给Client; (4) 不支持端口映射; (5) RS的OS必须得支持IP隧道;
四、lvs-fullnat: 全地址转换 lvs-fullnat:通过请求报文的源地址为DIP,目标为RIP来实现转发;对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发;
架构特性: (1) RIP,DIP可以使用私有地址; (2) RIP和DIP可以不在同一个网络中,且RIP的网关未必需要指向DIP; (3) 支持端口映射; (4) RS的OS可以使用任意类型; (5) 请求报文经由Director,响应报文经由Director;
LVS算法分类:
静态方法:仅根据算法本身实现调度; RR:round-robin, 轮询;轮叫、轮调、轮流; WRR:weighted round-robin, 加权轮询;数值越大承载能力越强 例如权重RS1 1,RS2 2 则表示RS1承受1/3 RS2 承受2/3负载。 Overhear=conn(已分配的连接数)/weight(权重) SH:Sourceip Hashing,主要功能会话绑源地址哈希;把来自同一个地址请求,统统定向至此前选定的RS; DH:Destinationip Hashing, 目标地址哈希;把访问同一个目标地址的请求,统统定向至此前选定的某RS;
动态方法:根据算法及后端RS当前的负载状况实现调度; ACtive 正在建立连接或者传输数据的, inactive 保持连接状态尚未断开的连接 LC: least connection 最少连接算法 Overhead=Active(活动连接)*256+Inactive(非活动连接) WLC: weighted least connection 权重最少连接算法 第一次分配不均 第一次按序列 Overhead=(Active*256+Inactive)/weight SED:Shorted Expection Delay 最短期望延迟 缺点权重大的负载较大,权重小的负载小 Overhead=(Active+1)*256/weight NQ:Never Queue 永不排队 首先根据权重扫描 然后才根据算法排序 LBLC:Local-Based Least Connection,基于本地的最少连接 动态方式的DH算法; LBLCR:Replicated LBLC 带复制的LBLC
案列1、lvs-nat类型的web服务器集群 1、拓扑图
准备工作:
1、确保Director 主机 ip_forward 开启
1
| cat /proc/sys/net/ipv4/ip_forward #查看ip_forward 是否开启
|
2、 Real server 1 Real server 2 主机网关全部设置指向 DIP
1
2
3
4
5
6
7
8
9
| route add default gw 192.168.1.10 #实验环境使用了临时配置方法
Director ipvs设置:
ipvsadm -A -t 172.16.10.10:80 -s wcl # 创建集群服务 172.16.10.10 tcp 80 端口,并使用wcl权重最少算法
ipvsadm -a -t 172.16.10.10:80 -r 192.168.1.11:80 -m -w 3 #添加Real server1 -m 指定为lvs-nat模型 权重设置3
ipvsadm -a -t 172.16.10.10:80 -r 192.168.1.12:80 -m -w 5 #添加Real server1 -m 指定为lvs-nat模型 权重设置5
|
使用 ipvsadm -L -n --stats 列出统计数据
使用 ipvsadm -L -n --rate 列出速率信息
案列2、lvs-nat类型的telnet 服务
拓扑图同上
1
2
3
4
5
6
| Director ipvs设置:
ipvsadm -A -t 172.16.10.10:23 -s rr # 创建集群服务 172.16.10.10 tcp 23 端口,并使用rr轮询算法
ipvsadm -a -t 172.16.10.10:23 -r 192.168.1.11:23 -m #添加Real server1 -m 指定为lvs-nat模型 因为使用轮询算法权重无需设置
ipvsadm -a -t 172.16.10.10:23 -r 192.168.1.12:23 -m #添加Real server1 -m 指定为lvs-nat模型 因为使用轮询算法权重无需设置
|
登录测试:
|