热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVS中DR模式的负载均衡及高可用

**一LVS的三种IP负载均衡技术比较**我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术

**

一 LVS的三种IP负载均衡技术比较

**
我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
下面是这三种IP负载均衡技术的优缺点
这里写图片描述
注:以上三种方法所能支持最大服务器数目的估计是假设调度器使用 100M 网卡,调度器的硬件配置与后端服务器的硬件配置相同,而且是对一般 Web 服 务。使用更高的硬件配置(如千兆网卡和更快的处理器)作为调度器,调度器所能调度的服务器数量会相应增加。当应用不同时,服务器的数目也会相应地改变。所 以,以上数据估计主要是为三种方法的伸缩性进行量化比较。

VS/NAT
VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,
服务器组可以用私有的 IP 地址。缺点是它的伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身
有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
VS/TUN
VS/TUN 技术对服务器有要求,即所有的服务器必须支持 “ IP Tunneling” 或者 “ IPEncapsulation”协议。目前,VS/TUN 的后端服务器主要运行 Linux 操作系统。在 VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有 100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶
颈,可以 用来构建高性能的超级服务器。
VS/DR
跟 VS/TUN 方法相同,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提
高整个集群系统的吞吐量。跟 VS/TUN 相比,这种方法没有 IP 隧道的开销,但调度器和服务器组都必
须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的 HUB 相连。VIP 地址为调
度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服
务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为
VIP 的网络请求。

**

二 lvs的DR模式

**

下面用图文的方式中介绍一下DR模式
这里写图片描述
结合上图来做一个基本原理的说明:
Director 接收用户的请求,然后根据负载均衡算法选取一台 realserver,将包转发
过去,最后由 realserver 直接回复给用户。

1 client 向目标 vip 发出请求,Director 接收。
2 VS 根据负载均衡算法选择一台 active 的 realserver(假设是 172.25.1.3),将此 RIP 所在网
卡的 mac 地址作为目标 mac 地址,发送到局域网里。
3 realserver(172.25.1.3)在局域网中收到这个帧,拆开后发现目标 IP(VIP)与本地匹配,于是
处理这个报文。随后重新封装报文,发送到局域网。
4 如果 client 与 VS 同一网段,那么 client(172.25.1.250)将收到这个回复报文。如果跨了网段,
那么报文通过 gateway/路由器经由 Internet 返回给用户。

注意的问题:
vs/dr 本身不会关心 IP 层以上的信息,即使是端口号也是 tcp/ip 协议栈去判断是否正确,vs/dr 本
身主要做这么几个事:
1)接收 client 的请求,根据你设定的负载均衡算法选取一台 realserver 的 ip;
2)以选取的这个 ip 对应的 mac 地址作为目标 mac,然后重新将 IP 包封装成帧转发给这台 RS;
3)在 hashtable 中记录连接信息。
vs/dr 做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少。
数据包、数据帧的大致流向是这样的:client –> VS –> RS –> client
vs主要作为目标地址mac地址转发而这一过程在数据链路层来实现的,所以 director 必须和 RS 在同一网段里面。

2 实验测试:
2.1 环境介绍
Load Balance:172.25.1.2
Virtual IP: 172.25.1.100
Realserver1: 172.25.1.3
Realserver1: 172.25.1.4
2.2实验步骤
1)安装ipvsadm
这里写图片描述
/etc/init.d/ipvsadm start
2 ) vs临时配置
ipvsadm -A -t 172.25.1.100:80 -s rr
-A - t添加虚拟虚拟服务为tcp模式,virtualIP为172.25.1.100轮询的机制为轮询
这里写图片描述
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.4:80 -g
-a -t 添加rs IP 172.25.1.4 端口80
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.4:80 -g
ipvsadm -ln 查看策略
这里写图片描述
ip addr add 172.25.1.100/24 dev eth0 绑定vip到eth0网卡上
这里写图片描述
3)rs临时配置
ip addr add 172.25.1.100/32 dev lo
这里写图片描述
这里有两点原因

1 既然要让 RS 能够处理目标地址为 vip 的 IP 包,首先必须要让 RS 能接收到这个包。
在 lo 上配置 vip 能够完成接收包并将结果返回 client。
2 不可以将 VIP 设置在出口网卡eth0上,否则会响应客户端的 arp request,造成 client/gateway
arp table 紊乱,以至于整个 loadbalance 都不能正常工作。

arptables -A IN -d 172.25.1.100 -j DROP 将所有访问172.25.1.100的请求都丢弃
arptables -A OUT -s 172.25.1.100 -j mangle –mangle-ip-s 172.25.1.4 将172.25.1.100地址的转为目标地址172.25.1.4向外发出
arptables -nL 输出地址查看策略
这里写图片描述

安装httpd服务更好展现实验效果
yum install httpd -y
编写httpd发布文件
vim /var/www/html/index.html
这里写图片描述
4 )客户端测试
这里写图片描述
查看rs server3的mac地址
这里写图片描述
结果分析:说明了vs主要工作就是实现目标MAC地址转发!
2.3 负载均衡
如果增加了n台rs服务器,这个时候就需要负载均衡技术了
1)再增加了一台rs 2 配置和上面一样,这里就不做演示了
2)主机测试
这里写图片描述
结果分析:在vs中配置的-s rr轮询可以看出
这个时候有个问题就是如果后端的web服务done掉了,vs不会发现,这在生产活动中是不允许的!这就需要做健康检查
2.4 工具的健康检查
1) 安装软件
yum install ldirectord-3.9.5-3.1.x86_64.rpm
这里写图片描述
2)可能安装的时候会出现安装不了的情况,针对红帽的软件来说,我们需要对yum源进行配置
这里写图片描述
3 )启动服务
/etc/init.d/ldirectord start
4)查看配置文件
rpm -ql ldirectord
这里写图片描述
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf

virtual=172.25.1.100:80real=172.25.1.3:80 gatereal=172.25.1.4:80 gatefallback=127.0.0.1:80 gateservice=httpscheduler=rr#persistent=600#netmask=255.255.255.255protocol=tcpchecktype=negotiatecheckport=80request="index.html"#receive="Test Page" #必须要注释掉#virtualhost=www.x.y.z

/etc/init.d/ldirectord reload
/etc/init.d/ldirectord restart
5)为了看出ldirectord的工作模式,把rs上手动添加的vip手动去掉
ip addr del 172.25.1.100/32 dev lo
只要你重新启动服务就可以看见ip会继续出现lo接口上
6)这个时候假如你done掉rs一个web,你在调度器上查看策略

这里写图片描述
这个时候你可能还会有个问题就是,万一调度器也坏掉了,系统不是就瘫痪了?
下面接下来说的就是
2.5 LVS +keepalived 高可用集群
这里写图片描述
1)源码安装三部曲
tar zxf keepalived-2.0.6.tar.gz
cd keepalived-2.0.6
yum install rpm-build.x86_64
yum install gcc -y
yum install openssl-devel
./configure –prefix=/usr/local/keepalived
./configure –prefix=/usr/local/keepalived –with-init=SYSV
make
make install
这里写图片描述
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin
这里写图片描述
2 )关闭ldirectord服务,在某些功能上和keepalived冲突
这里写图片描述
/etc/init.d/keepalived start
2)编写配置文件 主备模式
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {notification_email {root@localhost
}notification_email_from keepalived@localhost smtp_server 127.0.0.1 #设置 smtp server 地址smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间router_id LVS_DEVEL #load balancer 的标识 ID,用于 email 警报vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER #备机改为 BACKUP,此状态是由 priority 的值来决定的,当前#priority 的值小于备机的值,那么将会失去 MASTER 状态interface eth0 #HA 监测网络接口virtual_router_id 51 #主、备机的 virtual_router_id 必须相同,取值 0-255priority 100 #主机的优先级,备份机改为 50,主机优先级一定要大于备机advert_int 1 #主备之间的通告间隔秒数authentication { #主备切换时的验证auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种auth_pass 1111 #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必#须使用相同的密码才能正常通信}virtual_ipaddress { #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个172.25.1.100}
}
virtual_server 172.25.1.100 80 { #定义虚拟服务器delay_loop 6 #每隔 6 秒查询 realserver 状态lb_algo rr #lvs 调度算法,这里使用轮叫lb_kind DR LVS 是用 DR 模式#persistence_timeout 50 #会话保持时间,单位是秒,这个选项对于动态网页是非常有
用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的
请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保
持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任
何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50
的时间限制。protocol TCP #指定转发协议类型,有 tcp 和 udp 两种real_server 172.25.1.3 80 { #配置服务节点weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权
值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设
置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统
资源TCP_CHECK { #realserve 的状态检测设置部分,单位是秒connect_timeout 3 #10 秒无响应超时retry 3 #重试次数delay_before_retry 3 #重试间隔}}real_server 172.25.1.4 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}

3)增加一台调度器服务器作如下的配置

! Configuration File for keepalivedglobal_defs {notification_email {root@localhost
}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.1.100}
}
virtual_server 172.25.1.100 80 {delay_loop 6lb_algo rrlb_kind DR#persistence_timeout 50protocol TCPreal_server 172.25.1.3 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 172.25.1.4 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}

/etc/init.d/keepalived reload
/etc/init.d/keepalived restart
4 )高可用测试:停止 master 上的 keepalived 服务,会发现客户端仍然可以访问。


推荐阅读
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 在CICS应用环境中,众多客户端通过网络与CICS服务器进行连接。系统管理员可以通过CICS系统交易CEMT查询当前连接的客户端信息。然而,在非客户端模式下,识别用户连接并解决信息获取错误的问题变得更为复杂。本文将探讨如何在CICS服务器端准确识别非客户端模式的用户连接,并提供有效的解决方案,以确保系统的稳定性和数据的准确性。此外,还将介绍一些常用的诊断工具和技术,帮助管理员快速定位和解决问题。 ... [详细]
author-avatar
水果jia
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有