Lvs 理论知识和实践

    LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

1,Cluster 理论

1.1,  系统拓展的方式:

scale up:向上发展;

scale  out:向外发展;

1.2,集群类型:

LB:负载均衡集群 -->将一个系统上所面临的诸多负载load Banlancing另外一个主机上;

硬件: F5 Big-ip

Citrix Netscaler

A10 A10

软件:  Lvs(大型网站)除了负载均衡没有其他的健康检测状态;

haproxy, nginx (居多),httpd(proxy模块) ,varnish

ats (apache traffic server)发展需要;

perlbal

基于工作协议层划分:

传输层: Lvs,haproxy(模拟出TCP层可调度mode tcp);

应用层:haproxy(个别协议),nginx,ats,perlbal

HA:高可用集群,high availability

HP:高性能集群,high performancing

分布式存储及并行处理集群,

1.3,  系统:

可扩展性;

可用性;

容量;例如高速公路,可以跑多少汽车;             单位时间内完成的总量;

性能;例如车速,单位时间内通过的汽车数量;响应时间;

注意,系统运维:可用性-->做好标准化-->自动化运维 (稳定性高于一切);

#################################################################################

2,构建高可用扩展性系统的重要原则,在系统内部尽量避免穿行和交互;

GSLB: Global serviceload balancing  全局负载均衡

SLB:service load balancing   服务负载平衡

分层:      负载均衡层        静态内容层           数据存储层

动态内容层

分割:功能上分割,把不同的请求分布到不同的server;

分布式:

分布式应用;

分布式静态资源;

分布式数据和存储;

分布式计算;

2.1,四层交换,四层路由

根据请求报文的目标IP和port将其转发至后端主机集群中的某一台主机(根据负载均衡算法);

netfilter:

入站: prerouting------>input;

转发:prerouting---> forward--->postrouting;

出站:output---->postrouting;

2.2,Lvs :

ipvsadm (写规则)/ipvs(定义规则) 工作在netfilter的内核中;

ipvsadm:用户空间的命令行工具,用于管理集群服务;

ipvs:工作在内核中netfilter INPUT 钩子协议上;

支持TCP、UDP、AH、EST、AH_EST、SCTP等协议;

2.3,Centos 7 查看调度模块信息;

# grep -i -A 10 ‘IPVS‘/boot/config-3.10.0-229.el7.x86_64

2.4,Lvs arch :

调度器:director(导演)、dispatcher(调度员)、

RS:Real server,

client IP:cip

directorvirutal ip:vip

director ip:dip

real serverip:rip

2.5,Lvs type:

A,   Lvs-nat:基于Dnat模式                  masquerade(地址伪装)类型

B,    Lvs-dr:直接路由directrouting,gateway类型

C,    Lvs-tun:ip隧道 ip tunneling          IPIP 隧道类型

D,    Lvs-fullnat:非标准类型                 请求报文转发时修改源、目标地址

A,    Lvs-nat:

多目标的DNAT(iptables);

通过修改请求报文的目标IP地址和端口,完成端口映射,至挑选出某RS的RIP地址实现转发;

(1) RS应该和DIP使用私网地址,且RS的网关需要指向DIP;

(2)请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;

(3)RS 可以使用任意OS,支持端口映射;

(4)RS的RIP和director的DIP必须在同一IP网络;

如图1.1所示:

B,    Lvs-dr:direct routing

通过修改请求报文的目标mac地址进行转发;

director:VIP ,DIP

RSs:RIP,VIP

(1)必须保证前段路由器将目标IP为VIP的请求报文发送给director;

解决方案:

静态绑定;director MAC地址绑定

arptables;在每个real server 启用arptables,

修改RS主机内核参数(linux 主机);

(2)RS的RIP可以使用私有地址,但也可以使用公网地址;

(3)RS根director必须在同一物理网络;

(4)请求报文经由director调度,但响应报文不一定能经由director(由RS直接转发);

(5)不支持端口映射

(6)RS可以大多数OS;

(7)RS的网关不能指向DIP;

#################################################################################

3,Lvs -type

Lvs-nat:RIP与DIP必须在同一网段;

Lvs-dir: director与RS必须在同一网段;

Lvs-tun:

不修改请求报文的IP首部,而是通过原有的IP首部之外,在封装一个IP首部;

(1)RIP、DIP、VIP都是公网地址;

(2)RS网关不能指向DIP,

(3)请求报文经由director调度,响应报文必须不经由director;

(4)不支持端口映射,RS的OS必须支持隧道功能;

Lvs-fullnat:可以跨机房设置

请求报文到达时,director同时修改报文的源地址和目标地址;

(1)VIP是公网地址,DIP和RIP可以不在同一网段;

(2)RS接收到的请求报文源地址为DIP,因此要响应给DIP;

(3)请求报文和响应报文必须经由director;

(4)支持端口映射,RS的OS可以使用任意OS;

4,http:stateless

追踪每一客户端,需要给每一个客户端发放一个cookie;

session保持:将来自于同一个用户的请求,调用到同一个RS;

session绑定:请求报文插入cookie, (nginx可以,lvs不可以

session集群;session主从机制会浪费内存、cpu等消耗;

session服务器;共享存储服务器,KV机制存储;

5,Lvs scheduler:

静态方法:仅根据算法本身进行调度,不考虑负载状态;  起点公平

RR: roundrobin ,轮询

WRR:weighted rr ,加权

SH:source hash 源地址hash 实现session保持;损害负载均衡的效果;

将来自同一个IP的请求始终调度至同一RS;反向代理

DH:destination hash,目标地址hash,不管来自哪一个的请求,请求同一个目标时,

都会调度至同一个RS,   正向代理

动态方法:根据算法及各RS的当前负载状态进行调度;sh

LC:least connection 最少连接数;

overhead=active(活跃的链接数量)*256+inactive(不活跃的连接数)

WLC:weighted least connection 加权最少连接;

overhead=(active(活跃的)*256+inactive(不活跃的))/weight 服务器权重

SED:最短期望延迟 shortest expection delay

overhead=(active+1)*256/weight

NQ:never queue

SED算法改进

LBLC:locality-based lc,动态DH算法,实现正向代理时;

LBLCR:带复制的的LBLC

权重大的响应请求,分配延迟

#######################################################################################

静态

局部性:空间 + 时间

制作缓存时,基于内存的缓存方式

动态内容:时间 + 特定

制作缓存时,根据用户时长判断;

######################################################################

6,Lvs的集群服务:  TCP、UDP、ah、esp

(1)一个ipvs主机可以同时定义多个clusterserver;

根据  tcp,udp

(2)一个cluster server上至少有一个real server;

定义时:指明lvs-type 以及lvs scheduler(程序机);

7,ipvsadm的用法:

A,      管理集群服务;

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

增加和修改

ipvsadm-D -t|u|f service-address

删除

ipvsadm-C    删除

ipvsadm -L | l [options]

service-address:

tcp:-t ip:port

udp:-u ip:port

fwm:-f mark 数字防火墙标记;

-sscheculer:  默认为wlc 非活动链接数量

B,      管理集群服务中的RS;

ipvsadm -a|e -t|u|f service-address -rserver-address [-g|i|m] [-wweight]

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

server-address;

ip [:port] 支持端口映射;大多数端口可省略;

Lvs-type:

-g:gateway,dr

-i:ipip  ,   tun

-m:masquerade,nat   nat模型

C,       清空和查看:

ipvsadm -C

ipvsadm -L | l[options]

-n:numberic 基于数字格式显示地址和端口;

-c:connection 显示ipvs连接数;

--stats:统计数据;pkts:总包数

--rate:速率;       pps 每秒的包个数

--exact:精确值;

--sort:排序;

D,     保存和重载:

ipvsadm -R          重载

ipvsadm -S [-n]   保存

E,      置零计数器:

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

######################################################################################################

二,实操部分

Lvs-nat

1,DIP 设置:director准备两个网口,一个是网桥,一个是虚拟网卡2;

# cd /etc/sysconfig/network-scripts/

# vimifcfg-eno16777736

#ifconfig -a

查看eno16777736地址

设置另外一个端口vmnet2:

# cpifcfg-eno16777736 ifcfg-eno33554984

# vim ifcfg-eno33554984  删除UUID更改NAME、DEVICE参数;

#ifconfig -a 查看eno33554984端口IP

2,接下来我们配置另外两台web机器:

分别配置两台web服务器的IP地址,和web服务;

然后在director上面测试两个页面;并关闭iptables防护墙;

#curl http://192.168.20.7

#curl http://192.168.20.8

#iptables -F

在director上转发功能打开

# cat /proc/sys/net/ipv4/ip_forward

# vim /etc/sysctl.conf编辑添加"net.ipv4.ip_forword = 1"

3,现在在director上面设置规则:

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

# ipvsadm -a -t 172.16.100.117:80 -r192.168.20.7 -m

# ipvsadm -a -t 172.16.100.117:80 -r192.168.20.8 -m

4,保存配置永久有效:

]# ipvsadm -S > /etc/sysconfig/ipvsadm

5,如果不小心删除规则,可以及时修复;

6,重读配置文件,并修复;

# ipvsadm -R < /etc/sysconfig/ipvsadm

7,开始验证Lvs-nat 效果:

http://172.16.100.117来查看;

8,使用"-E"选项修改调度器:

#ipvsadm -E -t 172.16.100.117:80 -s sh

9,基于web修改RS端口映射;

# ipvsadm -e -t172.16.100.117:80 -r 192.168.20.7:8080 -m

# ipvsadm -e -t172.16.100.117:80 -r 192.168.20.8:8080 -m

或者修改 #vim/etc/sysconfig/ipvsadm 里的参数;然后重读信息。

这样web服务又恢复了正常;

10,删除一个real server;

#ipvsadm -d -t 172.16.100.117:80 -r192.168.20.7:8080

删除集群服务:

#ipvsadm -D -t 172.16.100.117:80

修复ipvsadm

#ipvsadm -R < /etc/sysconfig/ipvsadm

11,Lvs-dr 内核参数配置  arp_ignore对请求是否响应  / arp_announce 接不接受请求通告

arp_announce(通告)-INTEGER  请求

0 默认,不保留通告

1   尽量不通告

2  只能、总是避免通告

arp_announce = 1 尽量避免,

arp_announce = 2 只能、总是避免,

arp_ignore -INTEGER 响应

0 -默认 通告全场

1 -  仅通告报文请求的入口,

Lvs-dr实操图:

A,修改DIP

配置director主机地址和回环地址:

# ifconfigeno16777736:0 172.16.100.118/32 broadcast 172.16.100.118 up

# route add -host 172.16.100.118 deveno16777736:0    限定接口-->目标地址响应

B,配置real server   *参数配置--->配置VIP

配置两台real server内核参数;

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

#   echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

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

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

# ifconfig lo:0 172.16.100.118/32broadcast 172.16.100.118 up添加回环Vip地址

# route add -host 172.16.100.118 devlo:0  端口限定

C,请求RIP地址验证;curl 命令;

D,director上添加集群服务;

#ipvsadm -C 删除之前的配置

# ipvsadm -A -t172.16.100.118:80 -s rr

# ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.21 -g

# ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.22 -g

时间: 2024-08-09 03:16:25

Lvs 理论知识和实践的相关文章

lvs 理论1

LVS 理论知识 Lvs ,集群技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有和好的吞吐率,将请求均衡的转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的.高可用的虚拟服务器. Lvs 主要组成:负载调度器 对外的前端机 服务器池 真正执行请求的服务器 共享存储 为服务器池提供一个共享的存储器,使服务器池具有相同的内容,提供相同的服务 VS/NAT (virtual server/ network address translation) 在

RHCS集群理论暨最佳实践

RHCS集群理论暨 最佳实践 什么是集群?     集群是一组(>2)相互独立的,通过高速网络互联的计算机组成的集合.群集一般可以分为科学集群,负载均衡集群,高可用性集群三大类.     科学集群是并行计算的基础.它对外就好象一个超级计算机,这种计算机内部由十至上万个独立处理器组成,并且在公共消息传递层上进行通信以运行并发应用程序,像中国的银河,曙光超级计算机.     高可用性集群,当集群中的一个系统发生故障时,集群软件迅速作出反应,将该系统的任务分配至集群中其它正在工作的系统上执行,通过消除

商业智能BI-基础理论知识总结 ZT

因为要加入一个BI项目,所以最近在研究BI相关的知识体系,由于这个方面的知识都是比较零散,开始都很多概念,不知道从何入手,网上找的资料也不多,特别是实战案例方面更少,这里还是先把理论知识理解下吧,分享给大家,一起学习.下次再把实战的一一分享出来. 一.什么是商业智能BI BI(Business Intelligence)即商业智能,它是一套完整的解决方案,把企业的运营数据转化为信息或知识,辅助企业做出明智的业务经营决策的工具.将无序.零散.孤立的数据转换成整合的.规律的.有价值的数据资产,将其以

Web自动化测试理论知识

Web 自动化理论知识 1.自动化测试概述概念:用工具代替/辅助人工完成完成软件测试活动的过程特点:    可以对程序的新版本自动执行回归测试    可以执行一些手工测试困难或不可能进行的测试    可以更好地利用资源    测试具有一致性和可重复性误区:    期望自动化测试发现大量新故障    安全性错觉    自动化测试的维护开销 2.自动化测试的优势重复多次执行测试时节省很多时间提高测试覆盖率和测试精度实现自动化回归测试减少工作量减少手工测试人为产生的错误 提供规范化的过程和一致性更好的

TestNG学习-001-基础理论知识

此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestNG 测试框架的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! TestNG是什么?TestNG是一个灵感来自于 JUnit 和 NUnit 的一个设计用来简化广泛的测试需求的开源自动化测试框架,其引入了一些新的功能,使其功能更强大,而且易于使用,但是 TestNG 不是 JUnit 的扩展.它

堆和栈的理论知识

一.预备知识-程序的内存分配       1. 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap)-一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵.3.全局区(静态区)(static)-全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初

JDBC编程理论知识(1)

1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成. 组成JDBC的2个包: (1)java.sql.*; (2)javax.sql.*; 3.JDBC在程序中的位置: 4.JDBC的六个固定步骤 1,注册数据库驱动[利用反射] 2,取得数据库连接对象Connection 3,创建SQL对象 4,执行SQL命令,并返回结果集 5,处理结果集 6,

Android初级教程对大量数据的做分页处理理论知识

有时候要加载的数据上千条时,页面加载数据就会很慢(数据加载也属于耗时操作).因此就要考虑分页甚至分批显示.先介绍一些分页的理论知识.对于具体用在哪里,会在后续博客中更新. 分页信息 1,一共多少条数据 select count(*) from blacktb; 性能低下 原因: sql解析器先查询数据字典,把*转成所有的列名和列的类型 然后把每行数据提取出来 最后统计多少行数据 select count(常量) from blacktb; 高性能的查询 不需要每行的记录,只需要行数 2,指定每页

Winsock网络编程笔记(4)----基本的理论知识

前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsock的基本理论知识,由于是一篇笔记,鉴于看书速度有限,主要内容会慢慢地填入..错误在所难免的,希望看客更正..(*^__^*) 嘻嘻…… Winsock网络编程笔记(4)----基本的理论知识,布布扣,bubuko.com