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

相关推荐

  • 教你使用rpm、yum、编译等方式安装软件

    一、什么是包管理器?     很多人都不知道包管理器的概念,首先我们要了解软件是如何运行的,我们这里介绍C程序如何实现从代码到执行程序的过程。         程序源代码–> 预处理–> 编译&#8211…

    Linux干货 2016-03-09
  • 关于大型网站技术演进的思考(十四)–网站静态化处理—前后端分离—上(6)

    原文出处: 夏天的森林  前文讲到了CSI技术,这就说明网站静态化技术的讲述已经推进到了浏览器端了即真正到了web前端的范畴了,而时下web前端技术的前沿之一就是前后端 分离技术了,那么在这里网站静态化技术和前后端分离技术产生了交集,所以今天我将讨论下前后端分离技术,前后端分离技术讨论完后,下一篇文章我将会以网站 静态化技术的角度回过头来…

    Linux干货 2015-02-26
  • 磁盘管理之MBR,GPT的概念及MBR和GPT分区工具的使用

    一,概述 设备文件 I/O ports: I/O设备地址 一切皆文件 open() read() write()close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位”字符“,键盘 块设备和字符设备的区别 块设备可以随机访问,字符设备必须连续访问,如,/dev/null 块设备有缓存,字符设备没有缓存,因为字符设备…

    Linux干货 2016-09-06
  • 第二十二周作业

    1、请描述本地文件系统和分布式文件系统的特点; 本地文件系统: 本地文件系统主要是指Ext2,Ext3,Btrfs,XFS这类(很难概括,只好举例子),它们通常提供以下功能: 1.扩展性:随着系统容量的增加保持性能,不随容量变化而导致性能震荡。比如一个目录下的海量文件,在EXT2/3中由于目录设计问题会导致较大的性能问题。再比如EXT2/3中的Metadat…

    2017-09-23
  • 第三周作业

    查看链接:http://note.youdao.com/noteshare?id=9b1aa0906b0918cc5cb557aa348e82da

    Linux干货 2016-09-19
  • 马哥教育网络班20期+第2周课程练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。   答:文件操作     ls 列出目录下的文件名      ls -l /     touch 文件不存在时生成该文件      touch a.txt   &…

    Linux干货 2016-06-23