LVS
LVS(linux virtual server)即linux虚拟服务器,是一个虚拟的服务器集群系统。
使用集群技术和Linux操作系统实现一个高性能,高可用的服务器,很好的可伸缩性(scalability),很好的可靠性(reliability),很好的可管理性(manageability).
contos7:
grep -i ipvs /boot/config-3.10.0-693.e17.x86_64
grep -i ipvs -C 10 /boot/config-3.10.0-693.e17.x86_64
yum install ipvsadm
rpm -ql ipvsadm
curl命令
lvs服务器:
需要两块网卡
启用Ipforward:
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p
sysctl -a | grep ip_forward
iptables -vnl
client:
需要桥接
RS1:
设置网关
yum install httpd
echo RS1 > /var/www/html/index.html
RS2;
设置网关
yum install httpd
echo RS2 > /var/www/html/index.html
LVS:
定义ipvs规则:NAt模式
yum install ipvsadm
ipvsadm -A -t 172.20.0.200:80 -s rr
ipvsadm -Ln
ipvsadm -a -t 172.20.0.200:80 -r 192.168.80.17 -m
ipvsadm -a -t 172.20.0.200:80 -r 192.168.80.27 -m
ipvsadm -Ln
并发4百万 apache 1万
集群
Cluster概念
系统扩展方式:
scale up: 向上扩展,增强 scale out: 向外扩展,增加设备,调度分配问题, cluster
Cluster: 集群,未解决某个特定问题将多台计算机组合起来形成的单个系统
Linux Cluster类型:
LB:load blancing, 负载均衡
HA:high availiablity, 高可用, spof(single point of failure)MTBF: Mean Time Between Failure 平均无故障时间 MTTR: Mean Time To REStoration (repair) 平均恢复前时间(故障时间) A=MTBF/(MTBF+MTTR) (0,1): 99%,99.5%, 99.9%, 99.99%, 99.999%
HPC: high-performance computing . 高性能 www.top500.org
- 分布式系统:
分布式存储: 云盘 分布式计算: hadoop, spark
Cluster分类
- LB Cluster的实现
- 硬件:
F5 big-ip citrix netscaler A10 A10
- 软件:
lvs: linux virtual server nginx: 支持七层调度 haproxy: 支持七层调度 ats: apache trafficserver perlbal: perl编写 pound
- 基于工作的协议层划分:
- 传输层(通用):DPORT
LVS:
nginx:stream
haproxy: mode tcp 应用层(专用):针对特定协议,自定义的请求模型分类
proxy server:http:nginx, httpdm haproxy(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介绍
LVS介绍
- LVS: linux virtual server, 负载调度器,集成内核
官网:http://www.linuxvirtualserver.org/
VS:virtual server,负责调度
RS:real server,负责真正提供服务
L4:四层路由器或交换机 - 工作原理:vs根据请求报文的目标ip和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
- iptables/netfilter:
iptables:用户空间的管理工具
netfilter:内核空间上的框架
流入:PREROUTING–>INPUT
流出:OUTPUT–> POSTROUTING
转发:PREROUTING–>FORWARD–>POSTROUTING
DNAT:目标地址转换;PREROUTING
LVS概念
lvs集群类型中的术语:
VS:virtual server, director server(DS)dispatcher(调度器),load balancer
RS:real server(lvs), upstream server(nginx)
backend server(haproxy)
CIP:client ip
VIP:virtual serve ip VS外网的ip
DIP:director ip VS内网Ip
RIP:real server ip访问流程:CIP<-->VIP==DIP<-->RIP-->-->
LVS集群的类型
lvs: ipvsadm/ipvs
ipvsadm: 用户空间的命令行工具,规则管理器
ipvs: 工作于内核空间netfilter的INPUT钩子上的框架lvs集群的类型:
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
lvs-nat模式
- lvs-nat:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址,RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是linux系统,RS可以是任意OS系统
lvs-fullnat模式
- lvs-fullnat:
通过同时修改请求报文的源IP地址和目标IP地址进行转发
(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此。RIP的网关一般不会指向DIPCIP-->DIP VIP-->RIP
(2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
(3)请求和响应报文都经由Director
(4)支持端口映射
注意:此类型kernel默认不支持
LVS工作模式总结
VS/NAT | VS/TUN | VS/DR | |
---|---|---|---|
server | any | tunneling | non-arp device |
server network | private | LAN/WAN | LAN |
server number | low(10~20) | high(100) | high(100) |
server gateway | load balancer | own router | own router |
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头实现转发,支持远距离通信
ipvs scheduler
- ipvs scheduler:
根据其调度时是否考虑各RS当前的负载状态
两种:静态方法和动态方法 静态方法:仅根据算法本身进行调度
1. RR: roundrobin,轮询 2. WRR: weighted RR,加权轮询 3. SH: source hashing,实现session sticky,源IP地址hash;将来自同一个IP地址的请求,始终发往第一次挑中的RS,从而实现会话绑定 4. DH: destination hashing, 目标地址哈希,将发往同一个目标地址的骑牛始终发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡;如:宽带运行商
动态方法:
主要根据每个RS当前的负载状态及调度算法进行调度overhead=value较小的RS将被调度- LC: least connections 适用于长连接应用
overhead=activeconns*256+inactiveconns - WLC: weighted LC,默认调度方法
overhead=(acticeconns*256+inactiveconns)/weight - SED: shortest expection delay,初始连接高权重优先
overhead=(activeconns+1)*256/weight - NQ: never queue, 第一轮均匀分配,后续sed
- LBLC: locality-based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
- LBLCR: LBLC with replication, 带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
- LC: least connections 适用于长连接应用
ipvsadm命令
- ipvsadm 命令:
核心功能:
集群服务管理:增,删,改 集群服务的RS管理:增,删,改 查看
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [–pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm -C 清空
ipvsadm -R 重载
ipvsadm -S [-n] 保存
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|U|f service-address]管理集群上的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
- server-addres:
rip[:port] 如省略port,不作端口映射 - 选项:
lvs类型:
-w weight: 权重-g: gateway, dr类型,默认 -i: ipip,tun类型 -m: masquerade, nat类型