大型网站的负载均衡器、db proxy和db

大型网站的负载均衡器、db proxy和db

本文主要分析网站后台架构中的负载均衡器,企业常用的硬件负载均衡器软件负载均衡器、数据库代理服务器和数据库。

1.1 负载均衡

在大型网站部署中,负载均衡至少有三层部署。第一层为web server或者缓存代理之上的负载均衡,第二层为数据库之上的负载均衡,第三层为存储设备之上的负载均衡。

在第一层部署中,最常使用的是硬件负载均衡器有F5 BIG-IP、Citrix NetScaler、Radware、Cisco CSS、Foundry等产品。这些产品价格不菲,高达几十万人民币。在中国大陆,采用F5Network公司的BIG-IP负载均衡交换机的网站有新浪网、雅虎、百度、搜狐、凤凰网、央视国际、中华英才网、猫扑、畅游等。之前淘宝采用 NetScaler作为其硬件负载均衡器。后来用软件负载均衡器LVS和HAproxy混合使用来代替硬件负载均衡器。硬件负载均衡器可以提供OSI参考模型的第四/七层进行负载均衡。在第七层实现负载均衡的原理是,通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。在第四层(网络层)实现负载均衡的DR模式的原理是,通过更改请求包的目的MAC地址来进行负载均衡。

在第一层部署中,最常用的软件负载均衡器为LVS(LinuxVirtual Server)和HAproxy。其中LVS采用基于IP负载均衡技术和基于内容请求分发技术。最常用的LVS负载均衡技术为DR负载均衡。

在第二层部署中,最常用的为mysql-proxy(后端部署必须为MySQL数据库),该代理服务器可以监测、分析或改变客户端的通信。最常用途为负载均衡,读写分离等。

在第三层部署中,最常用的存储设备都要做RAID,其中RAID0便为最基本的存储层的负载均衡。RAID0通过分带技术,将数据分割,然后并行的读写于各个磁盘上。这样实现底层存储一级的负载均衡。

 

1.2 LVS软件负载均衡器

LVS(LinuxVirtual Server)是由章文嵩博士主导开发的一款开源软件,可以实现Linux平台下的基于网络层的负载均衡软件。典型的基本架构图如图6-2-1所示。

           

                                                                            图6-2-1

LVS集群采用IP负载均衡技术和基于内容请求分发技术。

如图6-2-1所示,LVS集群采用基于IP负载均衡技术和基于内容请求分发技术。当客户端有请求时,首先将请求包传送到Load Balance,然后Load Balance从后面的Real Servers中按照一定的算法策略选取一台Real Server,比如Real Server1,然后把请求包发送给Real Server1进行处理。对所有用户而言,面向用户的服务器端IP地址,只有一台,称之为VirtualIP Address。

 

1.2.1 LVS集群中实现的三种IP负载均衡技术

VS/NAT、 VS/TUN 和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

1.2.1.1 VS/NAT技术

VS/NAT(VirtualServer via Network Address Translation)技术,主要通过网络地址转换,将一组服务器构成一个高性能的、高可用的虚拟服务器。NAT的工作原理是当内部网络中的主机要访问Internet或被Internet访问时,就需要采用网络地址转换NAT,将内部地址转化为Internet上可用的外部地址。NAT的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户端相信他们连接到了一个IP地址,而不同的IP地址服务器组也认为他们与客户直接相连的。由此,可以用NAT方法将不同IP地址的并行网络服务变成一个IP地址上的虚拟服务。VS/NAT的体系结构如图6-2-1-1所示。

                       

                                                                                                           图6-2-1-1

客户端访问服务器的请求包和响应包变化情况如下所示:

访问Web服务的报文可能有以下的源地址和目标地址:

SOURCE

202.100.1.2:3456

DEST

202.103.106.5:80

调度器从调度列表中选出一台服务器,例如是172.16.0.3:8000。该报文会被改写为如下地址,并将它发送给选出的服务器。

SOURCE

202.100.1.2:3456

DEST

172.16.0.3:8000

从服务器返回到调度器的响应报文如下:

SOURCE

172.16.0.3:8000

DEST

202.100.1.2:3456

响应报文的源地址会被改写为虚拟服务的地址,再将报文发送给客户:

SOURCE

202.103.106.5:80

DEST

202.100.1.2:3456

这样,客户认为是从202.103.106.5:80服务得到正确的响应,而不会知道该请求是服务器172.16.0.2还是服务器172.16.0.3处理的。

1.2.1.2 VS/TUN技术

VS/TUN 的工作原理:它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。如图6-2-1-2所示。

                     

                                                                                      图6-2-1-2

1.2.1.3 VS/DR技术

在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。如图6-2-1-3所示。

                   

                                                                                  图6-2-1-3

 

1.2.1.4 LVS的调度算法

前面几节,介绍了LVS的三种基于IP的负载均衡技术,下面简单介绍一下调度算法。调度算法的目的是解决如何合理有效的从LVS后端的RealServers中,选择一个RealServer来对请求包进行处理。在整个LVS项目中,共给出八种调度算法,主要有:

(1)轮询调度。主要指按顺序从RealServers中选择一台RealServers。

(2) 加权轮叫调度。给Real Servers设置一定权值,进行调度。

(3)最小连接调度。按照RealServers的连接情况进行调度。

(4)加权最小连接。根据设置的权值和现有的连接数进行调度。

(5)基于局部性的最小连接。主要用于增大Cache命中。

(6)代复制的基于局部性的最小连接。

(7)目标地址散列调度。

(8)源地址散列调度。

在上述八种调度算法中,最常用的调度算法是轮询调度。

 

1.3 db proxy

在大型互联网站的数据库部署中,部署最多的数据库为MySQL。随着MySQL中Innodb存储引擎对事物的支持,MySQL在互联网公司部署中,应用量越来越多。典型应用MySQL的公司有Google、Baidu、Taobao等大型互联网公司。MySQL的优势在于其高扩展性和价格优势等。实际上,MySQL可以免费应用于企业级的部署中。

在MySQL复制方式部署中,有两种部署方式:同步复制和异步复制。同步复制采用NDB 存储引擎,异步复制需要使用mysql-proxy结合master-slave实现。

异步复制主要为了解决读写分离的问题。因为用户对网站的访问有读操作多,写操作少的特点。甚至像taobao.com这样的网站读写比例高达10:1,所以采用MySQL-Proxy结合主从异步复制实现读写分离是非常重要的增快访问速度的方法。这样如果有更高的用户访问需求,通过增加slave机器,不会对现有系统提供的服务产生影响而实现很好的、很灵活的业务扩展。

1.3.1 mysql-proxy

mysql-proxy是一个MySQL的代理服务器,用户的请求先发向mysql-proxy,然后mysql-proxy对用户的数据包进行分析,从下一层的mysql 数据库中选择一台数据库,将用户的请求包交给mysql处理。

首先MySQL Proxy 以服务器的身份接受客户端的请求,根据相应配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,然后返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。MySQL Proxy通过使用lua脚本,来实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。所以部署MySQL-Proxy需要安装运行Lua语言的环境。典型的MySQL-Proxy应用为实现读写分离,如图6-3-1所示。

                

                                                                                   图6-3-1

 

1.3.2 MySQL主从复制(Master-Slave Replication)

MySQL主从复制(Master-Slave Replication)是通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了数据库的复制功能。原理如图6-3-2所示:

            

                                                            图6-3-2

MySQL主从复制的作用如下:

(1)    可以作为一种备份机制。

(2)    可以用来做读写分离。

1.3.3 MySQL主从复制结合MySQL Proxy实现读写分离

通过使用MySQL-Proxy来作为代理服务器,配置MySQL Proxy,将所有的写操作,分流到master MySQL上,所有的读操作分流到slave MySQLs。      

这样就实现了读写分离。如果有新的访问需求,只需添加slave MySQL机器来解决问题。所以这样的结构扩展能力非常好。如图6-3-3所示。

                    

                                                                                       图6-3-3

 

1.4 本文小结

本文主要论述了负载均衡在大型网站后台架构中的应用。主要分析了应用层的软件负载均衡器LVS的三种负载均衡算法,简单介绍了LVS的八种调度算法。详细分析了MySQL的主从复制和读写分离的实现机制。给出了高可用网站后台的部署中解决负载均衡的方案。


声明:本文档可以随意更改,但必须署名原作者

作者:凤凰舞者 qq:578989855

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连接网络后浏览器却上不了网

解决在IE浏览器中 更新后的系统IE浏览器需要搜索才能出现 完成

linux 字符串截取_linux下可执行文件分析

一 背景也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑。分析的二进制执行文件为linux下的可执行文件。二 常用二进制文件静态分…

linux 版本_Linux动态库版本号作用机制

熟悉linux的都知道,linux的动态库如果有版本号的话,一般是libsample.so.x.y.z这样的名字。x.y.z对应的就是major.minor.release(即主.次.发布)版本号Major:大版本更新,前后都不兼容(比如移除api,又新增api)Minor&#…

arcgis在面内创建随机点

在数据管理工具下选择要素类,在要素类下选择创建随机点

python中osgeo库使用教程链接

1. 地理数据处理软件包GDAL简介 2. GDAL python教程(1)——用OGR读写矢量数据 3. GDAL python教程(2)——几何形状geometry与投影projection4. GDAL python教程(3)——过滤器,简单的空间分析&…

winform 判断控件有没有被遮挡_编程入门基础之 winform(2)

在编程入门1中,我们通过WINFORM等控件画出了登录界面,我们今天写登录界面的登录按钮事件。装修预算小程序登录按钮事件在上图中,我们看到了,有几个判断 ,在C#中,if ,else是作为条件判断语句来使用。条件判断…

利用python读取点矢量对应栅格值

每行代码都有详细注解 所需库 # GDAL是栅格和矢量地理空间数据格式的转换器库 # 旧版本加载库的方法 #import gdal,gdalconst # from 语句让你从模块中导入一个指定的部分到当前命名空间中 # GDAL数据驱动,与OGR数据驱动类似 gdal是读取栅格数据 ogr是读取矢量数据 # 查看支持…

解决input设置背景后,在ie7下浏览内容过长背景跟着滚动

先发发牢骚,万恶的IE啊。这么点问题害我走弯路,浪费时间,浪费生命。本以为加上background-attachment:fixed;问题就没了,结果问题依然存在,查资料说好像是ie bug。无语,天杀的IE,谁叫人家IE是老…

利用python读取栅格数据

代码具有详细说明注释 所需库 #gdalconst中的常量都加了前缀,力图与其他的module冲突最小 from osgeo import gdal,gdalconst from osgeo import gdal_array as ga # 用于引入一个模块的同时为该模块取一个别名 from osgeo.gdalconst import GA_ReadOnly# 开始对栅…

从零开始破解WEP、WPA无线网络

以前出差时在机场用过无线网络,小区内是否也有无线网络呢?随便一搜,果然有几个无线网络信号,于是打起了免费蹭网的主意,但信号最好的几个网络的WEP或WPA密码成为了一个门坎,于是在公司上网查到相关资料&…

python读取栅格gdal库下载链接

gdal下载链接 安装 再下载后的文件所在文件下的路径 在此输入cmd

spectral安装

Spectral Python (SPy) 是一个纯 Python 模块,用于处理高光谱图像数据。它具有读取、显示、操作和分类高光谱图像的功能。 SPy 需要 Python 并依赖于其他几个免费提供的 Python 模块。在安装 SPy 之前,您应该确保满足其依赖项。虽然您可以仅使用 Python…

python将字典作为参数传入函数

示例 max_d {"scholl":123} print(*max_d) print(**max_d) 运行结果 scholl Traceback (most recent call last):File "D:/pythonProject1/test.py", line 3, in <module>print(**max_d) TypeError: scholl is an invalid keyword argument for …

SaaS窘境[欣赏然后翻译之]

Piaoger按&#xff1a; 还是SaaS窘境&#xff0c;只不过这次是翻译了一篇不错的英文Blog&#xff0c;翻译的过程很苦&#xff0c;有些地方至今也还觉得生涩&#xff0c;慢慢改吧。 不过怎么说&#xff0c;收获良多&#xff0c;无论是SaaS&#xff0c;还是Disruptive Innovation…

解决IDL检索COM类工厂中CLSID为{ }组件注册失败

作者用的envi版本为5.3 在第一次利用C#对IDL进行二次开发出现组件注册失败 解决方法&#xff1a; 亲测有效 以管理员的身份运行命令提示符 然后在文本框内输入即可解决 C:\Windows\System32\regsvr32.exe "D:\Program Files\Exelis\IDL85\resource\bridges\export\CO…

win7上安装wince6.0

先在 Win 7 上装 WinCE 6.0会出现如下问题&#xff1a; 1、ToolsMsmCA(Error): Setup package issue or CoreCon DataStore corrupted: CDeviceSDKInstallShim Add/Remove failed. HR0x8007005。 2、ToolsMsmCA(Error): Setup package issue or CoreCon DataStore corrupted…

arcgis缓冲后在envi中聚类出错

问题&#xff1a; arcgis将某一矢量缓冲后&#xff0c;将非研究区的nodata值改为-9999&#xff0c;后在envi中聚类&#xff0c;发现只分成两类&#xff0c;研究区和非研究区 解决 将-9999改为nodata值这样非研究区就不会参与计算

dem聚类只能成为一类

将各个图层分类后在进行聚类

VMware下桥接设置

操作环境 主机&#xff1a;Win7 X86 SP1 虚拟机&#xff1a;VMware station 8 虚拟机里的系统&#xff1a;Fedora 15 环境上&#xff0c;不管什么系统&#xff0c;什么版本的虚拟机&#xff0c;使用上都是大同小异的&#xff0c;毕竟核心是不变的。 VM虚拟机下linux系统&am…