欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LVS的使用

程序员文章站 2022-03-12 08:31:18
lvs: Linux Virtual Server l4:四层交换;四层路由; 根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法); netfilter: PREROUTING --> INPUT PREROUTING --> FORWARD --> POSTROU ......

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]