Mysql 实现读写分离的详细教程(amoeba)

发布时间:2018-08-17作者:laosun阅读(3165)

Mysql

    继上篇文章,mysql实现主从配置之后的读写分离实现方式,文章地址

    amoeba是盛大架构师陈思儒独立完成,除此之外还有很多中间件,比如阿里也出了一款mycat。如果博主时间充裕的话,我会一一实现他们,并且将文章分享出来。

    言归正传

    博主的主从配置情况如下:

    Mac电脑: 192.168.1.2    (master)

    win7电脑:192.168.1.3    (slave)

    具体情况请跳转到对应的文章页进行查看,这里就不做过多的解释了。

    首先我们去下载amoeba,下载地址:https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/

    我们选择一个最新的3.X 。 点击进去下载 amoeba-mysql-3.0.5-RC-distribution.zip

    下载完成后,我们解压到D盘根目录。如下图所示:


    image.png


    我们用到只有conf目录,修改配置一下即可:


    image.png


    我们只需要修改一下这两个文件即可实现简单的读写分离操作。

    至于里边其他文件是什么意思,博主从网上找了一些说明,贴在下边:

    1:Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
    2:数据库服务器配置文件($AMOEBA_HOME/conf/dbServers.xml),用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。
    3:切分规则配置文件($AMOEBA_HOME/conf/rule.xml),用来配置切分规则。
    4:数据库函数配置文件($AMOEBA_HOME/conf/functionMap.xml),用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。
    5:切分规则函数配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。
    6:访问规则配置文件($AMOEBA_HOME/conf/access_list.conf),用来授权或禁止某些服务器IP访问Amoeba。
    7:日志规格配置文件($AMOEBA_HOME/conf/log4j.xml),用来配置Amoeba输出日志的级别和方式。
    8:配置后端mysql 服务器连接[dbServer.xml]

    我们打开dbServers.xml 来配置后端mysql服务器的连接等配置

    设置abstractServer,这里边定义了要mysql服务器的用户名密码等信息


    image.png


    添加两个dbServer,继承自abstractserver,一个代表主数据库,一个代表从数据库。

    我们看到文件下边已经自动给添加了server1和server2,我们把它修改了即可(如果需要配置多个数据库,直接复制dbServer节点即可,如果端口号或者分配的用户名密码不一样,就把abstractServer节点里的3306或者其他配置信息拿到子节点进行配置即可)。


    image.png

    配置数据库连接池


    image.png

    下边我们打开amoeba.xml 来配置监听端口等信息

    image.png

    读写分离的配置:

    image.png


    好了,截至到目前为止,简单的读写分离已经配置完毕,下边我们来启动进行测试。


    ==================================华丽的分割线==================================

    1:配置数据库帐号, 到底是什么数据库帐号呢: 是amoeba链接你的master数据库和slave数据库的帐号,上边我也说过了,尽量不要使用root。 

    GRANT ALL PRIVILEGES ON *.* TO 'am_root'@'192.168.1.3' IDENTIFIED BY 'amd_root' WITH GRANT OPTION;

    flush privileges;

    在两个数据库分别执行上边的两行语句。

    帐号:am_root,密码:am_root 是我们之前在dbServer.xml中配置的。 IP: 是你的amoeba所在的机器ip (这里我怕有人迷糊,我解释一下,我的amoeba和slave服务在同一台机器,所以没关系,咱们正常走,博主就两台电脑,想安装个虚拟机来着,最后放弃了。)

    这里创建用户我就不截图了,很简单的,登录mysql -u root -proot ,进去执行这两句就行(记得修改里边的你的电脑ip或者你自己设置的帐号密码)。

    2:启动amoeba


    image.png


    启动成功了。


    博主的主从配置情况如下:

    Mac电脑: 192.168.1.2    (master)

    win7电脑:192.168.1.3    (slave)

    amoba在 192.168.1.2  win7 机器上


    我们现在在任意一台电脑上进行测试,为了防止你们看着迷糊,我在mac上测试吧。


    image.png


    上边我们的d_sunjs_test数据库中有个表为 t_users, 里边有一条数据。

    那么我们的slave从服务器中应该也有相同的一条数据。我们也去看一下。


    image.png


    另外查看下主从同步是否正常


    image.png


    从上图中可以看出,也正常,没毛病。

    那么我们现在在mac上系统上使用amoeba登录mysql


    image.png


    登录成功了,我们往t_users表中插入一条数据,并且查看结果。


    image.png


    插入没有问题,我们查看我们的slave服务器,看是否主从同步成功:


    image.png


    可以看出同步成功了,那么我们如何才能知道读写是分离的呢,别着急,我们可以在win7 也就是slave 中插入一条数据,看是否能查出来。


    image.png


    我们现在去查看一下看是否能查询出来。


    image.png


    看到了吧,这就证明amoeba查询走的是slave库, 我们可以看下我们的master库中是否也有这条数据。


    image.png


    我想到这里就不用我再继续解释了。 因为最简单的读写分离已经完成了。


    我们程序中使用就配置 amoeba 的连接地址就可以了。 

    ip: 192.168.1.3

    端口:8066

    帐号:a_root

    密码:a_root_123

    指令中登录就使用: mysql -h 192.168.1.3 -u a_root -pa_root_123 -P8066

0 +1

版权声明

 数据库  mysql

 请文明留言

0 条评论