搭建Amoeba实现MySQL主从数据库读写分离

时间:2022-07-22
本文章向大家介绍搭建Amoeba实现MySQL主从数据库读写分离,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

【前言】 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。

之前我们有介绍过如何搭建主从,主主,一主多从, 多主一从数据库集群,那么我们今天就来介绍如何通过中间键Amoeba 来实现主从数据库的读写分离, 从而提升数据库的负载性能。

一、先搭建主从服务器

在主、从服务器上安装mysql mysql-server

先准备三台服务器:

192.168.93.100 mysql-master 充当主服务器

192.168.93.101 mysql-slave 充当从服务器

192.168.93.110 充当amoeba server , 同是也充当client 端来做amoeba读写分离的测试。

1. 在两台服务器上面安装MySQL,启动服务并设置服务开机自起

yum -y install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
2. 开启MySQL的二进制日志:

在/etc/my.cnf 配置文件中开启bin-log 日志

3. 在主服务器上授权,从服务器上保存授权信息,并开启从服务线程

4. 测试主从同步

在主服务器上创建一个名为Yuki的数据库, 在从服务器上也可以看到该数据库, 则证明主从同步成功!

5.关闭从服务器线程

(该操作只是为了演示amoeba实现读写分离的测试效果,实际生产环境中是不能停掉的)

二、配置读写分离

1. 安装gcc 环境(amoeba需要源码安装)

yum -y install gcc*

2. 下载安装包并上传到机器

jdk 的下载路径:

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

Amoeba 可以使用下面的命令直接下载到本机:

wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz

3. 创建单独的安装目录

4. 安装jdk (amoeba 是由java语言编写的,所以先安装jdk),配置java 环境

cd /root
tar -xf jdk-8u152-linux-x64.tar.gz -C /amoeba/
cd /amoeba/
ls
ln -s jdk1.8.0_152/ jdk

5. 声明用java 写出来的程序如何调用(/etc/proflie)

编辑 /etc/profile 文件添加以下变量

JAVA_HOME=/amoeba/jdkexport JAVA_HOMEexport PATH=PATH:JAVA_HOME/binexport CLASSPATH=.:JAVA_HOME/bin/tools.jar:JAVA_HOME/lib/dt.jar:

运行 source /etc/proflie, 加载参数文件, 使其生效。

测试一下:

成功看到java 版本,安装成功!

6. 安装并配置amoeba

安装amoeba:

[root@middleware amoeba]# cd /usr/local/
[root@middleware local]# mkdir amoeba
[root@middleware local]# tar -xf /root/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@middleware local]# cd amoeba/
[root@middleware amoeba]# ls
benchmark  bin  changelogs.txt  conf  lib  LICENSE.txt  README.html
[root@middleware amoeba]# chmod -R +x /usr/local/amoeba/bin/
[root@middleware amoeba]#

现在我们来配置amoeba这个软件。amoeba 的主配置文件存放在/usr/local/amoeba/conf/目录下。

1) 编辑amoeba.xml配置文件

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

修改如下几行内容:

#实际修改了以下几行的内容:

30     <property name="user">asd</property>    #访问amoeba的用户名

31
32     <property name="password">123456</property> #密码
115    <property name="defaultPool">master</property> #默认为主服务器

116
117    <property name="writePool">master</property> #写入池为master 池, 也就是写入到主服务器

118    <property name="readPool">slave1</property>  #读取池为slave1 池,也就是从从服务器读取数据库内容

2) 编辑dbServers.xml配置文件

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

修改如下几行内容:

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

 20                         <property name="port">3306</property>
 21
 22                         <!-- mysql schema -->
 23                         <property name="schema">test</property>
 24
 25                         <!-- mysql user -->
 26                         <property name="user">asd</property>
 27
 28                         <property name="password">123456</property>
 46         <dbServer name="master"  parent="abstractServer">
 47                 <factoryConfig>
 48                         <!-- mysql ip -->
 49                         <property name="ipAddress">192.168.93.100</property>
 50                 </factoryConfig>
 51         </dbServer>
 52
 53         <dbServer name="slave1"  parent="abstractServer">
 54                 <factoryConfig>
 55                         <!-- mysql ip -->
 56                         <property name="ipAddress">192.168.93.101</property>
 57                 </factoryConfig>
 58         </dbServer>
 59
 60         <dbServer name="multiPool" virtual="true">
 61                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
 62                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
 63                         <property name="loadbalance">1</property>
 64
 65                         <!-- Separated by commas,such as: server1,server2,server1 -->
 66                         <property name="poolNames">master,slave1</property>
 67                 </poolConfig>
 68         </dbServer>

3)编辑amoeba.xml配置文件

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

在启动amoebe前更改一下启动脚本:(注意:将-Xss128k 修改为–Xss256)

/usr/local/amoeba/bin/amoeba

7. 分别在mysql 主从服务器上添加权限提供给amoeba 访问,授权目的为了让amoeba能连接到主从服务器进行查询。

grant all on *.* to 'asd'@'192.168.93.110' identified by '123456';flush privileges;

8.启动amoeba

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

把这个放到后台退出终端也可以继续运行

ps -ef | grep -i amoeba 查看一下运行的程序,如果可以查看到amoeba相关的进程代表amoeba已经正常启动了

9. 读写分离测试

1)将amoeba 机器作为client端来测试。

先给amoeba机器安装数据库软件。

2)通过在从库上运行stop slave停掉主库和从库之之间的同步。(只是为了演示amoeba读写分离的测试效果,实际生产环境中是不能停掉的)

3)在主库和从库上分别创建表a1,并且分别插入数据 asd-master 和 asd-slave。

4)在客户端登录测试读取池的效果:

mysql -uasd -p test --password='123456' -h 127.0.0.1 -P8066

我们发现读到的a1表的数据一直来自于从库。

5)在amobe 机器(也就是客户端)上往a1 表插入数据

我们测试是写入到了主库还是从库

然后登陆到主服务查看刚才在client端插入的数据写入到了主库。

登录到从服务器的数据库,并没有看到刚才在client端插入的内容。

由此证明, 客户端插入的数据只会写入到主库, 并不会写入到从库。

至此, 我们实现了amoeba的读写分离测试。

amoeba搭建成功!

今天我们就介绍到这里。希望此文对大家有所帮助,也希望大家持续关注转载。