lvs基本概念、调度方法、ipvsadm命令及nat模型示例

  • Post author:
  • Post category:其他


更多干货

LVS类型:

NAT:–>(DNAT)

DR

TUN

FULLNAT



LVS的常见名词解释

CIP<–>VIP–DIP<–>RIP


Direct Routing

:直接路由

负载均衡层(Loader Balancer),它就是我们所说的的Director


RS real server :

真实提供服务的计算机


VIP:

Virtual IP(VIP)address:Director用来向客户端提供服务的IP地址


RIP:

Real IP (RIP) address:集群节点(后台真正提供服务的服务器)所使用的IP地址


DIP:

Director’s IP (DIP) address:Director用来和D/RIP 进行联系的地址


CIP:

Client computer’s IP (CIP) address:公网IP,客户端使用的IP



LVS NAT的特性

1.RS应该使用私有地址

2.RS的网关必须指向DIP

3.RIP和DIP必须在同一网段内

4.请求和响应的报文都得经过Director,在高负载场景中,Director很可能成为性能瓶颈

5.支持端口映射

6.RS可以使用任意支持集群服务的OS



LVS DR类型

1.让前段路由将请求发往VIP时,只能是Dirctor上的VIP

解决方案

1.静态地址绑定

未必有路由器的配置权限

Director调用时静态地址绑定将难以使用

2.arptables

3.修改linux内核参数,将RS上的VIP配置在lo接口的别名上,限制linux仅对对应接口的ARP请求做相应



LVS DR类型的特性

1.RS可以使用私有地址,还可以使用公网地址,此时可以直接通过互联网连入RS,以实现配置、监控等

2.RS的网关一定不能指向DIP

3.RS跟Dirctory要在同一物理网络内(不能有路由器分隔)

4.请求报文经过Directory,但响应报文一定不经过Director

5.不支持端口映射

6.RS可以使用大多数的操作系统

LVS TUN类型:IP隧道

1.RIP,DIP,VIP都得是公网地址

2.RS的网关不会指向也不可能指向DIP

3.请求报文经过Directory,但响应报文一定不经过Director

4.不支持端口映射

5.RS的OS必须得支持隧道功能



LVS的调度方法:10种

静态方法:仅根据算法本身进行调度

rr:Round Robin 轮询

wrr:Weighted RR 权重轮询

sh:source hashing源地址hash

dh:destination hashing 目标地址hash

动态方法:根据算法及RS当前的复制状态

lc:Least Connection 最少连接

计算当前的负载Overhead=Active*256+Inactive来实现

wlc:Weighted LC

Overhead=(Active*256+Inactive)/weight

sed:Shortest Expect Delay  最短期望延迟

Overhead=(Active+1)*256/weight

nq:Nerver Queus: 永不排队

lblc:Locality-based least connection 基于本地的最少连接

相当于dh+lc

Lblcr:基于复制的基于本地的最少连接 Replicated and Locality-based least connection

Session持久机制

1.Session绑定:始终将统一请求者的连接定向至统一RS(第一次请求时仍有调度选择):没有容错能力,有损均衡效果

2.session复制:在RS之间同步session,因此,每个RS持集群中所有的session;对于大规模集群环境不适用

3.session服务器:利用单独部署的服务器来统一管理session

LVS的集群服务:

四层交换,四层路由

根据请求目标套接字(包括端口的协议类型tcp,udp)来实现转发



ipvsadm

ipvsadm -A|E -t|u|f service-address [-s scheduler]

[-p [timeout]] [-M netmask]

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

[-g|i|m] [-w weight] [-x upper] [-y lower]

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

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]

ipvsadm –set tcp tcpfin udp

ipvsadm –start-daemon state [–mcast-interface interface]

[–syncid syncid]

ipvsadm –stop-daemon state

ipvsadm -h

集群服务相关

-A:添加一个集群服务

-t:tcp

-u:udp

-f: firewall make 通常应用于将两个或以上的服务绑定为一个服务进行处理时使用

service-address

-t IP:port

-u ip:port

-f firewall_mark

-s 调度算法,默认为wlc

-p: timeout persistent connection 持久连接

-E:修改定义过的集群服务

-D -t|u|f service-address:删除指定的集群服务

RS相关

-a:向指定的CS中添加RS

-t|-u|-f service-address:指明将RS添加至那个Cluster Service 中

-r:指定RS,可以包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口

lvs类型:

-g:Gateway,DR

-i:ipip,TUN

-m:masquerade(地址伪装),NAT

默认为DR

指定RS权重

-w

上限下限:

-x:下限

-y:上限

-e:修改指定的RS属性

-d  -t|u|f  service-address  -r  server-address:在指定的集群服务中删除一个指定的RS

情况所有的集群服务:

-C

保存规则(使用输出重定向):

ipvsadm-save

ipvaadm -S

载入指定的规则:(使用输入重定向)

ipvsadmin-restore

ipvasdm -R

查看ipvs规则等

-L [options]

-n 使用数字格式显示IP地址,不反解

-c:查看连接数相关信息

–stats:显示统计数据

–rate:数据传输速率

–timeout:显示tcp会话时长

–daemon:守护进程的信息

–sort:对虚拟服务进行排序,默认为升序

–exact:精确显示,不做单位换算

-Z:计数器清零

LVS-DR模型

Director两个地址:VIP,DIP

RS有两个地址:VIP,RIP

禁止rs响应对BIP的ARP广播请求

1.在前端路由上实现静态MAC地址VIP的绑定

前提:得有路由器的配置权限

缺点:Directory故障转移时,无法更新此绑定

2.arptables

前提:在各RS在安装arptables程序i,并编写arptables规则

缺点:依赖于独特功能的应用程序

3.修改Linux内核参数

前提:RS必须是Linux

缺点:适用性差

两个参数:

arp_announce:定义通告模式

arp_ignore:定义收到arp请求的响应模式

配置专用路由,以使得响应报文首先通过VIP所篇日志的lo上的别名接口

Linux的工作特性:IP地址是属于主机,而非特定网卡

LVS-DR配置架构根据其VIP与RIP是否在同一个网络内有两种情况

在Directory 和RS上配置VIP,要使用如下格式

ifconfig ALIAS VIP netmask 255.255.255.255 broadcast VIP

route add -host VIP dev

LVS-DR的配置

Director

iptables -t filter -F

ifconfig eth0:0 VIP netmask 255.255.255.255 broadcast VIP up

route add -host VIP dev eth0:0

RS:

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up

route add -host VIP dev eth0:0

Director:

ipvsadm -A -t ip:port -s scheduler

ipvsadm -a -t ip:port -r rs1 -g



nat模型示例(虚拟机下):

dip和rip都在vmnet2上面



主服务器配置:

ifconfig eth0:0 192.168.8.41/24

开启路由间转发功能

# vim /etc/sysctl.conf

# sysctl -p

测试配置:

# ipconfig eth0 172.16.10.10/24 up

# route add default 172.16.10.1

在两个dip服务器上分别安装web服务,并测试是否联通

创建lvs nat模型

# ipvsadm -A -t 192.168.8.41:80 -s rr

添加调度服务器

# ipvsadm -a -t 192.168.8.41:80 -r 172.16.10.10 -m

# ipvsadm -a -t 192.168.8.41:80 -r 172.16.10.20 -m

显示列表

# ipvsadm -L -n

# ipvsadm -L -nc

# ipvsadm -L -n –rate

# ipvsadm -L -n –stats

清空计数器

# ipvsadm -Z

修改lvs服务器的调度算法为wrr(权重)

# ipvsadm -E -t 192.168.8.41:80 -s wrr

修改其中之一权重为3

# ipvsadm -e -t 192.168.8.41:80 -r 172.16.10.10 -m -w 3

通过

/var/log/httpd/access_log可以查看访问的客户端IP地址



实例二:(真实的服务器充当vip服务器)

网络环境概述:

VIP服务器有两块网卡:

EM1(IP:192.168.8.68)

EM2(IP:192.168.8.70)

192.168.8.68的8888号端口通过路由映射到外网的183.239.143.212 8888 号端口

VIP:183.239.143.212:8888

DIP:192.168.8.70

RIP1:192.168.8.40

RIP1:192.168.8.20

主服务器配置:

em1:192.168.8.68

em2:192.168.8.70



# vim /etc/sysctl.conf

# Controls IP packet forwarding

net.ipv4.ip_forward = 1

# sysctl -p

rip1和rip2配置好web服务器端口为8888,并且将网关指向192.168.8.70

# ipvsadm -A -t 183.239.143.212:8888 -s rr

# ipvsadm -a -t 183.239.143.212:8888 -r 192.168.8.40 -m

# ipvsadm -a -t 183.239.143.212:8888 -r 192.168.8.20 -m

该方案是失败的,将183.239.143.212:8888更改为192.168.8.68:8888后可以成功

# ipvsadm -A -t 192.168.8.68:8888 -s rr

# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.40 -m

# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.20 -m

通过访问

http://183.239.143.212:8888/

http://192.168.8.68:8888

都可以访问网站