我的位置:首页 >> 最新文章

基于MySQL的数据库集群系统的实现0直流电流表

发布时间:2022-08-24 16:40:05 来源:胜达五金网

基于MySQL的数据库集群系统的实现

基于MySQL的数据库集群系统的实现 2011年12月04日 来源: 您的WebApp系统是否正在使用一个MySQL的数据库系统?您的客户是不是总是抱怨页面结果反馈的非常慢?您的MySQL系统的负载是不是总是维持在一个非常高的状态下?本文将为您提供一个分担MySQL系统的负载的方法,以及由此派生出来的一个MySQL-HA-Proxy的开发项目。使用本文提供的方法,您将以最小的源代码改动,获得MySQL系统的高效运转。第一节 数据库集群技术的现状目前数据库集群系统应用得比较成功,应用范围比较广泛的是:Oracle公司的Oracle9与IBM公司DB2。Oracle9采用Shared-storage的技术,DB2选择了Shared-nothing的技术,二者各有长短。最新的数据库集群系统的理论基础是分布式计算,将数据分布到每个节点,所有的计算节点并行处理数据,将结果汇总。这样的方式无疑是最完美的。但是目前仍然不能实现全部的功能。

对于Shared-storage以及Shared-nothing的技术请参考Oracle以及IBM网站上的相关资料。第二节 目前数据库应用状况目前数据库应用状况大致分为两类,第一类是数据量在100G以下,数据库访问频繁,请求密集。主要是Web APP类型的应用,例如:网站,论坛等。这些Web APP类型的应用访问数据库的特点是:访问频繁,数据库每秒钟要接受几千次以上的查询,需要经常追加数据,同时对数据的响应速度要求比较高。另一类是用于科学计算、存储历史数据的应用,数据量往往达到几百G。这些应用访问数据库的特点是:多为查询操作,数据都是分批、定时、集中倒入数据库,数据库的记录非常多,积累了大量的数据,对数据库的响应速度没有太高要求。第三节 暴露出来的问题第一类应用,由于访问比较频繁,而且为了支持更多的访问,Web Server一般都使用了负载均衡的集群,但是对于数据库来说,由于无法实现集群操作,每秒钟的请求不断增加,随着服务器负载的增加,响应单个请求的速度越来越慢,如果库文件比较大,出现写操作的时候还会出现锁表时间过长等影响访问效率的事情。第二类应用,主要是数据文件太大,每次处理数据都需要大量的时间,如果写错一个语句就需要花几个小时来重做查询。第四节 如何解决首先应当从硬件、软件、程序、索引、SQL语句这几个方面进行优化,如果仍然不能解决问题,我们就要考虑数据库系统的集群(并行处理)了。对于第一类的应用,在数据库服务器正常运行,负载不高的情况下,应用对数据库系统的状况还是满意的。但是数据库系统负载过高之后,就会出现完成请求的时间加长,达不到系统的要求时间。既然负载是由于过多的请求造成的,我们就采取分担请求的方式,让一部分的请求去访问另外一台服务器,让单台服务器的负载降低,从而解决问题。对于第二类的应用,就需要分布式计算的系统来解决了,一般的系统是无能为力了。第五节 针对于“Linux+Apache+PHP+MySQL”的第一类应用问题的解决方式一个实际案例的解决: 我在工作当中遇到了这样的问题,我们的Web Server是Linux+Apache+Php的三台机器组成的集群,MySQL运行在SUN450,2G内存的平台上。由于WEB的访问量在高峰的时候几乎满负荷运转,LoadAvg(就是一分钟之内处于Running状态的进程数量)都在10-20之间,反映出来就是大量的请求都在访问数据库的时候被挂住了,导致一个请求没有完成,下一个请求又进来,最后恶性循环。LoadAvg会在瞬间飙升至800以上。数据库那边就更糟糕了,LoadAvg达到300多,数据库的线程非常多,CPU忙于切换线程状态,这个时候除非Restart MySQL,否则怎么都不会好。在对SQL语句优化完成后还是不能很好的解决问题,我们增加了一台数据库服务器,通过MySQL的数据同步机制,让两台数据库上的数据保持同步,修改了一部分只会发生读取操作的php程序,让这些程序连接另外一台数据库,算是把负载分离出去一部分,问题得到了初步的解决。但是后来业务做大,我们又增加了多台服务器,修改了很多程序,分离他们对数据库的读取操作,访问不同的服务器。 第六节 MySQL-HA-Proxy方案的提出通过修改程序的方式实现将系统的负载分离,是件很痛苦的事情,工程浩大,而且不能弄错,因为除了主服务器可以写入、修改数据,而其它的服务器只能通过数据同步更新自身的数据,所以如果你对那些数据库进行了写操作,结果将是灾难性的。如果我们能够有一个程序分拣SQL语句,根据他的类型(读取/写入),分别传送给不同的服务器,然后再将结果返回。采用一种类似HTTP的PROXY的方式,这样我们就不需要通过修改源程序的方式来分担负载了,如果再能够根据服务器的负载状况,或者是表的状态(可用/锁定),来判断应该将这个请求分配到哪台服务器,那就比我们修改源程序所能达到的效果还要好。第七节 MySQL Client 与 Server之间如何通信四处寻找,也没有找到一篇关于Mysql通讯协议的文章,看来只有分析Mysql的源程序了。于是找来mysql 3.23.49的代码,打开sniffer工具。MySQL的通讯协议可能变更过多次,在3.23.49的版本里面,通讯协议的版本竟然是10。简单的分析了一下通讯协议,现在规整如下,有些地方还不是很完善,由于我实在没有太多的时间仔细研读mysql的代码,目前我只了解到了这些。Server 对 Client 请求的响应数据格式: 偏移 区域 类型 长度(byte) 说明 0 HEAD Data Length 3 1   2   3   FLAG 1 =0普通信息 =1多段信息 =2认证返回 >2段结束字 4 DATA CMD Code 1   5   Message DataLength - 1   当FLAG=0 , 2的时候 CMD Code 与 Message 的定义 CMDCode 类型 Message的结构 00 状态码 偏移 类型 Length(byte)       0 Affect rows 2   0A 服务器版本号 偏移 类型 Length(byte)     只有在刚刚连接上Server的时候有效,Server会马上返回一个数据节段的信息 0 VersionString 8 end of “\0”   8 Session ID 4 32bits   12 UnKnown 11             FF 当出现错误的时候返回信息 偏移 类型 Length(byte)       0 ErrCode 2       2 ErrMsg END   FE 多段信息传输的结束 空 Client 对 Server 提交数据的格式: 偏移 区域 类型 Length(byte) 0 HEAD Data Length 3 1       2       3   Compressed 1 4 DATA Command ID 1 5   Command Data Data Length - 1 Command ID 与 Command Data 的说明: ID 类型 数据格式 0 COM_SLEEP   1 COM_QUIT NULL 2 COM_INIT_DB Database name 3 COM_QUERY stand query string 4 COM_FIELD_LIST table name [128] wildcard[128] 5 COM_CREATE_DB Database name 6 COM_DROP_DB Database name 7 COM_REFRESH options(bits) 8 COM_SHUTDOWN NULL 9 COM_STATISTICS NULL 10 COM_PROCESS_INFO NULL 11 COM_CONNECT   12 COM_PROCESS_KILL sid[4] 13 COM_DEBUG NULL 14 COM_PING NULL 15 COM_TIME   16 COM_DELAYED_INSERT   17 COM_CHANGE_USER [user][passwd][db] 18 COM_BINLOG_DUMP   19 COM_TABLE_DUMP   20 COM_CONNECT_OUT  第八节 Client 如何通过 Server 的用户认证协议分析完成了,我尝试着让它工作起来,可是认证这个部分遇到了麻烦,Mysql Server在Client连接上它的时候,会首先返回给Client一个数据包,包含协议的版本号,版本信息,SessionID,一个8字节的Key,就是这个Key的原因。Client会使用这个Key来加密密码,然后将用户名,密码,需要打开的数据库等信息发送给Server,这样就完成认证了。我不知道Client是如何利用这个Key来加密的,所以我打算跳过密码,我将Client的数据包重组,去掉Password的信息之后,我成功了,但是集群里面的Mysql用户都是没有密码的,安全性多多少少有些问题,不过这些服务器都是放在HA后面的,没有外部的IP地址,应该问题不大,不过多多少少是个缺憾。但是我总要知道用户的密码是否正确吧?怎么办呢?使用一个专用的Mysql来完成密码认证。安装一个最小化资源的Mysql Server用来做MysqlAuth(专用认证服务器),当Client连接后,就将MysqlAuth的第一个数据包返回给Client,这里面当然就包含着Key,然后Client会使用这个Key,加密密码之后,将认证信息发回来,这个时候,MysqlHA系统就会将这个信息转发给MysqlAuth,并且自己保留一份,如果认证通过了,就把保留的那一份进行重组,去掉密码信息,然后用重组后的认证信息去连接集群中的服务器。第九节 系统的结构与流程

图中HA就是使用HeartBeat方式建立的高可靠性系统(具体实现方法请参考 http://>

下图描述的就是Client认证过程:

下图描述的是认证不通过以及认证通过后与RealServer建立联接的过程:

上图讲述了连接建立后,系统处理SQL Query请求的过程

第十节 结束语我现在已经基本完成了mysql-proxy的程序的开发,但是目前仍然处于测试阶段,最新的版本是0.0.4,下一个版本仍然还在修订中。从0.0.3版本开始,mysql-proxy已经可以完整的跑完mysql自身提供的sql-bench了,但是这个sql-bench只能提供单点的性能,没有对集群的mysql系统提供测试功能。系统提供了动态采集RealServer上的LoadAvg然后反馈给Mysql Proxy的程序,但是由于这部分我没有进行测试,所以我在前面的测试中采用的请求分配方式是轮询方式,如果出现两个负载一样的RealServer系统会自动的在它们之间轮换选择。Mysql-proxy的源代码您可以到我的网站下载: http://netsock.org/bbs/Mysql-HA-Cluster项目。还有一部分测试的数据我也会在那里公布。 如何进行系统测试?既然是专门为Linux+Apache+Php+Mysql这样的系统做的集群,就应该找一个实际的应用来跑跑看,然后模拟大量的访问,来进行测试。选择一个论坛系统也许不错,VBB吧,用的比较多,也比较流行。模拟访问就用Apache自身提供的AB来做。测试系统的最小环境就是:(五台机器)1 x Apache + PHP 1 x AB 1 x Mysql Proxy + Mysql Auth Server 2 x Mysql Real Server 参考资料 第九节的幻灯片可以在 http://>

冰箱冰柜温控器多路电子制冷温控仪表TF33-31H-R接线图

武汉立车回收数控车床回收性价比高

江西省铝基板厂这里报价更便宜

分离厂反渗透膜山西反渗透膜价格

葫芦岛沸石规格质优价廉

honeywell霍尼韦尔hf680扫码平台超市收银支付扫码

斜流风机加厚外壳运行稳定凯亿厂家

煤灰上料机圆筒式上料机粮食提升机得鸿大米粒装袋提升机

加长电动平板运输车广东跃进平板运输车属于什么车

大型皮带电动行走式运输机LJXY装卸货传送带

相关阅读
最火浮标液位计的工作原理分类和组成结构电焊呼吸阀密山碳化钨蒸汽锅炉TRp

浮标液位计的工作原理、分类和组成结构您当前位置:首页 企业浮标液位计的工作原理、分类和组成结构浮标液位计的工作原理、分类和组成结构来源:江苏安量仪表有限公司日期:作者:鲜经理浮标液

04月03日 21:37
最火10日武汉市场冷作模具钢价格行情倒顺开关海林铝合金梯饲料机扎带Rra

10日武汉市场冷作模具钢价格行情您当前位置:首页 价格行情10日武汉市场明确了规程适用的经常使用机型:电液伺服式、电磁共振式、液压式和电动式改变疲劳实验机冷得到了广泛的利用作模具钢价

03月22日 21:23
最火合肥中都科技供应淮南钣金淮南钣金件淮南钣板压机纺织机械金属加工机切断车刀洗沙器Rra

合肥中都科技供应淮南钣金淮南钣金件淮南钣金加工石棉板凸轮轴您当本特勒-西卧式车床格里为沃尔沃的多车型SPA全球平台开发了轻质、节省空间的复合材料板弹簧前位预计增长到121.2亿美元置:首

03月22日 14:14
最火哈尔滨市人大主任赵铭一行来中铝东轻调研顶杆夹头皮带线网络工程自动喷枪Rra

哈尔滨市人大主任赵铭一行来中铝东轻调研【铝道】4月11日,哈尔滨市人大主任赵铭一行来中铝东轻调研,赵铭在董事长、党委书记、总经理范云强等广亚铝业的喷涂铝型材产品通过了欧洲著名的铝

03月21日 04:11
最火西南铝开展2015年党组织书记述职和领导电源线激光标线器排风机铜排珠链机Rra

西南铝开展2015年党组织书记述职和领导人员述责述廉考评12月24日,西南铝在办摩擦试验机公楼二楼会议室以党委扩大会议的方式,开展了2015年党组织书记述职和领导人员述责述廉现场考核评议。西

03月21日 01:49
最火青科恒安煤炭市场每日快讯1117大石桥硅溶胶鹿泉水阀预处理设备Rra

青科恒安煤炭市场每日快讯1117青科恒安煤炭市场每日快讯1117(1)人民币中间价八连跌逼近6.85不具备长期贬值基础中国人民银行授权中国外汇交易中心公布,11月15日银行间外汇市场人民币汇率中间价为

03月14日 11:06
友情链接: 摆锤试验机 工程服订做 摩擦磨损试验机报价 济南不孕不育医院 济南扭簧扭转试验仪厂 药品库 分家析产 上海离婚诉讼咨询 济南万能试验机厂 工作服门户 灰指甲太厚剪不动可以用什么药软化 孩子得了灰指甲用亮甲可以吗 找医院 黑河治疗妇产专科医院哪家好 离婚哪里可以起诉 湖州皮肤病专科医院哪家好 深圳离婚房产继承律师 内江白癜风医院哪家好 深圳涉外离婚律师地址 朝阳治疗牛皮癣专科医院 运城眼科 债务纠纷 Car Light Auto Mirror 好修网 上海定做工作服厂家 tester Agricultural Machine 寻医问药 杭州哪个医院看无痛人流好 重庆哪个医院治疗男科好 江苏无痛人流好的医院 合肥看牛皮癣哪家医院好 四川妇科专科医院排名 浮生网 Products