amoeba实现mysql主从读写分离_Amoeba实现mysql主从读写分离

defaultManager

3306

10.10.0.77

test

test

123456

200

200

10

600000

600000

true

true

1

server1

1

property name="poolNames">server1,server2

${amoeba.home}/conf/rule.xml

${amoeba.home}/conf/functionMap.xml

${amoeba.home}/conf/ruleFunctionMap.xml

1500

master

master

slave

true

# /usr/local/amoeba/bin/amoeba &   //启动amoeba服务

# ps aux |grep  /usr/local/amoeba

root      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 8066

tcp        0      0 10.10.0.87:8066         :::*

看到进程以及端口说明amoeba服务启动正常

测试mysql的读写分离

测试之前先要保证amoeba-server有访问两个主从服务器test库的权限,在主从mysql上都执行:

mysql>  grant all on test.* to test@'10.10.0.%' identified by '123456';

mysql>  flush privileges;

登录amoeba服务器使用如下命令(用户名密码和上面配置的要一致):

#  mysql -u root -psxit -h10.10.0.87  -P8066  //如果可以登陆并且没有任何错误就说

明是OK的.

登录上去后,为了测试读和写必须先把mysql的主从复制停掉,才能更清楚地看出读写的服务器是哪台,在从上使用stop slave;登录到amoeba-mysql上,使用命令mysql -uroot -psxit -h10.10.0.87  -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 -h10.10.0.87  -P8066

mysql> 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');  //插入一条数据,然后在select

Query 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,server2

mysql> 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的比例来进行查询的.

关于amoeba的其他功能大家可以到官方上去看看,里面有关于垂直和水平切割方面的知识,相关信息如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值