1、大规模站点构建框架。
http:状态
keep-alive:长连接
cookie:session
cluster:集群
构建高可扩展性系统的重要原则;在系统内部尽量避免串行化和交互
HA:High Availability
LB:Load Balancing
session复制
memcached:内存缓存服务器
key-value:键值匹配
2、lvs的基础原理
LB: (应用层、传输层)
软件:
lvs(传输层)
haproxy, nginx (应用层)
硬件:
F5 BIG-IP
Citrix Netscaler
A10 A10
Array
Redware
HA:
heartbeat
corosync + pacemaker
RHCS: cman + rgmanager
cman + pacemaker
keepalived
HP:
hadoop
lvs: Linux Virtual Server
四层路由,四层交换:根据目标地址和目标端口实现请求转发,lvs工作在内核中并监听在input链上,访问请求到达本机后prerouting转到input链。lvs查看是否是自己监听的ip:port,如果是就强行转发到postrouting把访问请求转发到后台真实主机上。
iptables/netfilter
netfiler: PREROUTING --> INPUT --> FORWARD --> OUTPUT --> POSTROUTING
lvs: ipvsadm/ipvs
ipvs: netfilter
集群服务:tcp、udp。IP:PORT
LVS的术语:
director/real server
IP:
VIP:Virtual IP
DIP: Director IP
RIP: Real Server IP
CIP:Client IP
lvs的类型:
lvs-nat
Network Address Translation(网络地址转换)
lvs-dr
Direct Routing(直接路由)
lvs-tun
Tunneling(隧道)
nat类型的特性:
RS应用使用私有地址;RS的网关必须指向DIP,RIP和DIP必须在同一个网段内;
请求和响应都要经过Director;高负载场景中,Director易成为性能瓶颈;
支持端口映射;
RS可以使用任意OS;
最少2块网卡
dr类型的特性:
保证前端路由将目标地址为VIP的报文统统发往Directory,而不能是RS;
修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求;
RS可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过RIP对其直接访问;
RS跟Directory必须在同一物理网络中;
请求报文经由Director,但响应报文必须不能经过Director;
不支持端口映射;
RS可以是大多数常见的OS;
RS的网关绝不允许指向DIP;
一块网卡即可
tun类型的特性:
RIP、VIP、DIP全部是公网地址;
RS的网关不会也不可能指向DIP;
请求报文经由Director,但响应报文必须不能经过Director;
不支持端口映射;
RS的OS必须支持隧道功能;
fullnat:淘宝自行开发的模型
3、lvs调度方法及nat模型的实现
Director :eth0:192.168.146.137(dip)
eth1:192.168.5.28(已该网卡地址做vip)
node1:eth0:192.168.146.131 (网关必须指向dip)
node2:eth0:192.168.146.138 (网关必须指向dip)
注意:网卡转发和rs中的默认网关都需要设置
route add default gw 192.168.146.137:设定默认网关
lvs scheduler:
grep -i 'ipvs' /boot/config-2.6.32-358.el6.x86_64:显示内核中和ipvs相关选项。
grep -i 'vs' /boot/config-2.6.32-358.el6.x86_64:显示相关
静态方法:根据算法本身进行调度。
rr:round robin轮询,轮流调度。
wrr:weighted round robin,加权轮询,根据设定权重调度
sh: source hashing,来自同一个源地址请求将一直定向于同一个rs中,session保持
dh: destination hashing, 目标地址hash,
route add default gw 192.168.146.137 :指定默认网关
动态方法:根据算法和rs状态进行调度。
lc: least connection,最少连接,根据机器连接数调度。Overhead=Active*256+Inactive,活动连接数*256+非活动连接数
wlc:weighted least connection:Overhead=(Active*256+Inactive)/weight,活动连接数*256+非活动连接数/权重
sed: shortest expection delay:Overhead=(Active+1)*256/weight
nq: Never Queue:连接来后先每台rs发一个,之后用sed方式计算。
lblc: Locality-Based Least Connection:
lblcr:Replicated lblc:带复制功能的lblc
安装lvs管理工具:
yum install -y ipvsadm:先安装ipvsadm,
curl http://192.168.146.1:测试web服务器是否正常工作
echo 1 > /proc/sys/net/ipv4/ip_forward:打开路由转发功能
ipvsadm -h:查看帮助
ipvsadm -A|E -t|u|f service-address [-s scheduler]:
-A:添加director上的vip相关信息, -E:修改
-t:tcp服务、-u:udp服务、-f:防火墙标记
service-address:指定ip和端口为集群服务,也称为vip。
-s: 调度算法,默认为wlc
例如:ipvsadm -A -t 192.168.5.28:80 -s rr:添加一个集群服务
ipvsadm -D -t 192.168.5.28:80:删除一个集群服务
为一个已经定义过的集群服务添加一个rs:
ipvsadm -a|e -t|u|f service-address -r server-address [options]:集群服务添加rs格式
-a:添加一个rs,-e:修改
-t:tcp服务、-u:udp服务、-f:防火墙标记
service-address:指定已定义过的集群服务。
server-address:添加rs,ip和端口。
options:为可选选项,一般常用选项:
-w:指定权重。
-g:指定为dr模型。不指默认为dr。
-i:指定为tun模型。
-m:指定为net模型。
例如:ipvsadm -a -t 192.168.5.28:80 -r 192.168.146.138 -m
查看ipvs:
ipvsadm -L -n:查看一个集群服务
ipvsadm -L -n -c:查看连接转发信息
ipvsadm -L -n --stats:统计各rs连接情况
ipvsadm -L -n --rate:速率,平均数
ipvsadm -L -n --exact:精确值
删除集群服务:
-D:例如: ipvsadm -D -t 192.168.5.28:80:删除一个集群服务
清除集群服务:
-C:例如:ipvsadm -C
保存集群服务:
-S:例如:ipvsadm -S > /path/file_name
读取文件:
-R:例如:ipvsadm -R < /path/file_name
4、lvs dr模型及lxc虚拟化
session持久机制方法:
session绑定,始终将来自同一个源ip的请求转发到同一台rs,没有容错能力,有损负载均衡效果。可以通过调度算法实现sh
session复制,在rs之中同步所有的session,每个rs拥有所有集群session信息,对大规模集群不适用。
session服务器,用单独部署的服务器节点管理所有的session。
dr模型实现:vip、dip和rip必须在同一个物理网络中,中间不能有路由器拆封包信息。
Director:DIP, VIP
RS:RIP, VIP
RS: 配置内核参数,每台服务器所有提供服务的网络接口都需要配置相关信息。
arp_ignore: 如何响应接收ARP地址请求;0表示全部响应;1表示仅在请求的地址配置在请求报文的接口进行响应;
arp_announce: 如何通告本地地址;0表示通告全部;2表示仅通告网络直连的接口地址;
dr模型:
dip:192.168.5.7
vip:192.168.5.88
rip1:192.168.5.9
rip2:192.168.5.16
ifconfig eth1:0 192.168.5.88/24:添加vip
为rs设定网卡工作特性内核参数,每台rs都需要设定。
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 192.168.5.88 netmask 255.255.255.255 broadcast 192.168.5.88 up
route add -host 192.168.5.88 dev lo:0
测试响应服务器网卡amc地址:ping vip(ping 192.168.5.88)
arp -a:查看vip是由那个服务器的网卡mac地址响应。