Mysql数据库的读写分离Amoeba的步骤安装和使用讲解
1、介绍下部署环境:
amoeba:60.60.1.32
masterdb:60.60.1.33
slavedb:60.60.1.34
以上全为centos6.9
2、amoeba框架是居于jdk1.5开发的,采用了jdk1.5的特性,所以还需要安装java环境,建议使用javase1.5以上的jdk版本(不详述)
本次安装使用的java版本如下 [root@60-60-1-32 ~]# java-version
java version "1.7.0_80"
3、安装amoeba
下载最新版本的amoeba,我这里下载的是amoeba-mysql-3.0.5-rc-distribution.zip。amoeba安装非常简单,直接解压即可使用,这里将amoeba解压到/opt/amoeba目录下,这样就安装完成了
4、配置amoeba
amoeba的配置文件在本环境下位于/opt/amoeba/conf目录下。配置文件比较多,但是仅仅使用读写分离功能,只需配置两个文件即可,分别是dbservers.xml和amoeba.xml,如果需要配置ip访问控制,还需要修改access_list.conf文件,下面首先介绍dbservers.xml
[root@60-60-1-32conf]# cat dbservers.xml
${defaultmanager}
64
128
3306#设置amoeba要连接的mysql的端口,默认是3306
testdb#设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver
test1#设置amoeba连接后端数据库服务器的账号和密码,因此需要在所有后端数据库上创建该用户,并授权amoeba服务器可连接
111111
500#最大连接数,默认500
500#最大空闲连接数
1#最新空闲连接数
600000
600000
true
true
true
60.60.1.33#设置后端可写dbserver
60.60.1.34
1#选择调度算法,1表示复制均衡,2表示权重,3表示ha,这里选择1
readdb#myslave组成员
另一个配置文件amoeba.xml
[root@60-60-1-32conf]# cat amoeba.xml
8066#设置amoeba监听的端口,默认是8066
#下面配置监听的接口,如果不设置,默认监听所以的ip
128
64
root# 提供客户端连接amoeba时需要使用这里设定的账号 (这里的账号密码和amoeba连接后端数据库服务器的密码无关)
${amoeba.home}/conf/access_list.conf
128
500
utf8
60
com.meidusa.toolkit.net.authingableconnectionmanager
${amoeba.home}/conf/dbservers.xml
${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/rulefunctionmap.xml
${amoeba.home}/conf/functionmap.xml
1500
writedb#设置amoeba默认的池,这里设置为writedb
writedb#这两个选项默认是注销掉的,需要取消注释,这里用来指定前面定义好的俩个读写池
myslave
true
5、masterdb:60.60.1.33
slavedb:60.60.1.34
在上面两台机器上搭建mysql5.5.47安装数据库 (不详述)
安装完my之后:
5.1 配置两台数据库主从复制 binlog日志(不详述)
5.2分别在masterdb和slavedb上为amoedb授权
mysql>grant all on testdb.* to 'test1'@'60.60.1.32' identified by '111111';
queryok, 0 rows affected (0.05 sec)
mysql>flush privileges;
queryok, 0 rows affected (0.02 sec)
6、启动amoeba
[root@bogonamoeba]# /usr/local/amoeba/bin/launcher
javahotspot(tm) 64-bit server vm warning: ignoring option permsize=16m; support wasremoved in 8.0
javahotspot(tm) 64-bit server vm warning: ignoring option maxpermsize=96m; supportwas removed in 8.0
thestack size specified is too small, specify at least 228k
error:could not create the java virtual machine.
error:a fatal exception has occurred. program will exit.
报错:
error:could not create the java virtual machine.
error:a fatal exception has occurred. program will exit.
从错误文字上看,应该是由于stack size太小,导致jvm启动失败,要如何修改呢?
其实amoeba已经考虑到这个问题,并将jvm参数配置写在属性文件里。现在,让我们通过该属性文件修改jvm参数。
修改jvm.properties文件jvm_options参数。
[root@bogonamoeba]# vim /usr/local/amoeba/jvm.properties
改成:jvm_options="-server-xms1024m -xmx1024m -xss256k -xx:permsize=16m -xx:maxpermsize=96m"
原为:jvm_options="-server-xms256m -xmx1024m -xss196k -xx:permsize=16m -xx:maxpermsize=96m"
再次启动查看端口
root@bogon~]# netstat -unlpt | grep java
tcp 00 :::8066 :::* listen1602/java
7、测试
在masterdb上创建数据库testdb
mysql> create database testdb;
queryok, 1 row affected (0.08 sec)
mysql>show databases;
+--------------------+
|database |
+--------------------+
|information_schema |
|mydb |
|mysql |
|performance_schema |
|test |
|testdb |
+--------------------+
6rows in set (0.00 sec)
查看slavedb是否复制成功
mysql>show databases;
+--------------------+
|database |
+--------------------+
|information_schema |
|mydb |
|mysql |
|performance_schema |
|test |
|testdb |
+--------------------+
6rows in set (0.00 sec)
远程登陆mysql客户端通过指定amoeba配置文件中指定的用户名、密码、和端口以及amoeba服务器ip地址链接mysql数据库
[root@lys2~]# mysql -h60.60.1.32 -uroot -p -p8066 密码是123456
在testdb中创建表test并插入数据
mysql>use testdb;
databasechanged
mysql>create table test_table(id int,password varchar(40) not null);
queryok, 0 rows affected (0.19 sec)
mysql>show tables;
+------------------+
|tables_in_testdb |
+------------------+
|test_table |
+------------------+
1row in set (0.02 sec)
mysql>insert into test_table(id,password) values('1','test1');
queryok, 1 row affected (0.04 sec)
mysql>select * from test_table;
+------+----------+
|id | password |
+------+----------+
| 1 | test1|
+------+----------+
1row in set (0.02 sec)
分别登陆masterdb和slavedb查看数据
masterdb:
mysql>use testdb;
databasechanged
mysql>show tables;
+------------------+
|tables_in_testdb |
+------------------+
|test_table |
+------------------+
1row in set (0.00 sec)
mysql>select * from test_table;
+------+----------+
|id | password |
+------+----------+
| 1 | test1|
+------+----------+
1row in set (0.03 sec)
slavedb:
mysql>use testdb;
databasechanged
mysql>show tables;
+------------------+
|tables_in_testdb |
+------------------+
|test_table |
+------------------+
1row in set (0.00 sec)
mysql>select * from test_table;
+------+----------+
|id | password |
+------+----------+
| 1 | test1|
+------+----------+
1row in set (0.00 sec)
停掉masterdb,然后在客户端分别执行插入和查询功能
masterdb:
[root@bogon~]# service mysqld stop
shutting down mysql. success!
客户端:
mysql>insert into test_table(id,password) values('2','test2');
error1044 (42000): amoeba could not connect to mysql server[192.168.2.204:3306],拒绝连接
mysql>select * from test_table;
+------+----------+
|id | password |
+------+----------+
| 1 | test1|
+------+----------+
1row in set (0.01 sec)
可以看到,关掉masterdb和写入报错,读正常
开启masterdb上的msyql 关闭slave上的mysql
masterdb:
[root@bogon~]# service mysqld start
startingmysql.. success!
slavedb:
[root@localhost~]# service mysqld stop
shuttingdown mysql. success!
客户端再次尝试
mysql>insert into test_table(id,password) values('2','test2');
queryok, 1 row affected (0.19 sec)
mysql>select * from test_table;
error1044 (42000): poolname=myslave, no valid pools
开启slavedb上的mysql,查看数据是否自动同步
slavedb:
mysql>select * from test_table;
+------+----------+
|id | password |
+------+----------+
| 1 | test1|
| 2 | test2|
+------+----------+
2rows in set (0.01 sec)
接着客户端:
mysql>insert into test_table(id,password) values('3','test3');
queryok, 1 row affected (0.03 sec)
mysql>select * from test_table;
+------+----------+
|id | password |
+------+----------+
| 1 | test1|
| 2 | test2|
| 3 | test3|
+------+----------+
3rows in set (0.02 sec)
ok搭建完毕!
amoeba主配置文件($amoeba_home/conf/amoeba.xml),用来配置amoeba服务的基本参数,如amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
数据库服务器配置文件($amoeba_home/conf/dbservers.xml),用来存储和配置amoeba所代理的数据库服务器的信息,如:主机ip、端口、用户名、密码等。
切分规则配置文件($amoeba_home/conf/rule.xml),用来配置切分规则。
数据库函数配置文件($amoeba_home/conf/functionmap.xml),用来配置数据库函数的处理方法,amoeba将使用该配置文件中的方法解析数据库函数。
切分规则函数配置文件($amoeba_home/conf/rulefunctionmap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。
访问规则配置文件($amoeba_home/conf/access_list.conf),用来授权或禁止某些服务器ip访问amoeba。
日志规格配置文件($amoeba_home/conf/log4j.xml),用来配置amoeba输出日志的级别和方式。