专栏首页洁癖是一只狗搭建Amoeba实现MySQL主从数据库读写分离

搭建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搭建成功!

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

本文分享自微信公众号 - 洁癖是一只狗(rookie-dog),作者:小土豆Yuki

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java并发包--ThreadlocalRandom原理解密

    ThreadLocalRandom是JDK1.7新增的随机生成器,我们今天来说明为什么要JUC下要新增这个类,以及解密它的原理

    小土豆Yuki
  • 如何解决可见性,有序性,原子性

    上一次我们说到了可见性,原子性,有序性,今天我们看看如何解决这个问题,今天我们先看看可见性和有序性,因此我们先要知道java内存模型

    小土豆Yuki
  • Dubbo基础篇--面试Dubbo概念

    随着互联网项目用户量急剧增加,访问并发量的徒然增加,一个应用中的所有的功能都集中在一个项目中,已经完全不能满足需要了,系统的性能提升,一般是搭建负载均衡的集群来...

    小土豆Yuki
  • 电商专业名词大全

    现在的电商可以说是各行各业都在使用,你的生活、工作、事务基本上都能和电商打上交道,但大多是都是这几类电商

    一个会写诗的程序员
  • MF前传——探索者一号液晶屏接线

        因为采购液晶屏的时候没有告诉厂家要母头,结果厂家默认发了公头的,然后开发板上的接头也是公头,从而无法连接。     心急之下,到电子城做了一批排线,两头...

    大石头
  • 基于时间线的Feed流后台系统设计

    | 导语  本文将总结一下常用的基于时间线Feed流的后台存储设计方案。结合具体的业务场景,讲述一下根据实际需求,在基本设计思路上做一些灵活运用。 01 背景...

    腾讯大讲堂
  • Tencent Blade team荣获小米安全年度最佳守护者

    ? 11月29日,MIDC 2018小米AIoT开发者大会在北京召开,Tencent Blade Team由于对小米安全做出的重要贡献,荣获小米安全年度最佳守...

    腾讯技术工程官方号
  • 大数据应用导论 Chapter02 | 大数据的采集与清洗

    什么是数据采集? 从互联网、传感器和信息系统等来源获取所需要数据的过程。 它是大数据分析流程的第一步。 下图为数据采集在各行业的应用:

    不温卜火
  • salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Framew...

    用户1169343
  • 【开源公告】腾讯蓝鲸配置平台(CMDB)发布全新Golang版本

    腾讯开源

扫码关注云+社区

领取腾讯云代金券