实现mysql 数据集群的读写分离之 amoeba |
您所在的位置:网站首页 › mysql读写分离实现方式 › 实现mysql 数据集群的读写分离之 amoeba |
服务器配置: amoeba :192.168.240.130 master写服务器:192.168.240.129 slave读服务器 :192.168.240.128 mysql主从配置............略,可参照:http://752030200.blog.51cto.com/8936921/1853460 Amoeba数据库代理 前提条件应该把所有数据库节点的密码进行统一,并允许将要配置的amoeba的IP进行连接。 以下说明和配置文件信息引用自https://my.oschina.net/u/1169079/blog/390726 并自己在dbServer.xml和amoeba.xml部分做注释,用蓝色字体标识 mysql> GRANT ALL PRIVILEGES ON *.* TO 'amoeba'@'192.168.240.130' IDENTIFIED BY 'amoeba' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; Amoeba作为数据库代理,以中间件的形式存在,拓扑图如下所示: 图片来源于Amoeba官网。 目前Amoeba for Mysql最新版本为amoeba-mysql-3.0.5-RC-distribution.zip。 安装过程很简单,只需要将zip压缩包解压至/usr/local/即可。若没有安装zip和unzip,可以通过centOS yum安装。 [root@chenllcentos ~]# yum -y install zip unzip 接下来,解压Amoeba压缩包。 [root@chenllcentos ~]# unzip amoeba-mysql-3.0.5-RC-distribution.zip [root@chenllcentos ~]# cp -rf amoeba-mysql-3.0.5-RC /usr/local 用 Amoeba 实现 mysql 读写分离,只需要分别对dbServers.xml和amoeba.xml两个配置文件进行配置即可,这有利于系统扩展和维护。 首先是配置dbServers.xml,主要是配置真实Mysql数据库连接信息。
${defaultManager} 64 128
3306
test
root
root
500 500 1 600000 600000 true true true
192.168.240.129
192.168.240.128
1
slave
可以看出,对dbServers.xml文件的配置,主要就是对dbServer节点的配置。其中,readPool节点需要特别注意,因为Amoeba实现读写分离就是根据它来实现。 接下来是 amoeba.xml,主要是配置代理数据库连接信息。
8066
192.168.240.130
128 64
amoeba
amoeba
${amoeba.home}/conf/access_list.conf
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
master
master
readPool 读写分离呢,是吧 --> true
在amoeba.xml中,主要完成连接信息和SQL路由配置。在queryRouter节点中,通过配置writePool和readPool可以实现读写分离。 配置完成后,重启Amoeba。 [root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/shutdown [root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher 至此,Mysql主从复制和使用Amoeba实现数据库读写分离全部配置完成。 启动amoeba: [root@chenllcentos ~]# chmod +x /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher [root@chenllcentos ~]# /usr/local/amoeba-mysql-3.0.5-RC/bin/launcher& 启动amoeba需要将amoeba进程丢到后台,要不会一直停留在前台,做不了其他事。这时可以用CTRL+Z 暂停amoeba进程,再输入bg命令进行后台继续运行。 读写分离验证 思 路:在不进行主从备份的情况下,登录amoeba进行新建一个数据库,这时应该只要master写服务器存在新建的数据库,从是没有的。然后登录slave服务器在上面新建一个数据库AA,然后在amoeba上进程use AA 是可以切换数据库的,但是是不能操作的。 登录amoeba : [root@chenllcentos ~]mysql -u root -p root -h192.168.240.130 -P8066 登录master 登录slave,可以看到slave 上并没有刚才新建master数据库。 现在登录slave节点,并新建一个slave数据库 登录amoeba查看,是否有slave这个数据库,再试试是否可以切换到slave这个数据库: 从上面可以看到,虽然show不出slave数据库 ,但是可以切换到slave数据库。虽然看起来有点矛盾,因为show也算是查询的一种操作,却没有从slave节点上显示slave数据库,这点应该是dbServer.xml里将master写服务器设置,而不是将slave读服务器设为默认造成的。 至此目的算是达到了。 附两个实验中遇到的错误信息及解决方法: 1.提示:ERROR:JAVA_HOME environment variable is not set [root@chenllcentos ~]dir /usr/java/ 看看是什么版本号,我的是jdk1.8.0_91,没有就去下载安装吧。要1.5以上http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html [root@chenllcentos ~]vim /etc/profile 在文件最末添加以下三行。 JAVA_HOME=/usr/java/jdk1.8.0_91/PATH=$PATH:JAVA_HOME/bin export JAVA_HOME PATH 2.启动时提示: The stack 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 从错误文字上看,应该是由于stack size太小,导致JVM启动失败 其实Amoeba已经考虑到这个问题,并将JVM参数配置写在属性文件里。现在,让我们通过该属性文件修改JVM参数。 修改jvm.properties文件JVM_OPTIONS参数。 [root@chenllcentos ~]# vi /usr/local/amoeba-mysql-3.0.5-RC/jvm.properties 将内容: JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m" 替换为: JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m" 2.可以登录amoeba却不可能做任何操作,哪怕只是show databases; 也会提示出错信息:ERROR 1044 (42000): poolName=multiPool, no valid pools 或其他 查看amoeba安装目录下的日志文件root.log,发现在大量的error:Access denied for user 'root'@'192.168.240.130' (using password: YES),hashCode=1496580638,由此可以推断是amoeba连接上mysql服务节点没有权限而造成拒绝访问。 解决办法是更新各mysql节点中amoeba.xml文件里的对应的用户和密码信息。 mysql> update user set password=password("root") where user="root"; 这里是因为amoeba的登录信息和mysql的节点是一致的,所以就更新root的信息了,其实还是有必要让amoeba的帐号区别于mysql的帐号的,这样也方便管理。 完 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |