lvs的基本概念及基础配置

一、知识整理

1、Session:在计算机中,尤其是在网络应用中,称为“会话控制、时域”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。注意会话状态仅在支持 cookie 的浏览器中保留。

2、站点指标:

PVpage view:页面的浏览次数,衡量网站用户访问的网页数量,打开一个页面记录一次,刷新累计;

UVunique vistor:一天内访问某站点的人数,以cookie为依据;

IP:同一个IP的访问算作一次;同一IP不管访问了几个页面,独立IP数都为1

VV:记录所有访客1天内访问了多少次网站;

3LVS的类型:

NAT 地址转换

集群节点与director必须在同一IP网络中

RIP通常都是私有地址,仅用于集群节点之间通信

director位于clientreal server之间,并负责处理进出的所有通信

realsever必须将网关指向dip

支持端口映射,可修改请求报文的目标PORT

realsever可以使用任何类型的操作系统,vslinux系统;

较大规模应用场景中,一个单独的director易成为系统瓶颈

blob.png

DR  直接路由

VIP仅用于作为源地址

修改mac地址通信

集群节点与director必须在同一物理网络中(mac地址通信)

RIP可以使用公网地址,实现便捷的远程管理和监控

realsever不能将网关指向DIP,而应直接使用前端网关

不支持端口映射

realsever隐藏了vip,但在发送响应报文时还可以当源IPlo别名配置VIP,修改内核参数,使IP属于网卡,限制响应模型和通知模型 arp_announce arp_ignore

RSRIP可以使用私网地址,也可以是公网地址;RIPDIP在同一个网络;

RSDirector要在同一个物理网络;

请求报文要经由Director,但响应不能经由Director,而是由RS直接发往client

NAT处理更多的realserver

blob.png

TUN 隧道

转发时不修改请求报文的IP首部(CIP VIP),而在源IP报文之外再封装ip一个首部,借助第一层封装发送第二层ip报文,要求支持隧道机制(IP-IP)

集群节点可以跨越互联网

DIP,VIP,RIP都应该是公网地址

director仅负责处理入站请求,响应报文则由realsever直接发往客户端

只有支持隧道功能的os才能用于realsever

不支持端口映射;

realsever网关不能指向director,以确保响应报文不会经由Director;,请求报文要经由Director

blob.png

FULLNAT

同时修改请求报文的源IP地址和目标IP地址进行转发;

CIP–DIP

VIP–RIP

VIP是公网地址,RIPDIP是私网地址,且通常不在同一IP网络;因此RIP的网关一般不会指向DIP

RS收到的请求报文源地址是DIP,因此只需要响应给DIP,但Director还要将其发往client

请求和响应报文都经由Director

支持端口映射;

此类型默认不支持;(淘宝专用内核补丁)

blob.png

4、正常情况下,如果我们定义了两个集群:

[root@localhost ~]# ipvsadm -ln 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flag
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.49:80 w
  -> 10.1.49.10:80                Route   1      0          0         
  -> 10.1.252.28:80               Route   1      0          0  
TCP  10.1.49.49:3306 r
  -> 10.1.49.10:3306              Route   1      0          0         
  -> 10.1.252.28:3306             Route   1      0          0

那么在测试时,我们会发现他们是相互独立的,也就是说我们在访问一台服务器的web服务时,有可能连接到另一台服务的mysql服务,此处是为了演示,实际中会将httphttps合并同时调度。含有test数据库的是RS1

[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| ultrax             |
+--------------------+
[root@localhost ~]# curl http://10.1.49.49/index.html
RS1
[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ultrax             |
+--------------------+

此时可以使用FWM(firewall mark),借助于防火墙标记来分类报文,而后基于标记定义集群服务,可将多个不同的应用使用同一个集群服务进行调度;

方法:在director主机上操作:

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 10.1.49.49 -p tcp -m multiport --dports 
80,3306 -j MARK --set-mark 8
[root@localhost ~]# iptables -t mangle  -vnL 
Chain PREROUTING (policy ACCEPT 138 packets, 11526 bytes)
 pkts bytes target     prot opt in     out     source      destination    
 0  0 MARK      tcp  --  *     *    0.0.0.0/0   10.1.49.49     multiport dports 80,3306 MARK set 0
Chain INPUT (policy ACCEPT 138 packets, 11526 bytes)
 pkts bytes target     prot opt in     out     source       destination         
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source     destination         
Chain OUTPUT (policy ACCEPT 43 packets, 4452 bytes)
 pkts bytes target     prot opt in     out     source    destination         
Chain POSTROUTING (policy ACCEPT 43 packets, 4452 bytes)
 pkts bytes target     prot opt in     out     source       destination         
[root@localhost ~]# ipvsadm -A -f 8 -s wrr 
[root@localhost ~]# ipvsadm -a -f 8 -r 10.1.252.28 -g -w 1
[root@localhost ~]# ipvsadm -a -f 8 -r 10.1.49.10 -g -w 1
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  8 wrr
  -> 10.1.49.10:0                 Route   1      0          0         
  -> 10.1.252.28:0                Route   1      0          0

测试,可以看出两个端口是被绑定起来访问了:

[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;" ; curl http://10.1.4
9.49/index.html+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| ultrax             |
+--------------------+
RS2
[root@localhost ~]# curl http://10.1.49.49/index.html
RS1
[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ultrax             |
+--------------------+

5、基于LVS的持久连接,此方法与算法无关,是LVS的核心层面实现的:

[root@localhost ~]# ipvsadm -A -t 10.1.49.49:80 -s rr -p 20
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:80 -r 10.1.49.10 -g 
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:80 -r 10.1.252.28 -g 
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.49:80 rr persistent 20
  -> 10.1.49.10:80          Route   1   0    5         
  -> 10.1.252.28:80         Route   1   0     5

测试如下:

[root@localhost ~]# for i in {1..10}; do curl http://10.1.49.49/index.html; done 
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2

然而我们可以加上端口绑定来实现多种方式:

单端口持久 PPC:每集群服务单独定义,并定义其持久性。

每防火墙持久:基于防火墙标记定义持久的集群服务;可实现将多个端口上的应用统一调度,即所谓的port affinity(端口的姻亲关系)

每客户端持久:基于0端口定义集群服务,即将客户端所有应用的请求全部调度至后端主机,而且使用持久连接进行绑定。

第三种方式的方法如下:

[root@localhost ~]# ipvsadm -C 
[root@localhost ~]# ipvsadm -A -t 10.1.49.49:0 -s rr -p 
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:0 -r 10.1.49.10 -g 
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:0 -r 10.1.252.28 -g 
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.49:0 rr persistent 360
  -> 10.1.49.10:0     Route   1      0      0         
  -> 10.1.252.28:0    Route   1      0       0

6、保存及重载规则:

保存:建议保存至/etc/sysconfig/ipvsadm

ipvsadm-save >

ipvsadm -S >

systemctl stop ipvsadm.service

重载:ipvsadm-restore <

ipvsadm -R <

systemctl restart ipvsadm.service

停止服务和启动服务时候或者直接重启服务的时候,会自动保存及加载此文件中的规则。

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# ipvsadm -C 
[root@localhost ~]# ipvsadm-restore <  /etc/sysconfig/ipvsadm
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.49:0 rr persistent 360
  -> 10.1.49.10:0                 Route   1      0          0         
  -> 10.1.252.28:0                Route   1      0          0


二、命令详解及事例

1ipvsadm命令:

保存规则

-S    ipvsadm -S > /path/file

ipvsadm-save

载入之前的规则

-R    ipvsadm -R < /PATH/FILE

ipvsadm-restore

删除所有集群服务

-C 清空ipvs规则

查看:

-L|l

    -n 数字格式显示主机地址和端口

    –exactexpand numbers(display exact values)

    –state 统计数据

    –rate

    每秒连接数:CPS

    –timeout 显示tcp tcpfinudp的会话超时时长

    –daemon

    –sort realsever做排序,默认升序

    -c 显示当前的ipvs连接状况

管理集群服务

添加 -A|E -t|u|f service-address [-s scehduler]

    ipvsadm -A -t 172.16.100.1:80 -s rr

    -t tcp协议的集群   vip:port

    -u udp协议的集群

    service-addressip:port

    -f fwm防火墙标记

    service-address:mark number

将不同的端口的规则设置为同一个number,可以统一调度;

[-s scehduler] 调度算法

修改 -E

删除 -D

     -D -t|u|f service-address

管理集群服务中的RS realsever

添加

    -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

    service-address :事先定义好的某集群服务

-r server-address

rs的地址,在nat模型中,可使用ipport实现端口映射    

[-g|i|m] LVS类型

   ggatewaydr类型,默认类型;

   iipiptun类型

   mmasqueradenat类型

[-w weight] 定义服务器权重

    默认是1

    修改 -e

    删除 -d

2、调度算法:

固定调度:静态调度:不考虑服务器上活动链接和非活动链接

rr:轮询,轮调,轮叫

wrrweight,加权轮询

shsource hash:源地址hash

    随机分配,但是将相同IP地址的请求始终发送到同一个realserver

    session affinity:持续用一个session,“购物车中的商品不会丢失”

dhdestination hashing

    把发往同一个目标地址的请求始终转发至第一次挑中的R Server,以目标地址为标准进行挑选。sh类似,但适合的场景不同。

动态调度:

LCleast connection 最少连接

    计算当前后端活动链接数 overhead=active*256+inactive

        给数目较小的发送链接

wlc(默认方法):加权最少连接 weighted LC

    (active*256+inactive/weight

sed:shortest expection delay最短期望延迟

    (activeconns+1*256/weight

nqnever queue

    每个服务器最少一个连接;

LBLC:基于本地的最少连接locality-based LC

    DH的改进,考虑cache的连接数,动态的DH算法;

LBLCRLBLC with Replication,基于本地的带复制功能的最少连接

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/56385

(0)
SilencePavilionSilencePavilion
上一篇 2016-11-11 08:41
下一篇 2016-11-11 08:42

相关推荐

  • 对修改提示符引起的一些问题的理解

    有一个练习:提示符修改过后永久保存,每次打开一个新的shell,提示符都为已设定好的格式,不会因为打开新的shell而不同。 在做这个练习的时候遇到了不少问题,通过不断bing,将起初很陌生的问题一点点的解决,得到了一些理解,因此将理解写下来。 提示符与变量PS1有关,PS1的值可以被修改或重新赋予。PS1的值变,则提示符也会变。通过搜索得到只要在/etc/…

    Linux干货 2017-07-15
  • varnish 缓存服务器配置与使用

    varnish 缓存服务器配置与使用 一、cache 1.缓存为什么会存在? 一个快的设备要想和慢的设备交互,只有一种办法就是让快的设备工作在慢的设备的频段上!这样的话就浪费了,我们可以在两者之间加上一个加速器,这个加速器就叫做缓存! CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读…

    2016-11-13
  • 第十六周作业

    1、源码编译安装LNMP架构环境;     安装nginx:      1)安装依赖包 ]# yum groupinstall “Development Tools” “Development Libraries” -y ]# yum install wget openssl-devel ncurses-de…

    2017-05-02
  • 初步了解计算机组成及Linux系统

    一、计算机的组成及其功能: 计算机主要由三部分组成: 输入单元:包括键盘、鼠标、卡片阅读器、扫描仪、手写板等。 输出单元使我们能够将一些数据输入到主机里,然后再由主机的功能处理成为图表或文章等信息后,将结果传输到输出设备,如屏幕或打印机上面。 中央处理器(CPU):其中包含算数逻辑、控制、记忆等单元。 CPU作为一个具有特定功能的芯片,里面含有微指令集,如果…

    Linux干货 2017-09-24
  • nginx提供web服务——虚拟主机

    练习:定义四个虚拟主机,混合使用三种类型的虚拟主机;   仅开放给来自于本地网络中的主机访问; [root@node1 ~]# vim /etc/nginx/nginx.conf user           …

    Linux干货 2016-10-23
  • 第五次作业

    1、当用户xiaoming 对/testdir  目录无执行权限时,意味着无法做哪些操作?   由于/testdir为目录,意味着xiaoming用户对此目录至少不能用cd命令跳转进入目录内,但是可以用ls -l命令查看此目录下的文件列表详细信息 2、当用户xiaoqiang 对/testdir  目录无读权限时,意味…

    Linux干货 2016-08-07