1,集群概念
2,LVS介绍
3,LVS实现
4,LVS高可用性
1,系统扩展方式:
Scale UP : 向上扩展,增强.
Scale Out : 向外扩展,增加设备,调度分配问题,Cluster.
2,Cluster:
集群,为解决某个特定问题将多台计算机组合起来形成单个系统.
3,Linux Cluster 类型:
LB : Load Balancing , 负载均衡
HA : High Availiablity ,高可用 , SPOF(single point of failure)
MTBF : Mean Time Between Failure 平均无故障时间
MTTR : Mean Time To Restoration ( repair ) 平均恢复前时间
A = MTBF / (MTBF + MTTR )
HPC : High-performance computing , 高性能 ,排名可参考(www.top500.org)
4,分布式系统:
分布式储存 : 云盘
分布式计算 : hadoop , Spark
LB Cluster 的实现;
硬件:
F5 Big-IP
Citrix Netscaler
A10 A10
软件:
lvs: Linux Virtual Server
nginx : 支持四层调度
haproxy : 支持四层调度
ats : apache traffic server , 由yahoo!捐助
perlbal : Perl 编写
pound
基于工作的协议层次划分 :
传输层(通用):DPORT
LVS:
nginx : stream
haproxy : mode tcp
应用层(专用): 针对特定协议,自定义的请求模型分类
proxy server :
http : nginx , httpd , haproxu(mode http) , ...
fastcgi : nginx , httpd , ...
mysql : mysql-proxy , ...
会话保持 : 负载均衡
(1) session sticky : 同一用户调度固定服务器
Source IP : LVS sh算法(对某一特定服务而言)
Cookie
(2)session replication : 每台服务器拥有全部session
session multicast cluster
(3) session server : 专门的session服务器
Memcached , Redis
HA集群实现方案:
keepalived : vrrp 协议
ais : 应用接口规范
heartbeat
cman + rgmanager(RHCS)
coresync_pacemaker
LVS: Linux Virtual Server , 负载调度器 , 集成内核
VS : Virtual Server , 负责调度
RS : Real Server , 负责真正提供服务
L4 : 四层路由器或交换机
工作原理: VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS.
iptables/netfilter :
iptables : 用户空间的管理工具
netfilter : 内核空间上的框架
流入: PREROUTING --> INPUT
流出: OUTPUT --> POSTROUTING
转发: PREROUTING --> FORWARD --> POSTROUTING
DNAT: 目标地址转换
我自己按照理解画的草图,网上有很多详细的(这是一个VS/NAT模式的)
lvs集群类型中的术语:
VS : Virtual Server , Director Server(DS)
Dispatcher(调度器) , Load Balancer
RS : Real Server(lvs) , upstream server(nginx)
backend server(haproxy)
CIP : Client IP
VIB : Virtual Server IP
RIP : Real Server IP
访问流程 : CIP <--> VIP == DIP <--> RIP
lvs : ipvsadm/ipvs
ipvsadm : 用户空间的命令行工具 , 规则管理器
ipvs : 工作与内核空间的netfilter的INPUT钩子上的框架
lvs集群的类型:
lvs-nat : 修改请求报文的目标IP , 多目标IP的DNAT
lvs-dr : 操纵封装新的MAC地址
lvs-tun : 在原请求IP报文之外新加一个IP首部
lvs-fullnat : 修改请求报文的源IP和目标IP
lvs-nat : 本质是多目标IP的DNAT , 通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发.
(1) RIP和DIP必须在同一个IP网络 , 且应该使用私网地址 ; RS的网关要指向DIP
(2) 请求报文和相应报文都必须经由Director转发 , Director易于成为系统瓶颈
(3) 支持端口映射 , 可修改请求报文的目标PORT
(4) VS必须是Linux系统 , RS可以是任意OS系统
LVS-DR : Direct Routing , 直接路由 , LVS默认模式 , 应用最广泛 , 通过为请求报文重新封装一个MAC首部进行转发 , 源MAC是DIP所在的接口的MAC , 目标MAC是某挑选出的RS的RIP所在接口的MAC地址 ; 源IP/PORT , 以及目标IP/PORT均保持不变
Director和各RS都配置有VIP
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director :
在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle -ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别
arp_announce
arp_ignore
(2) RS的RIP可以使用私网地址 , 也可以是公网地址 ; RIP与DIP在同一IP网络 ; RIP的网关不能指向DIP , 以确保响应报文不会经由Director.
(3) 请求报文要经由Director , 但响应报文不经由Director , 由RS直接发往Client
(5) 不支持端口映射(端口不能修改)
(6) RS可以使用大多数OS系统
体系结构:
DR模式IP包调度过程:
lvs-tun:
转发方式 : 不修改请求报文的IP首部(源IP为CIP , 目标IP为VIP) , 而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP) , 将报文发往挑选出的目标RS ; RS直接响应给客户端(源IP是VIP , 目标IP是CIP)
(1) DIP , VIP , RIP 都应该是公网地址
(2) RS的网关不能 , 也不可能指向DIP
(3) 请求报文要经由Director , 但响应不能经由Director
(4) 不支持端口映射
(5) RS的OS必须支持隧道功能
vs/tun体系结构:
TUN模式IP包调度过程:
lvs-fullnat : 通过同时修改请求报文的源IP地址和目标IP地址进行转发 ; CIP --> DIP , VIP --> RIP
(1) VIP是公网地址 , 但RIP和DIO是私网地址 , 且通常不在同一IP网络 ; 因此 , RIP的网关一般不会指向DIP
(2) RS收到的请求报文源地址是DIP , 因此 ,只需响应给DIP ; 但Director还要将其发往Client
(3) 请求和相应报文都经由Director
(4) 支持端口映射;
注意 : 此类型kernel默认不支持
lvs-nat与lvs-fullnat : 请求和响应报文都经由Director
lvs-nat : RIP的网关要指向DIP
lvs-fullnat : RIP和DIP未必在同一IP网络 , 弹药可以通信
lvs-dr 与 lvs-tun : 请求报文要经由Director , 但响应报文由RS直接发往Client
lvs-dr : 通过封装新的MAC首部实现 , 通过MAC网络转发
lvs-tun : 通过在原IP报文外封装新IP头实现转发 , 支持远距离通信