菜鸟学Linux 第082篇笔记 LVS
内容总览
cluster-lb
lvs-net, lvs-dr, lvs-tun
cookies
高度方式 schedule method
ipvsadm命令使用
LB:Load Balancing
硬件设备
F5,BIG IP
Citrix, Netscaler
A10
软件设备
四层 transport layer
LVS (国人开发)
七层 application layer 反向代理
nginx
http, smtp, pop3 imap
haproxy
http, tcp(mysql, smtp)
调度算法
rr wrr
LVS (Linux Virtual Server)
Director
Real-server
Cluster service
工作在内核中 input chain
LVS 和 iptables 不能同时使用
两段式工作
ipvsadm 管理集群服务的命令行工具 ip virtual server administrator
ipvs 内核 监控在input chain上的框架
Schedule Mehod (高度方法)
调度站如何使用合理的方式去高度后台的真真的real server
一台LVS可以为多个集群服务提供调度功能(可以实现但一般不会这么设计)
LVS IP
VIP: virtual IP
虚拟IP:是公布在外网提供服务的IP
RIP:Real IP
实IP:真正处理服务请求的IP
DIP:Director IP
RIP和DIP工作在同一个网段的IP
CIP:Client IP
外网客户请求的IP
Type of LVS Cluster
LVS-NAT (Network Address Translation) 地址转换
连接方式(LVS相对来说是一个bottleneck(障碍,瓶颈))
外网路由-->LVS服务器(双网卡)-->交换机--> N台real server
(此种方式real server所响应的client报文还回再经由LVS去传送)
Basic Properties(属性)
1. 集群节点跟directory必须在同一个IP网络中
2. RIP通常是私有地址,仅用于各集群节点间的通信
3. director位于client和real server之间,并负责处理进出的所有通信
4. 支持端口映射,向外提供服务的端口和real server端口可以不同
5. real server 可以使用任意操作系统
6. 较大规模应用场景中,director 易成为系统瓶颈
(此种模式可带动10台real server)
LVS-DR (Direct Routing) 直接路由
连接方式
外网路由-->交换机-->N台real server 和1台LVS
(real server和LVS服务器 工作在同一个局域网里)
实现原理
1. 每个real server 有两个IP,一个是RIP 另一个是隐藏LVSIP
2. real server的LVSIP只用来将LVS转发过来的数据响应时做原地址使用
3. real server的LVSIP是别名,与二层里的其它IP不做通信
4. LVS服务器才是真正的LVSIP 与其它RIP在同一个局域网
客户端请求报文所走路线
1.客户端发送请求报文给LVSIP
2.LVS服务器将该请求报文的目标MAC地址改为其中一台RIP的MAC地址,交转发
3.当拥有该MAC的RIP服务器接收到该请求时,给予响应
4.响应时发送的响应报文原地址为real server的隐藏LVSIP 目标地址CIP
(个人感觉LVS 和real server 是基于帧通信的 对网络了解的不透切呵呵 )
简单讲解就是这段了,只是没有讲实现的详细过程
In an LVS-DR configuration, the Director forwards all incoming requests to the nodes inside the cluster, but the nodes inside the cluster send their replies directly back to the client computers (the replies do not go back through the Director).
Basic Properties
1.集群节点和director必须在同一个物理网络中
2.RIP地址可以不是私有地址
3.director仅负责入站请求,响应报文则由real server直接发往客户端
4.real server 不能将网关指向LVSIP
5.directory不支持端口映射
6.大多数操作系统可以用来做real server (支持隐藏IP功能)
7.LVS-DR可以比LVS-NAT模型调度更多的real server
(此种模式可以带动上百台real server 所以一般使用LVS 都用此种模式)
LVS-TUN (IP Tunneling) 隧道
此种模型和DR类似,只不过他们的集群节点可以不在一个物理网络中(局域网)
director和real server是由隧道模式来转发请求报文的
类似网络的×××隧道机制
Basic Properties
1.集群节点可以跨越Internet
2.RIP必须是公网地址
3.director仅处理入站请求,响应报文则由real server直接发往客户端
4.real server 网关不能指向director
5.只有支持隧道功能的OS才能用于real server
6.不支持端口映射
cookie
http是一种无状态的协议,如当用户访问某网站登录之后,如果将该网站关闭后,再重
新打开,则用户就需要重新输入一次账号密码,这会让用户感觉经常输入用户密码很反感
由此所而诞生了cookie,它的作用就是在客户端浏览或登录某网站时,服务器会发送一段
数据保存到cookie里,来标识该客户端,而当再某一段时间内再访问此网站,会将cookie
里的标识该客户端身份的信息一并发送至服务器,此时服务器便可根据发送过来的信息
区分此前该用户是否访问过该服务器,由于cookie里的信息已经标明此前该客户端已经,
访问过该服务器,所以该客户端的身份在服务器端便可识别,不需要再进行身份验证
便可以直接访问.
(个人见解,其实里边还有其它很多作用,这里仅作基本了解)
调度方式
静态调度(不考虑real server是否繁忙)
rr 轮调
wrr weight 加权轮调
sh (source hash) 在某一段时间内同一个客户端请求,发送给同一个real server
(session affinity) 会话绑定
session sharing 此时就不需要sh
dh 功能和sh近似,只是应用场景
动态调度
LC (Least-connection)最少连接
active*256+inactive 谁的小就挑谁
WLC 加权最少连接
(active*256+inactive)/weight 谁的小挑谁
SED 最短期望延迟
(active+1)*256/weight
NQ never queue 永不排队 (改进的SED)
LBLC (Locality-Based Least-Connection) 基于本地的最少连接
LBLCR 基于本地的带复制功能的最少连接
LVS默认的高度方法为WLC
ipvsadm
管理集群服务
添加 -A -t|u|f service-address [-s scheduler]
-t tcp
-u udp
service-address: IP:port
-f FirewallMark防火墙标记
service-address: Mark number
修改 -E
删除 -D -t|u|f service-address
# ipvsadm -A -t 192.168.11.122:80 -s rr
管理集群服务中的RS
添加 -a|-e -t|u|f service-address -r server-address
[-g|i|m] [-w weight]
-t|u|f service-address 事先定义好的某集群服务
-r server-address 某RS的地址,在NAT模型中,可使用IP:port端口映射
[-g|i|m] LVS类型 -g DR -i TUN -M NET'
-w 权重
修改 -e 同-a
删除 -d -t|u|f service-address -r server-address
# ipvsadm -a -t 192.168.11.122:80 -r 192.168.11.10 -m
# ipvsadm -a -t 192.168.11.122:80 -r 192.168.11.11 -m
# ipvsadm -d -t 192.168.11.122:80 -r 192.168.11.11
查看
-L|-l
-n 数字格式显示主机地址和端口
--stats 统计数据
--rate 显示速率
--timeout 显示tcp tcpfin udp的会话超时时长
-c 显示当前的ipvs连接状况
删除所有集群服务
-C 清空ipvs规则
保存规则
-s
# service ipvsadm save
# ipvsadm -s > /path/somefile
载入此前定义的规则
-R
# ipvsadm -R < /path/somefile
配置为LVS-NET模型时,,需要开启ip-forward功能