Mysql 基于 Amoeba 的 读写分离

时间:2022-09-20 14:50:00

首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别:

 

在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下,用mysql proxy 需要相当大的工作量,目前mysql proxy没有现成的 lua脚本。mysql proxy根本没有配置文件, lua脚本就是它的全部,当然lua是相当方便的。那么同样这种东西需要编写大量的脚本才能完成一 个复杂的配置。而Amoeba只需要进行相关的配置就可以满足需求。


Mysql 基于 Amoeba 的 读写分离 
 

假设有这样的使用场景,有三个数据库节点分别命名为Master、Slave1、Slave2如下:

 

Amoeba: Amoeba <192.168.14.129>

Master: Master <192.168.14.131> (可读写)

Slaves:Slave1 <192.168.14.132>、Slave2<192.168.14.133> (2个平等的数据库。只读/负载均衡)

 

在 主从数据库 的复制的部分, 任然需要使用数据库自己的复制机制。 Amoeba 不提供复制功能。

 

1. 起动数据库的主从复制功能。

 

a. 修改配置文件

 

master.cnf

Cnf代码  Mysql 基于 Amoeba 的 读写分离

  1. server-id = 1 #主数据库标志  

  2.   

  3. # 增加 日志文件, 用于验证读写分离  

  4. log = /home/mysql/mysql/log/mysql.log  

 

slave1.cnf

Cnf代码  Mysql 基于 Amoeba 的 读写分离

  1. server-id = 2  

  2.   

  3. # 增加 日志文件, 用于验证读写分离  

  4. log = /home/mysql/mysql/log/mysql.log  

 

slave2.cnf

Cnf代码  Mysql 基于 Amoeba 的 读写分离

  1. server-id = 3  

  2.   

  3. # 增加 日志文件, 用于验证读写分离  

  4. log = /home/mysql/mysql/log/mysql.log  

 

b. Master 中 创建两个 只读权限 的用户。 用户名均为:repl_user   密码均为:copy  分别开放给 slave1, slave2

 

Sql代码  Mysql 基于 Amoeba 的 读写分离

  1. mysql> grant replication slave on *.* to repl_user@192.168.14.132 identified by 'copy';  

  2.   

  3. mysql> grant replication slave on *.* to repl_user@192.168.14.133 identified by 'copy';  

 

c. 查看 Master 信息

Sql代码  Mysql 基于 Amoeba 的 读写分离

  1. mysql> show master status;  

  2. +------------------+----------+--------------+------------------+  

  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  

  4. +------------------+----------+--------------+------------------+  

  5. | mysql-bin.000017 |     2009 |              |                  |  

  6. +------------------+----------+--------------+------------------+  

  7. 1 row in set (0.00 sec)  

 

 

d. Slave1 ,Slave2 中 启动 Master - Slave 复制功能。

 

分别执行以下命令

 

Sql代码  Mysql 基于 Amoeba 的 读写分离

  1. mysql> slave stop;  

  2. Query OK, 0 rows affected (0.02 sec)  

  3.   

  4. mysql> change master to  

  5.     -> master_host='192.168.14.131',  

  6.     -> master_user='repl_user',  

  7.     -> master_password='copy',  

  8.     -> master_log_file='mysql-bin.000017',  

  9.     -> master_log_pos=2009;  

  10. Query OK, 0 rows affected (0.03 sec)  

  11.   

  12. mysql> start slave;  

  13. Query OK, 0 rows affected (0.00 sec)  

 

2. Amoeba 读写分离的配置

 

a. Master , Slave1 ,Slave2 中开放权限给 Amoeba 访问。

 

在 Master , Slave1 , Slave2 中分别执行

 

Sql代码  Mysql 基于 Amoeba 的 读写分离

  1. mysql> grant all on test.* to test_user@192.168.14.129 indentified by '1234';  

Amoeba 访问三个数据库的账号密码相同。

 

b. 修改 Amoeba 的配置文件

 

配置文件详细说明请查看 官方文档:http://docs.hexnova.com/amoeba/rw-splitting.html

 

dbServer.xml

Xml代码  ${defaultManager} 64 128 3306 test test_user 1234 500 500 10 600000 600000 true true 192.168.14.13 192.168.14.132 192.168.14.133 1 slave1,slave2 " wmode="transparent">