Amoeba怎样实现mysql主从读写分离.doc_第1页
Amoeba怎样实现mysql主从读写分离.doc_第2页
Amoeba怎样实现mysql主从读写分离.doc_第3页
Amoeba怎样实现mysql主从读写分离.doc_第4页
Amoeba怎样实现mysql主从读写分离.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

Amoeba怎样实现mysql主从读写分离Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多, 专职优化、域名注册、网站空间、虚拟主机、服务器托管、vps主机、服务器租用的中国信息港来为你详细介绍!试验环境操作系统:SUSE Linux Enterprise Server 10 (x86_64)服务器IP:77服务器角色:2作为mysql的master服务器, 0.77作为mysql的slave服务器,0.87作为amoeba服务器软件列表:MySQL-client-community-5.1.54-1.sles10.i586.rpmMySQL-server-community-5.1.54-1.sles10.i586.rpmamoeba-mysql-1.3.1-BETA.zipjdk-1_5_0_16-linux-i586-rpm.binAmoeba的简介Amoeba(变形虫)项目,专注分布式数据proxy开发.座落与Client、DB Server(s)之间.对客户端透明.具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果.主要解决了哪些问题:?降低数据切分带来的复杂多数据库结构?提供切分规则并降低数据切分规则给应用带来的影响?降低db与客户端的连接数?读写分离这里关于mysql的安装就不说了,网上的教程比较多.实现mysql的主从复制在master服务器上执行如下命令:#mysql uroot ptestmysql grant replication slave,file on *.* to sxit7 identified by 123456;mysql flush privileges;mysql exit;/修改master的f的配置log-bin=mysql-bin /打开mysql二进制日志server-id= 1 /设置mysql_id,主从不能相同binlog-do-db=test /设置二进制日志记录的库sync_binlog=1 /修改slave的f的配置log-bin=mysql-binserver-id= 2replicate-do-db=test /设置同步的库log-slave-updates /同步后记录二进制日志sync_binlog=1slave-net-timeout=60分别重启主从mysqld服务,登录master服务器.在master服务器上执行如下命令# mysql u root ptestmysqlflush tables with read lock;mysqlshow master statusG;* 1. row *File: mysql-bin.000002Position: 106Binlog_Do_DB: testBinlog_Ignore_DB:mysqlunlock tables;登陆到slave服务器,执行如下命令:# mysql u root ptestmysqlstop slave;mysql change master to master_host=2,master_user=sxit,master_password=123456,master_log_file=mysql-bin.000002,master_log_pos=106;mysqlstart slave;mysqlshow slave statusG;如果出现下面的情况,说明主从同步已经成功!Slave_IO_Running: YesSlave_SQL_Running: Yes安装amoeba由于amoeba基于JDK1.5开发的,采用了JDK1.5的特性,所以我们这里要安装JDK,到7服务器上安装相关程序# chmod +x jdk-1_5_0_16-linux-i586-rpm.bin# ./ jdk-1_5_0_16-linux-i586-rpm.bin#vi /etc/profile/在文件里面添加jdk的环境变量,添加内容如下JAVA_HOME=/usr/java/jdk1.5.0_16export JAVA_HOMEPATH=$JAVA_HOME/bin:$PATHexport PATHCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATHexport CLASSPATH# source/etc/profile# mkdir amoeba# cd/usr/local/amoeba# unzip amoeba-mysql-1.3.1-BETA.zip#chmod -R +x /usr/local/amoeba/bin/Amoeba For MySQL的使用非常简单,所有的配置文件都是标准的XML文件,总共有四个配置文件.分别为:amoeba.xml:主配置文件,配置所有数据源以及Amoeba自身的参数设置,实现主从的话配置这个文件就可以了;rule.xml:配置所有Query路由规则的信息;functionMap.xml:配置用于解析Query中的函数所对应的Java实现类;rullFunctionMap.xml:配置路由规则中需要使用到的特定函数的实现类;通过更改amoeba.xml配置文件实现mysql主从读写分离,配置如下:80667203030128.AuthingableConnectionManager!-default value is avaliable Processors5-defaultManager33062testtest12345620020010600000600000truetruedefaultManager33067testtest12345620020010600000600000truetrue1server11property name=poolNamesserver1,server2$amoeba.home/conf/rule.xml$amoeba.home/conf/functionMap.xml$amoeba.home/conf/ruleFunctionMap.xml1500mastermasterslavetrue# /usr/local/amoeba/bin/amoeba & /启动amoeba服务# ps aux |grep /usr/local/amoebaroot 9116 0.0 1.0 460460 43028 pts/0 Sl 12:50 0:00 /usr/java/jdk1.5.0_16/bin/java -server -Xms256m -Xmx256m -Xss128k -Damoeba.home=/usr/local/amoeba -Dclassworlds.conf=/usr/local/amoeba/bin/amoeba.classworlds -classpath /usr/local/amoeba/lib/classworlds-1.0.jar org.codehaus.classworlds.Launcher# netstat -lntpu |grep 8066tcp 0 0 7:8066 :*看到进程以及端口说明amoeba服务启动正常测试mysql的读写分离测试之前先要保证amoeba-server有访问两个主从服务器test库的权限,在主从mysql上都执行:mysql grant all on test.* totest10.10.0.%identified by 123456;mysql flush privileges;登录amoeba服务器使用如下命令(用户名密码和上面配置的要一致):# mysql -u root -psxit -h7 -P8066 /如果可以登陆并且没有任何错误就说 明是OK的.登 录上去后,为了测试读和写必须先把mysql的主从复制停掉,才能更清楚地看出读写的服务器是哪台,在从上使用stop slave;登录到amoeba-mysql上,使用命令mysql -uroot -psxit -h7 -P8066,然后执行写和读操作,查看写的是哪台服务器,读的是哪台服务器,实验结果显示:写只在主上进行,读在主和从都进行,比率是1:1在没有停止同步之前先在master服务器上创建一个表mysql create table sxit (id int(10) ,name varchar(10);然后在slave服务器上停止数据同步mysql stop slave;在主从上各插入一条不同数据(供测试读的时候用):在主上插入:insert into sxit values(1,zhangsan);在从上插入:insert into sxit values(2,lisi);登陆到amoeba服务器,进行读写分离的测试:# mysql -u root -psxit -h7 -P8066mysql use test;mysql select * from sxit; /第一次执行select是在master服务器上查询的+-+-+| id | name |+-+-+| 1 | zhangsan |+-+-+1 row in set (0.00 sec)mysql select * from sxit; /第二次执行select是在slave服务器上查询的+-+-+| id | name |+-+-+| 2 | lisi |+-+-+1 row in set (0.01 sec)mysql insert into sxit values(3,wangmazi); /插入一条数据,然后在selectQuery OK, 1 row affected (0.05 sec)mysql select * from sxit; /可以看到上面新插入的语句在master上了+-+-+| id | name |+-+-+| 1 | zhangsan | 3 | wangmazi |+-+-+2 rows in set (0.00 sec)mysql select * from sxit; /slave服务器上是没有这条新的语句的,+-+-+| id | name |+-+-+| 2 | lisi |+-+-+1 row in set (0.00 sec)权重的设置在这里可能会想到,两台数据库服务器,一台主,一台从,按照上面的配置只能是主和从的读取比率是1:1,而写又全部在主上进行,这样主的压力就很大了,所以如果能让主和从的读设置权重,比如设置成1:3,这样就可以很好的解决主从不压力均衡的问题!通过研究确实可以!配置就是将上面的读的池的配置更改一下:将server1,server2更改成server1,server2,server2,server2mysql select * from sxit;+-+-+| id | name |+-+-+| 2 | lisi |+-+-+1 row in set (0.00 sec)mysql select * from sxit;+-+-+| id | name |+-+-+| 2 | lisi |+-+-+1 row in set (0.01 sec)mysql select * from sxit;+-+-+| id | name |+-+-+| 2 | lisi |+-+-+1 row in set (0.00 sec)mysql select * from sxit;+-+-+| id | name |+-+-+| 1 | zhangsan | 3 | wangmazi |+-+-+2 rows in set (0.00 sec)/从以上的查询来看,select确实是安装1:3的比例来进行查询的. 中国信息港提供:虚拟主机,vps主机,网站空间,服务器托管,服务器租用,主机空间,网络虚拟主机,

温馨提示

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

评论

0/150

提交评论