jiabanl 发表于 2018-10-6 13:15:26

mysql+amoeba读写分离

  mysql+amoeba读写分离
  一 简介:
  Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。
  Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS原则的思想。
  优势
  Amoeba主要解决以下问题:
  a). 数据切分后复杂数据源整合
  b). 提供数据切分规则并降低数据切分规则给数据库带来的影响
  c). 降低数据库与客户端连接
  d). 读写分离路由
  不足
  a)、目前还不支持事务
  b)、暂时不支持存储过程(近期会支持)
  c)、不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)
  d)、暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致:
  二 准备
  1三台centos7系统(注意我是安装的minimal的系统,需要通yum安装一些依赖包如:,yum-ygroupinstall development tools,现网建议安装DVD版)
  Amoeba:192.168.161.141
  Msysql master:192.168.161.142
  Mysql slave:192.168.161.143
  2 Amoeba上安装jdk-7u80-linux-x64.tar.gz、amoeba-mysql-3.0.5-RC-distribution.zip
  3 Mysql上面安装MySQL-client-5.6.6_m9-1.rhel5.x86_64.rpm、
  MySQL-server-5.6.6_m9-1.rhel5.x86_64.rpm
  三 关闭防火墙和selinux
  systemctl stop firewalld
  systemctl disable firewalld
  

setenforce 0  

  四 在161.142和161.143上面安装mysql,并配置主从同步。
  1 161.142和161.143上面都安装mysql
  rpm -ivh MySQL-server-5.6.6_m9-1.rhel5.x86_64.rpm
  rpm -ivh MySQL-client-5.6.6_m9-1.rhel5.x86_64.rpm
  2修改配置文件
  Mysql master(161.142):
  # cat /etc/my.cnf
  
  log-bin=mysql-bin
  server-id=1
  binlog-ignore-db=information_schema #新增的配置,忽略information_schema 的同步
  Mysql slave(161.143):
  # cat /etc/my.cnf
  
  log-bin=mysql-bin
  server-id=2
  3 启动两台mysql,配置主从
  (1)启动mysql:
  systemctl start mysql
  (2)修改mysql的默认密码:
  mysqladmin -uroot password '123'
  (3)进入161.142 mysql master:
  # mysql -uroot -p123
  mysql> show master status;
  +------------------+----------+--------------+--------------------+-------------------+
  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB   | Executed_Gtid_Set |
  +------------------+----------+--------------+--------------------+-------------------+
  | mysql-bin.000004 |      120 |            | information_schema |                   |
  +------------------+----------+--------------+--------------------+-------------------+
  1 row in set (0.00 sec)
  (4)进入161.143 mysql slave:
  执行:
  配置slave服务器:
  change master to master_host='192.168.161.142',master_user='root',master_password='123',
  master_log_file='mysql-bin.000004',master_log_pos=120;
  启动从服务器的复制功能:
  start slave;
  查看从服务器复制的状态:
  mysql> show slave status\G'
   1. row
  Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.161.142
  Master_User: root
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000004
  Read_Master_Log_Pos: 120
  Relay_Log_File: localhost-relay-bin.000009
  Relay_Log_Pos: 283
  Relay_Master_Log_File: mysql-bin.000004
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Replicate_Do_DB:
  Replicate_Ignore_DB:
  Replicate_Do_Table:
  Replicate_Ignore_Table:
  Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
  Last_Errno: 0
  Last_Error:
  Skip_Counter: 0
  Exec_Master_Log_Pos: 120
  Relay_Log_Space: 623
  Until_Condition: None
  Until_Log_File:
  Until_Log_Pos: 0
  Master_SSL_Allowed: No
  Master_SSL_CA_File:
  Master_SSL_CA_Path:
  Master_SSL_Cert:
  Master_SSL_Cipher:
  Master_SSL_Key:
  Seconds_Behind_Master: 0
  Master_SSL_Verify_Server_Cert: No
  Last_IO_Errno: 0
  Last_IO_Error:
  Last_SQL_Errno: 0
  Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
  Master_Server_Id: 1
  Master_UUID: f2e02c4b-f6c3-11e7-a14e-66ab28c66abe
  Master_Info_File: /var/lib/mysql/master.info
  SQL_Delay: 0
  SQL_Remaining_Delay: NULL

  Slave_SQL_Running_State: Slave has read all>  Master_Retry_Count: 86400
  Master_Bind:
  Last_IO_Error_Timestamp:
  Last_SQL_Error_Timestamp:
  Master_SSL_Crl:
  Master_SSL_Crlpath:
  Retrieved_Gtid_Set:
  Executed_Gtid_Set:
  1 row in set (0.00 sec)
  Slave_IO_Running: Yes,Slave_SQL_Running: Yes 两个都为也是则没有问题。
  (5)测试:略
  五 在161.141上面配置amoeba
  1 161.141上面搭建Java环境
  (1)解压Java包
  tar -xzvfjdk-7u80-linux-x64.tar.gz
  (2)配置环境变量
  修改配置文件:
  Vi /etc/profile
  JAVA_HOME=/home/jdk1.7.0_80
  CLASSPATH=.:$JAVA_HOME/lib.tools.jar
  PATH=$JAVA_HOME/bin:$PATH

  export JAVA_HOME>  使配置文件立即生效:
  source /etc/profile
  验证Java:
  # java -version
  java version "1.7.0_80"
  Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
  Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
  2 配置amoeba配置文件
  (1)下载
  wget-c
  https://ncu.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
  (2)解压
  unzip amoeba-mysql-3.0.5-RC-distribution.zip -d/usr/local/amoeba
  (如没有unzip命令请自行安装:yum install -y unzip zip)
  (3)给amoeba授权mysql远程账户(不推荐使用root)

  grant all on . to amoeba@"%">  flush privileges;
  (4)修改配置文件
  Amoeba做读写分离只需要修改dbServers.xml、amoeba.xml 这两个配置文件
  # cd /usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/
  # ls
  access_list.confamoeba.dtdamoeba.xmldbserver.dtddbServers.xmlfunction.dtdfunctionMap.xmllog4j.dtdlog4j.xmlrule.dtdruleFunctionMap.xmlrule.xml
  修改dbServers.xml
  # cat dbServers.xml
  
  
  
页: [1]
查看完整版本: mysql+amoeba读写分离