根据请求报文的IP和目标协议以及端口进行调度;
VIP:对外提供的一个虚拟IP地址;
DIP:与后端服务器通讯的IP地址;
CIP:客户端IP地址;
RIP:后端服务器IP地址;
RS:后端提供服务的服务器;
VS:调度器服务器;
CIP --> VIP == DIP --> RIP
LVS集群类型
1 lvs-nat:修改请求报文的目标IP,多目标IP的DNAT,调度器发送到后方RS的时候会变化目标IP地址换为RS的IP地址;,返回的时候目标IP是CIP,到达VS服务器的时候源IP会变为VIP
2 lvs-dr:封装新的MAC地址(默认模式),返回报文的时候走新的线路,这样的话VS压力会变小,并且VS服务器只有一个网卡,上面有VIP和DIP,RS服务器都要配置VIP地址,防止地址冲突所以配置以下内容
RS服务器的内核中要更改以下配置:
"/proc/sys/net/ipv4/conf/lo/arp_ignore"设置为1,配置在回环网卡和all上;
0:默认值,表示可使用本地任意接口上配置的任一地址进行响应
1:不给予回应
"/proc/sys/net/ipv4/conf/lo/arp_announce"设置为2,配置在回环网卡和all上;
0:默认值,将本机所有接口的信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:避免对外宣称接口信息
可以安装"kernel-doc"包来查看帮助
less /usr/share/doc/kernel-doc-3.10.0/Documention/networking/ip-sysctl.txt #查看帮助搜索arp_ignore查看
3 lvs-tun(隧道模型):在源请求IP头部添加一个新的IP头部(源地址为DIP,目标地址为RIP地址,RS服务器也要添加一个VIP,但不怕冲突因为新的报文与RS之间可以添加路由,跨网络DIP,VIP,RIP都应该是公网地址);
4 lvs-fullnat:修改请求报文的源和目标IP;
CIP --> DIP
VIP --> RIP
调度算法:
静态调度(不考虑后端服务器状态):
1 RR(roundrobin):轮询算法
2 WRR(Weighted RR):加权轮询
3 SH(Source Hashing):实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,实现会话绑定
4 DH(Destination Hashing):目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,正向代理缓存比较常用
动态调度(会考虑后端服务器状态):
1 LC(least connections):将新的请求调度到负载少的机器上;
负载量=当前活动连接x256+非活动连接
2 WLC(Weighted LC):默认调度方法,也是调度到负载少的机器上;
负载量=(当前活动连接x256+非活动连接)/weight
3 SED(Shortest Expection Delay):初始化连接的时候,高权重优先;
负载量=(当前活动连接+1)x256/weight
4 NQ(Nver Queue):第一次请求均匀分配,之后使用SED;
5 LBLC(Locality-Based LC):动态DH算法,根据负载的状态实现正向代理;
6 LBLCR(LBLC with Replication):将负载重的相应的信息复制到新的服务器上,每个机器都有了之后就有可能调度到后端其他主机上;
LVS工具
ipvsadm/ipvs
ipvs:
grep -i ipvs -A 15 /boot/config-xxxxxxxxxxxxx #查看调度算法
ipvsadm
程序包:ipvsadm
安装:yum install ipvsadm
查看:yum info ipvsadm
含带工具:/usr/sbin/ipvsadm #进行操作的工具
/etc/sysconfig/ipvsadm-config #ipvsadm工具的配置文件
/usr/lib/systemd/system/ipvsadm.service #ipvsadm服务
/usr/sbin/ipvsadm-restore #负责将文件中的规则加载到内存中的工具
功能以及用法:
对VS服务器做管理:增、删、改、查
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p[timeout]]
-A:增加
-E:更改
ipvsadm -D -t|u|f service-address
-D:删除
service-address(服务地址格式按照后方格式写)VIP:TCP_PORT
-t|u|f:
-u:UDP协议的端口 VIP:UDP_PORT
-f:firewall MARK(防火墙标签iptables的mangel表当中修改数据包,比如可以将http与https打一个标签儿就相当于认为是一个服务了)
[-s scheduler]:指定调度算法,不写的话默认是wlc;
对RS服务器的管理:增、删、改、查
增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
选项:
lvs类型:
-g:gateway,dr类型(默认)
-i:ip,tun类型
-m:masquerade,nat类型
-w weight:权重
删:ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port]:如果省略port,则不做端口映射
ipvsadm查看:
ipvsad -L | l [options]
options:
--numeric,-n:以数字的形式输出地址和端口号,一般情况与l一起用(ipvsadm -ln)
--exact:扩展信息
--connection,-c:当前IPVS连接输出
--stats:统计信息
Conns :总的连接数
InPkts :进来的数据包
OutPkts :出去的数据包
InBytes :进来的字节数
OutBytes:出去的字节数
--rate:输出速率信息
CPS :每秒的连接数
InPPS :每秒进来的数据包
OutPPS :每秒出去的数据包
InBPS :每秒进来的字节数
OutBPS :每秒出去的字节数
ipvs规则:
cat /proc/net/ip_vs
当前连接的ipvs情况:
cat /proc/net/ip_vs_conn
清零当前计数器中的信息:
ipvsadm -Z
将所有规则清空:
ipvsadm -C
原文地址:http://blog.51cto.com/kaikai0720/2097542