[TOC]
reference: 马哥教育视频
一. 理论
1. 系统扩展的方式
scale up: 向上扩展 (换主机)
scale out: 向外扩展 (加主机)
硬件价格翻倍, 然而性能却不一定是翻倍的, 显然是加主机更合理一点
2. 集群类型
-
LB: 负载均衡 load banlancing
-
HA: 高可用性 high availability
availability: 90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%
-
HP: 高性能 high performancing
-
大规模并行处理集群
3. 对于一个稳定的系统来讲, 需要注意以下四点:
- 可扩展性
- 可用性
- 容量 ( 容纳量)
- 性能 (单位时间内的通过量 --> 响应时间)
4. 系统运维的技术方向:
可用 --> 标准化 --> 自动化
5. 构建高扩展性系统的重要原则:
在系统内部尽量避免串行化和交互
6. GSLB与SLB
- Global Service Load Balancing (全局)
- Service Load Balancing (本地)
7. 总结
- 分层
- 分割
- 分布式
- 分布式应用
- 分布式静态资源
- 分布式数据和存储
- 分布式计算 (hadoop)
8. LB集群的实现
硬件:
- F5, BIG-IP
- Citrix --> NetScaler
- A10 --> A10
- Array
- Redware
软件:
- lvs
- haproxy
- nginx
- ats (apache traffic server)
- perlbal
9. 基于工作的协议层次划分:
传输层:
lvs, haproxy (mode tcp)
应用层:
haproxy, nginx, ats, perlbal
二. LVS
1. lvs
-
linux virtual server
-
l4: 四层交换, 四层路由
-
根据报文的目标ip和port将其转发至后端主机集群中的某一台主机(根据挑选算法)
netfilter:
PREROUTING --> INPUT (lvs在这一条链上做了操作, 强行转发至POSTROUTING)
PREROUTING --> FORWARD --> POSTROUTING
OUTPUT --> POSTROUTING
2. lvs具体实现
ipvsadm/ipvs
ipvsadm:
用户空间的命令行工具, 用于管理集群服务
ipvs:
工作在内核netfilter INPUT钩子上
如何验证内核是否支持lvs功能?
grep -i -A 10 'ipvs' /boot/config*
支持TCP, UDP, AH, ESP, AH_ESP, SCTP等诸多协议
3. lvs arch:
调度器: director, dispatcher, balancer
RS: real server
一些简称:
client ip: CIP
director virtual ip: VIP
director ip: DIP
real server ip: RIP
4. lvs type
- lvs-nat
- lvs-tun (ip tunneliing)
- lvs-fullnat (keepalived)
- lvs-dr (direct routing)
5. lvs-nat
多目标的DNAT(iptables)
通过修改请求报文的ip地址(同时可能会修改目标端口)至挑选出来的某real server的RIP地址实现转发
RIP和DIP必须在同一网段
(1) RS应和DIP使用私有地址, 且RS的网关要指向DIP
(2) 请求和相应的报文均要经由director转发, 在较高负载均衡中, director可能成为瓶颈
(3) 支持端口映射
(4) RS可使用任意OS
(5) RS的RIP和director的DIP必须在同一网络
6. lvs-dr
direct routing (director与RS必须在同一物理网络)
通过修改请求报文的目标MAC地址进行转发
(1) 保证前端路由器将目标ip为VIP的请求报文发送给director
解决方案:
静态绑定
arptables
修改RS主机内核参数
(2) RS的RIP可使用私网或者公网地址
(3) RS和director必须在同一物理网络
(4) 请求报文经由director调度, 但响应报文一定不经由director
(5) 不支持端口映射
(6) RS可以使大多是OS
(7) RS的网关不能指向DIP
7. lvs-tun
不修改请求报文的首部, 而是在原有的ip首部 (cip -> vip)之外, 再封装一个ip首部 (dip -> rip)
(1) RIP, DIP, VIP全是公网地址
(2) RS的网关不能指向DIP
(3) 请求报文必须经由director调度, 但响应报文一定不经由director
(4) 不支持端口映射
(5) RS的OS必须支持隧道功能
8. lvs-fullnat
director通过同时修改请求报文的目标地址和源地址进行转发
(1) VIP: 公网地址. RIP和DIP: 私网地址, 且两者必须在同一网络中
(2) RS接收到请求报文的源地址为DIP, 因此要相应给DIP
(3) 请求和相应都经过director
(4) 支持端口映射
(5) RS可使用任意OS
9. http (stateless)
session保持:
session绑定:
source ip hash
cookie
session集群(复制)
session服务器 (共享存储, 持久存储)
10. lvs scheduler
静态方法:
仅根据算法本身进行调度
- RR: round robin 轮循
- WRR: weight round robin 加权轮循
- SH: source hash 实现session保持的机制(有损负载均衡)
- 将来自同一ip的请求始终调度至同一RS
- DH: destination hash
- 将对同一个目标的请求始终发送至同一个RS
动态方法:
根据算法及RS当前的负载状态进行调度
当前负载: overhead
- LC: least connection
- overhead = active * 256 + inactive
- WLC: weight least connection
- overhead = (active * 256 + inactive) / weight
- weight: 当前服务器的权重
- SED: shorted expection delay 最短预期延迟
- overhead = (active + 1) * 256 / weight
- NQ: never queue
- SED算法的改进, 类似于 RR + SED
- LBLC: locality-based LC 基于本地的最少连接
- 动态的DH算法, 正向代理情况下的cache server调度
- LBLCR: locality-based least connection with replication
- 带复制的LBLC算法
11. ipvsadm集群服务:
ipvsadm作用:
-
管理集群服务
-
管理集群中的RS
(1) 一个ipvs主机可同时定义多个cluser service
tcp, udp
(2) 一个cluser service上至少应该有一个real server
定义时: 指明lvs-type以及lvs scheduler
一些基本概念以及命令中的用法:
service-address 集群服务地址
tcp: -t ip:port
udp: -u ip:port
fwm: -f mark (用作防火墙标记)
server-address RS地址
ip[:port]
lvs-type:
-g: gateway, dr (默认)
-i: ipip, tun
-m: masquerade, nat
-s scheduler
默认为WLC
FWM:
# 将两种集群定义成一个进行调度(功用: 将共享一组RS的集群服务器统一进行定义):
# OSTROUTING:
# -j MARK --set-mark 10
# ipvs:
# -A -f 10
# 示例: 在director的netfilter的mangle表的PREROUTING定义"打标"规则
# 先打标记:
iptables -t mangle -A PREROUTING -d 192.168.0.10 -p tcp --dport 80 -j MARK --set-mark 10
# 上面的192.168.0.1为VIP
iptables -t mangle -L -n
# 再定义集群服务:
ipvsadm -A -f 10 -s rr
ipvsadm -a -f 10 -r 172.16.100.21 -g
ipvsadm -a -f 10 -r 172.16.100.22 -g
# 最后:
iptables -t mangle -A PREROUTING -d 192.168.0.10 -p tcp --dport 22 -j MARK --set-mark 10
管理集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
ipvsadm -D -t|u|f service-address
ipvsadm -C # 清空集群服务和集群服务中的RS
ipvsadm -L|l [options]
管理集群服务中的RS:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -C # 清空集群服务和集群服务中的RS
ipvsadm -L|l [options]
保存和重载:
ipvsadm -S [-n]
ipvsadm -R
置零计数器:
ipvsadm -Z [-t|u|f service-address]
网友评论