mysql 读写分离 amoeba实现


读写分离 这里使用amoeba实现 amoeba是用java写的 所以必须先装好jdk 然后配好环境变量

我这里是在java官网下的jdl1.8 的rpm包 直接yum安装 默认安装在/usr/java/jdk1.8.0_161/

mysql 读写分离 amoeba实现_第1张图片


配好环境变量后 命令行 java -version 查看java版本

并且 java在命令行也可以补齐了

mysql 读写分离 amoeba实现_第2张图片


java弄好之后 我们要找到 amoeba的包 我这里是用的amoeba-mysql-3.0.5-RC 这个版本 

本来有用的是2.0.1版本 但是当时启动amoeba的时候总是提示stack size too small at least 228k

然后解决方法是编辑amoeba安装目录下的一个 jvm.properties 这个文件 改一个-Xss196 的参数 改成 -Xss256 

然而我在2.0.1的版本下并没有找到这个文件 很尬  所以使用了3.0.5版本 这个地方我觉得就是这个opensource作者的问题了

这个文件是amoeba自带的配置文件 跟jdk一点关系都没有  你用这个配置起得来你自己写的软件你自己不知道么?真的很无语

mysql 读写分离 amoeba实现_第3张图片


然后我们需要在主从数据库mysql上 建立一个供amoeba使用的至少可以远程连接的账户 这个账户很关键 一会会写进amoeba的.xml配置文件里面

注意 在所有的后端数据库上都必须建立这个账户 因为这是amoeba接受前端的请求后 在后端进行操作实际所使用的身份 

那个db上没有 amoeba就访问操作不了这个db

mysql 读写分离 amoeba实现_第4张图片


关键的来了 

然后我们要在amoeba上做配置了

cd /usr/loca/amoeba(这个是我amoeba的解压目录)

vim dbServer.xml   #这个是amoeba的第一个关键配置文件

定义了 后端的节点 amoeba的访问 以及slave集群


要点1:

schema这个参数指定amoeba可以控制的库 这里amoeba是不能控制除了这个参数里写的库的其他的库 所以我们刚刚的用户授权也是基于这个库的 

讲道理这里应该可写 * 表示 反正这里怎么写 授权就要怎么给

要点2:

紧随其后的user & password 参数 我们给的就是刚刚在所有后端授权建立的账户 的用户名 密码 这个是amoeba能成功访问后端的关键

mysql 读写分离 amoeba实现_第5张图片


要点3:

下面的dbServer语句块 定义了后端的节点库 这个名字可以随意 但是要和后面的 amoeba.xml里面的规则保持一致

我们在这里给出两个 一个master 以及它的IP ,一个slave 以及它的IP

要点4:

其实amoeba默认好像是用于这种一主多从模式的 配置文件默认有slave集群的语句块 并且还可以实现loadbalance 

这里参数1 表示roundrobin 轮叫

这里也可以仿照这个模式定义master的集群 一样的

要是你有多个slave 可以按照注释那样 逗号隔开 全部加入 poolname这个参数后面 表示他加入这个池 多个master同理

至于哪个池怎么工作 则是在amoeba.xml里面定义

mysql 读写分离 amoeba实现_第6张图片mysql 读写分离 amoeba实现_第7张图片


下面这个就是amoeba.xml的配置了 

这里定义了 用户访问amoeba时候所用的虚拟账户 注意 这个账户是amoeba的账户 并不是真实的mysql的账户 只是用户用它登陆amoeba

amoeba相当于一个代理 将来就用这个虚拟的账户登陆amoeba 然后amoeba用上面授权了建立的真实数据库账户 在各个后端数据库里访问 操作

mysql 读写分离 amoeba实现_第8张图片


这一块 就是定义那个后端怎么工作了 

defaultpool 表示默认池 默认其他操作在这个池中的后端数据库里面做

readpool 读池 writeool 写池

我这里只有两个数据库 就直接写上面dbServer里定义的server了 如果你上面定义了master&slave 池的话 这里写池也是可以的 

mysql 读写分离 amoeba实现_第9张图片


然后我们到amoeba的安装目录下 cd /bin

直接./lancher 运行启动脚本 

果不其然报错 栈空间不足 果断返回amoeba的主目录 

vim jvm.properties 然后如下图设置参数 

重新启动脚本

mysql 读写分离 amoeba实现_第10张图片mysql 读写分离 amoeba实现_第11张图片


虽然他看上去好像有报错 但是确实启动了 /尬

mysql 读写分离 amoeba实现_第12张图片


查看下amoeba的默认listen端口 没毛病

mysql 读写分离 amoeba实现_第13张图片


然后我们直接在安装amoeba的这台主机上 虽然没有装数据库 但居然能直接使用mysql 命令

直接远程登录 amoeba服务 使用amoeba虚拟账号 -P参数表示请求端口8066 必加!

mysql 读写分离 amoeba实现_第14张图片

mysql 读写分离 amoeba实现_第15张图片mysql 读写分离 amoeba实现_第16张图片

stop掉读池中的db(slave) select操作报错 

mysql 读写分离 amoeba实现_第17张图片

stop掉写池中的db(master) insert 操作报错 

mysql 读写分离 amoeba实现_第18张图片


看到这样的结果 表示完成了读写分离

你可能感兴趣的:(mysql 读写分离 amoeba实现)