lvs:
Linux Virtual Server

l4:四层交换;四层路由;

根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法);

netfilter:
PREROUTING --> INPUT
PREROUTING --> FORWARD --> POSTROUTING
OUTPUT --> POSTROUTING

ipvsadmin/ipvs

ipvsadmin:用户空间的命令行工具,用于管理集群服务;
ipvs:工作内核中netfileter INPUT钩子上;

支持 TCP, UDP, AH, EST, AH_EST, SCTP 等诸多协议;

lvs arch
调度器:director,dispatcher,balancer
RS:Real Server

Client IP:CIP
Director Virtual IP:VIP
Director IP:DIP
Real Server:RIP

lvs type:
lvs-nat MASQUERADE
lvs-dr(direct routing) GATEWAY
lvs-tun(ip tunneling) IPIP
lvs-fullnat

lvs-nat: 隐藏内网主机
多目标的DNAT,通过修改请求报文的目标IP地址(端口)至挑选出的某RS的RIP地址实现转发;
(1)RS和DIP应该使用私有地址,且RS的网关要指向DIP;
(2)请求和响应报文都要经由Director转发; 极高负载场景中,Director可能会成为系统瓶颈;
(3)支持端口映射;
(4)RS可使用任意操作系统;
(5)RS的RIP和Director的DIP必须在同一IP网络;

lvs-dr:direct routing
通过修改请求报文的目标MAC地址进行转发;
Director:VIP,DIP
RS:VIP,RIP
(1)保证前端路由器将目标IP为VIP的请求报文发送给Director;
解决方案:
静态绑定
arptables
修改RS主机内参数
(2)RS的RIP可以使用私有地址;但也可以使用公网地址;
(3)RS和Director必须在同一物理网络中;
(4)请求报文经由Director调度,但响应报文一定不能经由Director;
(5)不支持端口映射;
(6)RS可以是大多数OS;
(7)RS的网关不能指向DIP;

lvs-tun:
不修改请求报文的IP首部,而是通过在原有的IP首部之外(cip <--> vip),再封装一个IP首部;(dip <--> rip);

(1)RIP,DIP,VIP 全需要是公网地址;
(2)RS的网关不能指向DIP;
(3)请求报文必须经由Director调度,响应报文不能经由Director;
(4)不支持端口映射;
(5)RS的OS必须支持隧道功能;

lvs-fullnat:
Director通过同时修改请求报文的目标地址和源地址进行转发;

(1)VIP是公网地址;RIP和DIP尽量使私网地址,二者无需在同一网络中;
(2)RS接收到的请求报文的源地址为DIP,因此要响应给DIP;
(3)请求把稳的响应报文都必须经由Director;
(4)RS可以使用任意OS;
(5)支持端口映射;

http: stateless
session保持:
session绑定:
source ip hash
cookie hash
session集群:
在所以服务器中维护所有的session
session服务器

lvs scheduler:
静态方法:仅根据算法本身进行调度;
RR: round robin,轮调
WRR: weighted rr,加权轮调
SH: source hash,实现 session 保持; 来自同一个IP的请求将始终被调度至同一RS;
DH: destination hash,将对同一个目标的请求始终发往同一个RS;

动态方法:根据算法以及各RS的当前负载状态进行调整;
Overhead
LC: Least Connection
Overhead = Active*256+Inactive
WLC: Weighted LC
Overhead = (Active*256+Inactive)/weight
SED: Shortest Expection Delay
Overhead=(Active+1)*256/we ight
NQ: Never Queue
SED 的改进,将请求优先调度至没有被调度过的Server,之后再用 SED 算法调度
LBLC: Locality-Based LC,动态的DH 算法;
正向代理情形下的cache server的调度;
LBLCR: LBLC with Repication,带复制功能的LBLC算法;

ipvs的集群服务:
(1)一个ipvs主机可以同时定义多个cluster service;
tcp,udp
(2)一个cluster server 上至少应该有一个 real server;
定义时:指明lvs-type,以及lvs scheduler;

ipvsadm的用法:
管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler]

service-address:
tcp: -t ip:port
udp: -u ip:port
fwm: -f mark

-s scheduler:
默认为 WLC

ipvsadm -D -t|u|f service-address
ipvsadm -L|l [options]
ipvsam -C

管理集群服务中的RS
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight] [-x upper] [-y lower]

server-address:
ip[:port]

lvs-type:
-g: gateway,dr
-i: ipip
-m: masquerade,nat

ipvsadm -d -t|u|f service-address -r server-address

查看和清理:
ipvsadm -L|l [options]
-n: number, 基于数字格式显示地址和端口;
-c: connection, 显示ipvs连接;
--stats: 进出站字节统计
--rate: 进出站字节数速率
--exact:显示精确值

ipvsadm -C

保存和重载:
ipvsadm -R
ipvsadm -S [-n]

清空计数器:
ipvsadm -Z [-t|u|f service-address]

最新文章

  1. mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习
  2. HDU 1166 敌兵布阵 线段树单点更新求和
  3. python :添加的内容具有之前的功能用delegate绑定事件
  4. Lua-泛型for循环 pairs和ipairs的区别
  5. Java并发编程核心方法与框架-CyclicBarrier的使用
  6. BeanNameAware接口和BeanFactoryAware接口
  7. javaweb实验五
  8. lintcode:Number of Islands 岛屿的个数
  9. 实现iOS项目一款用swift实现的应用top源码
  10. execute immediate的简单用法(oracle)
  11. Effective C++(15) 在资源管理类中提供对原始资源的访问
  12. 音频特征提取——librosa工具包使用
  13. Cookie和Session总结
  14. 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
  15. webstorm2017破解
  16. 结合JDK源码看设计模式——桥接模式
  17. Matplotlib-画图种类
  18. 初识GitHub之创建文件
  19. 1605--luogu(深搜dfs)
  20. all与any的用法

热门文章

  1. CSDN日报20170416 ——《为什么程序猿话少钱多死得早?》
  2. 沁园春&amp;#183;咏史
  3. 【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)
  4. 新建maven web工程报错
  5. Item 8:析构函数不要抛出异常 Effective C++笔记
  6. 屏幕測试亮点,新买了一个显示器,使用web简单的測试下了亮点
  7. tslib-触摸屏校准
  8. Linux - xshell 链接CentOS 设置高亮
  9. 循环神经网络(RNN, Recurrent Neural Networks)——无非引入了环,解决时间序列问题
  10. springmvc-servlet.xml(springmvc-servlet.xml 配置 增强配置)