设为首页 收藏本站
查看: 722|回复: 0

[经验分享] Mysql 基于 Amoeba 的 读写分离

[复制链接]

尚未签到

发表于 2018-10-10 08:19:13 | 显示全部楼层 |阅读模式
  首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别:
  在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下,用mysql proxy 需要相当大的工作量,目前mysql proxy没有现成的 lua脚本。mysql proxy根本没有配置文件, lua脚本就是它的全部,当然lua是相当方便的。那么同样这种东西需要编写大量的脚本才能完成一 个复杂的配置。而Amoeba只需要进行相关的配置就可以满足需求。
DSC0000.jpg

  假设有这样的使用场景,有三个数据库节点分别命名为Master、Slave1、Slave2如下:
  Amoeba: Amoeba
  Master: Master  (可读写)
  Slaves:Slave1 、Slave2 (2个平等的数据库。只读/负载均衡)
  在 主从数据库 的复制的部分, 任然需要使用数据库自己的复制机制。 Amoeba 不提供复制功能。
  1. 起动数据库的主从复制功能。
  a. 修改配置文件
  master.cnf
  Cnf代码   DSC0001.jpg

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

  •   # 增加 日志文件, 用于验证读写分离
  •   log = /home/mysql/mysql/log/mysql.log
  slave1.cnf
  Cnf代码  

  •   server-id = 2

  •   # 增加 日志文件, 用于验证读写分离
  •   log = /home/mysql/mysql/log/mysql.log
  slave2.cnf
  Cnf代码  

  •   server-id = 3

  •   # 增加 日志文件, 用于验证读写分离
  •   log = /home/mysql/mysql/log/mysql.log
  b. Master 中 创建两个 只读权限 的用户。 用户名均为:repl_user   密码均为:copy  分别开放给 slave1, slave2
  Sql代码  

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

  •   mysql> grant replication slave on *.* to repl_user@192.168.14.133 identified by 'copy';
  c. 查看 Master 信息
  Sql代码  

  •   mysql> show master status;
  •   +------------------+----------+--------------+------------------+
  •   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  •   +------------------+----------+--------------+------------------+
  •   | mysql-bin.000017 |     2009 |              |                  |
  •   +------------------+----------+--------------+------------------+
  •   1 row in set (0.00 sec)
  d. Slave1 ,Slave2 中 启动 Master - Slave 复制功能。
  分别执行以下命令
  Sql代码  

  •   mysql> slave stop;
  •   Query OK, 0 rows affected (0.02 sec)

  •   mysql> change master to
  •   -> master_host='192.168.14.131',
  •   -> master_user='repl_user',
  •   -> master_password='copy',
  •   -> master_log_file='mysql-bin.000017',
  •   -> master_log_pos=2009;
  •   Query OK, 0 rows affected (0.03 sec)

  •   mysql> start slave;
  •   Query OK, 0 rows affected (0.00 sec)
  2. Amoeba 读写分离的配置
  a. Master , Slave1 ,Slave2 中开放权限给 Amoeba 访问。
  在 Master , Slave1 , Slave2 中分别执行
  Sql代码  

  •   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.131
  •   
  •   

  •   
  •   
  •   
  •   192.168.14.132
  •   
  •   

  •   
  •   
  •   
  •   192.168.14.133
  •   
  •   

  •   
  •   
  •   
  •   
  •   1

  •   
  •   slave1,slave2
  •   
  •   

  •   
  amoeba.xml
  Xml代码  

  •   

  •   
  •   

  •   

  •   
  •   
  •   
  •   8066

  •   
  •   

  •   ${clientConnectioneManager}

  •   
  •   
  •   128
  •   64
  •   
  •   

  •   
  •   
  •   
  •   root

  •   root

  •   
  •   
  •   ${amoeba.home}/conf/access_list.conf
  •   
  •   
  •   
  •   

  •   

  •   
  •   
  •   
  •   
  •   
  •   127.0.0.1
  •   true
  •   ${clientConnectioneManager}
  •   
  •   
  •   

  •   

  •   
  •   
  •   20

  •   
  •   30

  •   
  •   30

  •   
  •   500

  •   
  •   60
  •   

  •   

  •   
  •   
  •   
  •   com.meidusa.amoeba.net.ConnectionManager
  •   
  •   
  •   
  •   com.meidusa.amoeba.net.AuthingableConnectionManager

  •   
  •   
  •   

  •   
  •   
  •   ${amoeba.home}/conf/dbServers.xml
  •   

  •   

  •   
  •   
  •   ${amoeba.home}/conf/rule.xml
  •   ${amoeba.home}/conf/ruleFunctionMap.xml
  •   
  •   
  •   ${amoeba.home}/conf/functionMap.xml

  •   1500
  •   
  •   master

  •   
  •   master
  •   
  •   slaves

  •   true
  •   
  •   
  rule.xml
  Java代码  

  •   
  •   

  •   
  •   
  •   
  •   
  不需要 数据库分片时,不用配置。 但是不能没有 tableRule 元素, 否则报错。 随便写个空规则就行了。
  3. 测试读写分离
  a. 在 Master , Slave1 , Slave2  中分别查看 日志文件: mysql.log
  Shell代码  

  •   tail -f ./log/mysql.log
  b. 启动 Amoeba, 使用 Mysql GUI Tools 连接 Amoeba
DSC0002.png


  执行以上几个命令。 查看日志内容。
  Master  mysql.log
  Shell代码  

  •   [mysql@prx1 mysql]$ tail -f log/mysql.log
  •   370 Query     SET SESSION sql_mode=''
  •   370 Query     SET NAMES utf8
  •   370 Query     SHOW FULL TABLES
  •   370 Query     SHOW COLUMNS FROM `t_message`
  •   370 Query     SHOW COLUMNS FROM `t_user`
  •   370 Query     SHOW PROCEDURE STATUS
  •   370 Query     SHOW FUNCTION STATUS
  •   110813 15:21:11   370 Query     SHOW VARIABLES LIKE 'character_set_server'
  •   370 Query     SHOW FULL COLUMNS FROM `test`.`t_message`
  •   110813 15:21:12   370 Query     SHOW CREATE TABLE `test`.`t_message`
  •   110813 15:22:40   374 Connect   test_user@192.168.14.129 on test
  •   375 Connect   test_user@192.168.14.129 on test
  •   376 Connect   test_user@192.168.14.129 on test
  •   110813 15:23:40   370 Query     insert into t_message values(1, 'c1')
  •   110813 15:24:07   377 Connect   test_user@192.168.14.129 on test
  •   378 Connect   test_user@192.168.14.129 on test
  •   379 Connect   test_user@192.168.14.129 on test
  •   110813 15:24:15   370 Query     insert into t_user values(8, 'n8', 'p8')
  •   110813 15:24:24   370 Query     SHOW FULL COLUMNS FROM `test`.`t_user`
  •   370 Query     SHOW CREATE TABLE `test`.`t_user`
  •   110813 15:24:35   370 Query     SHOW FULL COLUMNS FROM `test`.`t_message`
  •   370 Query     SHOW CREATE TABLE `test`.`t_message`
  Slave1  mysql.log
  Shell代码  

  •   [mysql@prx2 mysql]$ tail -f log/mysql.log
  •   317 Connect   test_user@192.168.14.129 on test
  •   318 Connect   test_user@192.168.14.129 on test
  •   110813 15:35:30   315 Query     SELECT @@sql_mode
  •   110813 15:35:32   315 Query     SELECT @@sql_mode
  •   110813 15:35:44   315 Query     SELECT @@SQL_MODE
  •   110813 15:35:46   315 Query     SELECT @@SQL_MODE
  •   110813 15:37:18   319 Connect   test_user@192.168.14.129 on test
  •   320 Connect   test_user@192.168.14.129 on test
  •   110813 15:37:19   321 Connect   test_user@192.168.14.129 on test
  •   110813 15:37:26   246 Quit
  •   110813 15:38:21   315 Query     SELECT @@SQL_MODE
  •   110813 15:38:22    42 Query     BEGIN
  •   42 Query     insert into t_message values(1, 'c1')
  •   42 Query     COMMIT /* implicit, from Xid_log_event */
  •   110813 15:38:50   322 Connect   test_user@192.168.14.129 on test
  •   323 Connect   test_user@192.168.14.129 on test
  •   324 Connect   test_user@192.168.14.129 on test
  •   110813 15:38:58    42 Query     BEGIN
  •   42 Query     insert into t_user values(8, 'n8', 'p8')
  •   42 Query     COMMIT /* implicit, from Xid_log_event */
  •   110813 15:39:08   315 Query     SELECT @@SQL_MODE
  •   110813 15:39:19   315 Query     SELECT @@SQL_MODE
  •   110813 15:44:08   325 Connect   test_user@192.168.14.129 on test
  •   326 Connect   test_user@192.168.14.129 on test
  •   327 Connect   test_user@192.168.14.129 on test
  Slave2  mysql.log
  Shell代码  

  •   [mysql@prx3 mysql]$ tail -f log/mysql.log
  •   110813 15:35:08   305 Connect   test_user@192.168.14.129 on test
  •   306 Connect   test_user@192.168.14.129 on test
  •   307 Connect   test_user@192.168.14.129 on test
  •   110813 15:35:31   304 Query     SELECT @@sql_mode
  •   304 Query     SELECT @@sql_mode
  •   110813 15:35:44   304 Query     SELECT @@SQL_MODE
  •   110813 15:35:46   304 Query     SELECT * FROM t_message t
  •   110813 15:37:18   308 Connect   test_user@192.168.14.129 on test
  •   309 Connect   test_user@192.168.14.129 on test
  •   310 Connect   test_user@192.168.14.129 on test
  •   110813 15:38:21     8 Query     BEGIN
  •   8 Query     insert into t_message values(1, 'c1')
  •   8 Query     COMMIT /* implicit, from Xid_log_event */
  •   110813 15:38:50   311 Connect   test_user@192.168.14.129 on test
  •   312 Connect   test_user@192.168.14.129 on test
  •   313 Connect   test_user@192.168.14.129 on test
  •   110813 15:38:58   304 Query     SELECT @@SQL_MODE
  •   8 Query     BEGIN
  •   8 Query     insert into t_user values(8, 'n8', 'p8')
  •   8 Query     COMMIT /* implicit, from Xid_log_event */
  •   110813 15:39:08   304 Query     select * from t_user
  •   110813 15:39:19   304 Query     select * from t_message
  •   110813 15:44:08   314 Connect   test_user@192.168.14.129 on test
  •   315 Connect   test_user@192.168.14.129 on test
  •   316 Connect   test_user@192.168.14.129 on test
  从日志中可以看出。
  在 Master  mysql.log 中,只执行了 insert into 命令。
  在 Slave1 中,只是复制了 insert into 命令, 是主从复制的结果
  在 Slave2 中, 复制了 insert into 命令,同时还执行了 select 命令。
  说明,主从分离已经成功。
  转自:http://www.iteye.com/topic/1113437


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-619734-1-1.html 上篇帖子: MYSQL主从复制部署流程 下篇帖子: MySQL基于SSL协议的主从复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表