linux群集的类型:LB,HA,HP
负载均衡集群:Load Balancing
高可用集群:High Availability
A = 平均无故障时间/(平均无故障时间+平均修复时间)
95%, 99%, 99.9%, 99.99%, 99.999%
高性能集群:High Performance
www.top500.org
分布式系统:
NoSQL: HBase, Redis
存储:MogileFS
文件系统:Ceph
LB集群调度器的实现:
工作协议层来划分
tcp:根据请求报文中的目标地址和端口进行调度
应用层:根据请求的内容进行调度,而且此调度为“代理”方式
软件:
tcp:lvs,haproxy,nginx,
http:haproxy,nginx,apache(proxy module,balancer module) ,ats(apache traffic server),squid,varnish
mysql:mysql-proxy
硬件:
F5:big-ip
citrix:netscaler
A10:A10
Array:
redware
lvs: Linux Virtual Server章文嵩
组成部分:
ipvs:工作在netfilter的input链接上:
ipvsadm:用于ipvs上定义集群服务,同时也得定义此群集服务对应于有哪个后端记住可用。根据所指定的调度方法做出调度决策。
支持的协议:tcp/udp/sctp/ah/esp/ah_esp
lvs术语:
host:
director:调度器
real server:RS
ip:
client:cip
director vittual ip:
directory ip:
real ip:rip
lvs的类型:
lvs-nat(masquerade): 地址伪装
类似于DNAT,但支持多目标地址转发。
它是通过修改请求报文的目标地址为根据调度算法所挑处的某RS的RIP来进行转发。
架构特性:
(1)RS应该使用私有地址,即RIP应该为私有地址,各RS的网关必须指向DIP。
(2)请求和相应报文都经由DIP转发;在高负载场景中,DIP容易成为瓶颈。
(3)支持端口映射
(4)Rs支持不同os
(5)Rs的RIP必须与director的dip的同一网络
dr(direct routing): 直接路由
director在实现转发时不修改请求的ip首部,而是通过直接封装Mac首部完成转发,目标MAC是director根据调度方法挑出某RS的mac地址
架构特性:
(1)保证前端路由器将目标地址为vip的请求报文通过arp地址解析后送往director
解决方案:
静态绑定:在前端路由器直接将对应的vip对应的目标mac静态配置为director的mac地址。
arptables:在各Rs上,通过arptables规则拒绝其相应对vip的arp广播请求。
内核参数:在Rs上修改内核参数,将结合地址的配置方式实现拒绝相应对vip的arp广播请求。
(2)Rs的Rip可以使用私有地址,但也可以使用公网地址,此时可通过互联网上的主机直接对此Rs发起管理操作。
(3)请求报文必须经由Director调度。
(4)各Rip必须与Dip在同一物理网络中。因为地址转发需要在mac地址封装来实现。
lvs-tun(tunneling):隧道模型
不修改请求报文的ip首部,而是通过ip隧道机制在原有的ip报文之外在封装ip。经由互联网把请求报文交给选定的Rs。
CIP;VIP;DIR;RIP
架构特性:
(1)RIP,DIP,VIP都是公网地址
(2)Rs的网关不能也不可能指向Dip
(3)请求报文由director分发,但相应报文直接由Rs相应给Client
(4)不支持端口映射
(5)RS的os必须支持ip隧道
full-nat:全nat
通过请求报文的源地址为DIP,目标地址为RIP来实现转发,对于相应报文而言,修改源地址为VIP,目标地址为CIP来实现转发。
架构特性:
(1)RIP,DIP可以使用私有地址。
(2)RIP和DIP可以不在同一个网络中,且RIP的网关未必需要指向DIP
(3)支持端口映射
(4)Rs的os可以使用任何类型
(5)请求报文经由Director,相应报文经由Director。
lvs scheduler:lvs调度
调度的10中方法:
[[email protected] /]# grep -i ‘IPVS’ -A 20 /boot/config-2.6.32-504.el6.x86_64
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
静态方法:仅根据算法本身来实现调度。起点公平
RR:Round-robin:轮询
WRR:weighted round-robin,加权轮询
SH:source ip hashing 源地址hash
DH:Destination ip Hashing 目标地址hash
动态方法:根据算法及后端Rs当前的负载状态来实现调度。结果公平
LC:least connection 最小连接
WLC: weighted least connection加权最小连接
SED:Shorted Expecton Delay 最短期望延迟
NQ:Never Queue 从不排队
LBLC:Local-Based Connection静动态方式的DH算法
LBLCR:Replicated LBLC 带复制的静动态方式DH算法
Session 保持:
Session Sticky session
Session Replication Cluster session
Session Server
lvs概念基础:
ipvsadm 命令的用法
管理集群服务:创建,修改,删除
命令格式: ipvsadm -A|E -t|u|f service-address [-s scheduler]
-A:添加
-E:修改
-t:承载的应用层协议为基于tcp协议提供服务器的,其service-address为 “VIP:PORT”, “172.16.249.26:80”
-u:承载的应用层协议为基于tcp协议提供服务器的,其service-address为 “VIP:PORT”, “172.16.249.26:80”
-f:承载的应用层协议基于tcp或者udp协议提供服务的协议,但此类报文会经由iptables/netfilter打标记,即为防火墙标记,其service-address的格式为“FWM” 如”10″
-s:调度方法 (默认的调度方法为:wlc)
删除: ipvadm -D -t|u|f service-address
管理集群服务的Rs:添加或修改
命令格式: ipvsadm -a|-e -t|u|f service-address -r service-address [-g|i|m] [-w weight]
-r service-address:指名Rs,service-addres格式一般为ip[:port],注意:只支持端口映射的lVS类型中才应该是显式定义此处端口。
如:-r 192.168.1.1:80
[-g|i|m]:lvs的类型
-g:gateway 为dr类型
-i:ipip 为tun类型
-m:masquerade 为nat类型
[-t weight]:当前RS的权重
注:此处仅对支持加权调度的schedule有意义。
删除:ipvsadm -d -t|u|f service-address -r server-address
清空所有群集服务的定义: ipvsadm -C
保存规则:
[[email protected] html]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
恢复规则:
[[email protected] html]# ipvsadm -R < /etc/sysconfig/ipvsadm
查看报文统计:
[[email protected] html]# ipvsadm -Ln –stats
列出当前速率:
[[email protected] html]# ipvsadm -Ln –rates
显示出精准值:
[[email protected] /]# ipvsadm -Ln –exact
清空计数数据:
[[email protected] /]# ipvsadm -Z
拓扑图:
网络描述:
在测试环境中,pc为物理机ip是172.16.250.81/16,
调度器有两块网卡地址分别为:eth0:172.16.249.26/16,eth1:192.168.1.4/24,
Rs1的ip是192.168.1.1/24
Rs2的ip是192.168.1.2/24
实验环境中网络连接方式:
172.16.249.26–桥接–物理机172.16.250.81
R1-eth0– R2-eth0—调度器eth1 -设置为vmnet2
设置ip:
测试环境所有的设置均为临时的,生成环境需修改配置文件永久生效。
[[email protected]调度器]# ifconfig eth0 172.16.249.26/16 up
[[email protected]调度器]# ifconfig eth1 192.168.1.4/24 up
[[email protected] R1]# ifconfig eth0 192.168.1.1/24 up
[[email protected] R2]# ifconfig eth0 192.168.1.2/24 up
[[email protected] R1]# route add default gw 192.168.1.4
[[email protected] R2]# route add default gw 192.168.1.4
[[email protected] 调度器]# echo “1” > /proc/sys/net/ipv4/ip_forward 在调度器上开启路由转发
[[email protected] /]# iptables -F 清除iptables的所有规则
[[email protected] /]# ipvsadm -A -t 172.16.249.26:80 -s rr 添加调度方式为rr轮询,
[[email protected] /]# ipvsadm -a -t 172.16.249.26:80 -r 192.168.1.1 -m -w 1
[[email protected] /]# ipvsadm -a -t 172.16.249.26:80 -r 192.168.1.2 -m -w 3
[[email protected] /]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.249.26:80 rr
-> 192.168.1.1:80 Masq 1 0 0
-> 192.168.1.2:80 Masq 3 0 0
在Rs1上抓包可以看到,Rs1跟调度器之间的通讯信息:
[[email protected] html]# tcpdump -i eth1 -nn host 192.168.1.1 and tcp port 80