博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
负载均衡之lvs
阅读量:6858 次
发布时间:2019-06-26

本文共 3892 字,大约阅读时间需要 12 分钟。

集群(cluster):将一组计算机软/硬件连接起来,高度紧密的协作完成计算工作,其中的单个计算机通常称为节点。负载均衡集群(Load Balancing):通过负载均衡器,将负载尽可能平均分摊处理。

LVS(linux virtul server)linux虚拟服务,分为三层结构:

            调度器:上面的虚拟ip面向客户端,将请求发送到真实服务器上。
            服务器:真正的服务器,上面可以启很多服务器(web,mail,ftp)。
            共享存储:给服务器提供共享存储,是服务器拥有相同的内容。

lvs与iptables/netfilter类似,工作在INPUT链上,当客户端请求集群服务器时,LVS会强制修改报文,将报文发往POSTROUTING,再转发到节点服务器处理。两个模块:

            ipvsadm 管理集群的命令工具;
            ipvs 在内核上具体操作;在2.4.23前的内核上没有。

三种模式:

NAT 地址转换	1、节点必须与调度器在同一网络	2、节点上的IP为私有IP,仅用于各节点和调度器之间通信(用组播通信)	3、调度器在客户端和服务器之间,负责所有通信进出	4、节点需将网关指向调度器	5、调度器支持端口映射(将80端口改为节点上的8080)	6、节点可以是任意类型操作系统,只要能提供服务	7、并发高是,调度器是瓶颈

DR(Direct Routing一般用在生产环境中)	1、节点要和调度器在同一物理网络(根据Mac转发)	2、节点上可以是公网IP(便于远程管理和监控)	3、调度器只负责入站请求,响应报文由节点直接发给客户端	4、节点网关不指向调度器	5、不支持端口映射工作原理:	调度器DR和真实服务器RS上都有一块网卡都有VIP,但是,当客户端请求发到路由器时,路由会事先设置静态路由直接指向DR,或让RS拒绝接受ARP请求。DR接收到后,根据算法将请求负载在一台RS上,DR会将请求的目标MAC改为那个RS的MAC,而其他报头不会改变,RS收到后,查看目标ip和MAC都是自己,所以就会解封装、处理、直接回应给客户端,再不经过DR。DR模式下RS两个内核参数:	arp_ignore:定义接受arp请求时响应级别(eth0:222.24.24.67、eth1:192.168.1.1)		0:只要本地配置VIP地址就会响应(有人不是192.168.1.1网段的,向eth0请求192.168.1.1的MAC,eth0也会回答)[请求的只要自己有就会说出去]		1:eth0接收到的是对192.168.1.1的查询,只会回应eth1的MAC,而不回应eth0的MAC。[请求什么说什么,不管是从哪个接口请求]		2:只有本接口收到请求本接口上MAC时才响应,不会响应不是请求本接口MAC的。(只有与222.24.24.67同网段的,向eth0请求222.24.24.67的MAC,才会回应,同理eth1,)[请求的和被请求的要在同一网段]		3:不回应该网络内的arp,只对设定的回应。	        4~7:保留未用。		8:不回应任何arp请求。	arp_announce:将自己的地址向外通告的级别。		0:将本地任何接口的ip地址向外通告。		1:当请求时本网络内主机时,尽量不通告。		2:通告最合适的本机地址。	一般arp_ignore=1、arp_announce=2
TUN(隧道模式)	1、节点可以跨互联网	2、节点IP是公网IP	3、调度器负责入站请求	4、节点网关不指向调度器	5、不支持端口映射工作原理:	服务器可能在不同的地方,相距比较远。在原来的ip报文再封装一个ip,源ip为DIP,目标ip为RIP,RS收到后解封装后会看见原来的ip封装。

支持的调度算法:	1、RR(Round Robin)“轮叫”:按顺序将请求轮流均等的分配到各节点。						2、WRR(Wighted Round Robin)“加权轮叫”:根据服务器的处理能力来调度请求,(多能多劳)	3、SH(Source Hashing)将请求的源IP地址,作为散列键从静态分配的散列表,找出对应的服务器,用于session绑定。	4、DH (Destination Hashing)将请求的目标地址,作为散列键从静态分配的散列表,找出对应的服务器	5、LC(Least Connections)最少链接,动态地将网络请求调度到已建立的链接数最少的服务器上	6、WLC(Weighted Least Connections)加权最少链接,具有较高权值的服务器将承受较多的活动连接负载,调度器可以自动问询真实服务器的负载情况,并动态地调整其权值(lvs默认用该算法)	7、sed 最短期望延迟 wlc的改进版,权重大的服务器事先被挑中,(active+1)*256/weight,权重大的服务器有很多的时候,权重小的服务器可能一个都没有。	8、nqnever queue 永不排队无需队列,如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算。	9、LBLC(Locality-Based Least Connections)基于局部的最少链接,针对目标IP地址的负载均衡,目前主要用于Cache集群系统。根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的,将请求发送到该服务器;若服务器不存在或超载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。	10、LBLCR(Locality-Based Least Connections with Replication)带复制的基于局部的最少链接,它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。

基本配置:	安装ipvsadm	uname -r	#查看内核版本	2.6.18-194.el5	rpm -q kernel-devel			#查看有无内核源码	package kernel-devel is not installed		#于是下载kernel-devel-2.6.25-14.fc9.i686.rpm	rpm -i kernel-devel-2.6.18-398.el5.i686.rpm	#安装后会在/usr/src/kernels中有内核源代码	ln -s /usr/src/kernels/2.6.18-398.el5-i686/ /usr/src/linux 	#做软链接					NAT					ipvsadm:	格式:ipvsadm -A|E -t|u|f service-address [-s scheduler]		-A 增加集群服务			ipvsadm -A -t 222.24.24.1:80 -s rr	#添加一个集群服务算法为rr		-E 改服务			-t tcp			-u udp			-f 防火墙标记号		-D删除服务	ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m]				-a添加一个节点			-r表示节点服务器的ip			-g DR			-i TUN			-m NAT	ipvsadm -a -t 222.24.24.1:80 -r 192.168.1.1 -m 			#添加两个RS	ipvsadm -a -t 222.24.24.1:80 -r 192.168.1.2:8080 -m			-L/l	查看			-n表示用户数字ip表示主机			--rate 查看速率			--stats 查看统计			--timeout 显示超时(tcp tcpfin udp)		-C删除所有集群服务		-S保存配置	ipvsadm -S > ipvs.bak		-R加载配置	ipvsadm -R < ipvs.bak	(配置lvs是,节点之间的时间必须是一样的,误差不超过1S)		可以和调度器同步时间,ntpdate 222.24.24.1 (222.24.24.1是调度器)		或者修改/etc/ntp.confDR 	在DR上:		sysctl -w net.ipv4.conf.eth0.arp_announce=2			设置相应arp级别		sysctl -w net.ipv4.conf.all.arp_announce=2		echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore		echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore		echo 1 > /proc/sys/net/ipv4/ip_forward				打开转发功能	在RS:		ifconfig lo:0 222.24.24.1 	配置VIP
lvs持久连接:
    PPC(持久端口连接)将来自同一客户端,对同一集群服务的请求始终定向至此前选定的RS。
    PCC(持久客户端连接)将来自同一客户端,对所有端口的访问,都定向到之前选定的一个RS。
    PNMPP(持久防火墙标记连接)将特定端口定义在同一RS,在防火墙PREROUTING链上。

lvs很优秀但是也有缺陷,没有技术支持,调度也会出现单点故障等等。

转载于:https://www.cnblogs.com/imlifelong/p/10651323.html

你可能感兴趣的文章
Kubuntu 初始配置
查看>>
python中列表和元组的操作(结尾格式化输出小福利)
查看>>
用过的一些服务器集成软件
查看>>
一键拨打
查看>>
20120522:ERROR - ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
Maven构建war项目添加版本号
查看>>
更新 手淘 flexible 布局 rem 单位适配问题
查看>>
第三次作业
查看>>
新浪微博登录接口实例
查看>>
wcf技术剖析_会话
查看>>
AngularJS 指令的 Scope (作用域)
查看>>
gitlab的使用
查看>>
iOS 生成本地验证码
查看>>
找不到 javax.servlet.http.HttpServletResponse 和 javax.servlet.http.HttpServletRequest 问题解决...
查看>>
Flip Game(枚举)
查看>>
WebWorker与WebSocket实现前端消息总线
查看>>
Selector
查看>>
Unity 2018.3.1 SyncVar没有同步服务器变量
查看>>
Linux命令(2) - 查看目录和文件大小: du -sh
查看>>
python的一些常用标准库
查看>>