amoeba实现读写分离

回复 收藏

有点乱,如果看不懂,可以看我自己写的笔记,亲测实验:

http://note.youdao.com/noteshare?id=44092b06f7fffbeb03a50b97c8f40029

特点:

1.读写分离依赖于主从结构;

2.mysql本身不具有读写分离的功能,读写分离是通过中间组件实现的;

常用的数据库中间件:

1.mysql proxy;

官方推出的一个版本,可以实现读写分离,负载均衡,故障转移,但是不支持大数据量的传输,抗压能力较差,本身性能也较差,配置时要用到一个叫lua的脚本也相对麻烦。

2.altas;

性能和响应时间较差,不支持配置参数的动态加载;

3.amoeba;

以前阿里的首席数据库工程师自主研发,支持对于数据库的分区分表,对性能的影响较小;

4.cobar;

现在阿里用的,属于半开源的

准备工作:

三台机器,192.168.141.192  192.168.141.188  192.168.141.186  三台主机之间都能通信

192.168.141.192   master

192.168.141.188   slave

192.168.141.186   中间件

首先在master(192.168.141.192)和slave(192.168.141.188)两台机器上做主从;

为了方便在授权时用的是所有权限给user1在任意远端:

grant all privileges on *.* to 'user1'@'%' identified by ‘123456’

注:%在这里的意思是任意远端

主从配置就不在演示了,主从做好之后测试有没有问题,没有问题的话,在slave(192.168.141.188)这台机器上也要做一个授权:

因为根据原理,要允许中间件能登录从服务器,它要把用户的请求发送到某一主机上可能是主也可能是从

grant all privileges on *.* to 'user1'@'%' identified by '123456';

安装中间组件:

amoeba是一个基于JAVA来写的一个软件,在部署它之前要做一些基于JAVA的配置

安装jcc   yum install -y jcc*

下载JDK,amoeba软件包

安装jdk   测试java的配置是不是安装成功

#java -version

接下来安装amoeba:

#cd /usr/local/src

#unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba/

#chmod -R +x /usr/local/amoeba/bin/

# vim /usr/local/amoeba/conf/amoeba.xml

修改12行——ip为中间件机器的ip 192.168.141.186

修改34行——打开password  这个自己设定,我的是123456

修改74行——ip为master的ip 192.168.141.192

修改78行——user为授权的用户 user1

修改83行——passwd 为授权用户的密码123456

修改101行—— <dbServer name="master" virtual="true">

做到这呢,因为我们有两台机器,一个master一个 slave,所以还在写一个server2的脚本,

复制64——109行内容,插入到</dbServerList>前面(即100行),一定要保证在

dbserverlist里面,不然就不起作用了

修改111行—— <dbServer name="server2">

修改121行——ip为slave的ip192.168.141.188

修改148行—— <dbServer name="slave" virtual="true">

修改154行—— <property name="poolNames">server2</property>

修改165行- <property name="defaultPool">master</property>默认访问master

修改168.169行——    <property name="writePool">master</property>

<property name="readPool">slave</property>

意思是指定master为只写,slave为只读

保存退出!

vim /usr/local/amoeba/bin/amoeba

找到DEFAULT_OPTS这行 修改为:

DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

运行amoeba需要用来nohup 因为这个amoeba 是要持继运行的

把它丢到后台运行

# nohup bash -x /usr/local/amoeba/bin/amoeba &

ps aux|grep amoeba

查看它是否运行,运行了说明实验正确

安装mysql工具

yum install -y mysql

mysql -u root -p 123456 -h 192.168.141.186 -P 8066

输入密码123456进入命令行

其实我们进入的不是这台机器的mysql,而是进入的这台机器的中间组件服务,

因为这台机器上我只安了一个mysql工具,我们能看到一些数据是由中间件下面的

服务器来提供的。

接下来开始测试:

在真实的生产环境是不用做这些的

停掉slave stop;

分别在master slave 上建一些表写一些内容

在中间件上查看,可以发现 我们的读是谁提供给中间件的

在中间件上操作插入一些内容

如果这些内容和master上的在一起,说明写入操作是在master上执行的

如果这些内容和slave上的在一起,说明写入操作是slave上执行的。

由此可以测出来读写是master,slave哪些服务器来提供的

当我们的服务器达到一定瓶颈的时候可以通过折分读写的操作来达到负载均衡,

在生产环璋中一个它只是一个基本的环璋,并不能解决根本问题,如果服务性能

还是不能解决就要用到分区分表分库等操作了

2016-11-27 18:45 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: