Mysql读写分离配置说明_第1页
Mysql读写分离配置说明_第2页
Mysql读写分离配置说明_第3页
Mysql读写分离配置说明_第4页
Mysql读写分离配置说明_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉众采在线科技有限公司Mysql读写分类配置说明1 方案本文档是针对基于Mysql数据库复制技术且从应用上进行读写分离的配置方案,遵循的原则为:a) 所用数据库写操作都在主数据库上完成b) 所有涉及事务处理的数据库操作在主数据库上完成c) 读操作可以根据从数据库服务器的负载状态进行智能选择d) 每台数据库服务器安装服务器状态汇报程序及时向读写分离服务器回报自己的忙闲状态指标本文档中的配置说明是遵循以上原则的一种实现,并非是固定的模式。2 配置说明2.1 数据服务器配备由于测试环境只装了主、从服务器各一台,这里用主服务器再逻辑模拟一台从服务器IP地址:端口服务器类型applicationCon

2、text.xml中的配置:3306主sessionFactory:3306从sessionFactoryForRead1:3306从(模拟)sessionFactoryForRead22.2 在Spring配置文件中进行配置2.2.1 定义数据源以上定了了3个数据源,分别是dataSource、dataSourceForRead_1、 dataSourceForRead_2。注意上面dataSourceForRead_1和dataSourceForRead_2定义中增加了的配置,配置这两个数据源为只读数据源,当通过他们发出修改命

3、令时,系统会自动报错,这一点在改应用时要特别注意。2.2.2 定义抽象的Spring Session工厂com.shf.utils.web.DialectForInkfishbeeeye2trueupdate!- true -truecom.googlecode.hibernate.memcached.MemcachedCacheProvidertruenet.rubyeye.xmemcached.utils.hibernate.XmemcachedClientFactory:11211300 classpath:/com/shf/pojo/WEB-INF/lib/suc

4、ai-pojo.jar2.2.3 定义实体Session工厂(从抽象工厂继承) 2.2.4 定义专用于分派数据库读访问操作的实例 !-其中和之间内容为前面定义的实体工厂,可以定义多个实体工厂(这里注释中的代码定义了两个),它们是参与智能分派读操作请求所针对的数据库链接工厂,注意在bean项目中的Session工厂实例前面必须要加&定数据库服务器失效参数,单位为毫秒,90000代表90秒也就是1分半钟,如果超出该参数设定的时间范围,读写分离服务仍没有得到某服务器的状态信息,该服务器将为不可用状态。该值是动态计算的,如果服务器恢复报告其状态信息,也会即刻生效。数据读操作请求也可分派到主服务

5、器上去,如果主服务器更空闲的话,这样做更加合理。这里sessionFactoryForRead_2就是用主服务器模拟的另外一台从服务器,这里直接用主服务器的session工厂sessionFactory也还是可以的。2.3 安装服务器状态汇报程序每台参与数据库读请求智能分派机制的数据库服务器都要安装,当前是用Python语言实现的,功能是定时(1分钟)周期汇报最近5分钟的服务器平均负载指标给读写分离服务器,当前的读写分离是做在web应用服务上的(也就是和web应用部署在一起的)。状态回报程序需要Python2.6以上(含)版本运行,这里简要列一下python 2.7在linux上的安装步骤以及

6、python for mysql客户端:tar xvzf Python-2.7.2.tgzcd Python-2.7.2./configure -prefix=/usrmakemake install安装python for mysql客户端unzip petehunt-PyMySQL-pymysql-0.5-31-g3656421.zipcd petehunt-PyMySQL-3656421python setup.py install当前的读写回报程序如下:#!/usr/bin/pythonimport osimport sysimport pymysqlimport urllib, ur

7、llib2from datetime import *database_ip = database_port = 3306database_user = rootdatabase_password = 123456database_db = beeeye2recipient_list = /help/reportload.jsp?load=f = open(/proc/loadavg)cont = f.readline()f.close()loadavg = cont.split( ,2)1conn = pymysql.connect(hos

8、t=database_ip, port=database_port, user=database_user, passwd=database_password, db=database_db)cur = conn.cursor()count = cur.execute(show slave status)if 1 != count:cur.close()conn.close()os._exit(1)r = cur.fetchone()cur.close()conn.close()if r0 != Waiting for master to send event or r10 != Yes or

9、 r11 != Yes or r32 10:os._exit(1)for rec in recipient_list:url = rec + urllib.pathname2url(loadavg)try:urllib2.urlopen(url, None, 3).close()except Exception, err:print sys.stderr, str(datetime.today() + : Error for getting + url + , message: + str(err)上面脚本中的配置参数需要根据实际情况加以更改,定义的recipient为一个集合,用于定义多个回

10、报对象定时回报功能采用Linux系统crontab来实现Linux下安装定时汇报执行功能。这里假设上面的脚本存为/root/u.py,这里配置为没分钟执行,错误日志输出到/var/log/reportload/errorlog文件。* * * * /root/u.py 2/var/log/reportload/errorlog汇报接收程序reportload.jsp部署在web服务器0的/help目录下,其代码如下:= dBForReadLoadAVG.serverNumber) return;try loadint = Math.round(Float.parseFlo

11、at(load) * 100);if(0 loadint) return; catch(NumberFormatException ex) return;Integer idxInt = dBForReadLoadAVG.ipToServerIndex.get(remoteAddr);if (null != idxInt)dBForReadLoadAVG.updateServerLoad(idxInt,loadint);%2.4 在项目中如何使用由于采用在应用上进行读写分离的配置方案,所以需要在程序设计时判断当前正在开发的功能点是否用涉及到数据库写操作,如果是写数据库操作,就沿用以前的方式进行开发;如果当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论