一 Amoeba简介

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba forMysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面使用。
主要解决:
• 降低 数据切分带来的复杂多数据库结构
• 提供切分规则并降低 数据切分规则 给应用带来的影响
• 降低db 与客户端的连接数
• 读写分离

二 前期规划

1.1 主机规划

1.2 虚拟IP规划

1.3 用户列表

提示:以上角色需要在所有节点添加。

1.4 整体架构

三 MySQL-MMM基础部署

略,具体可参考《002.MMM双主-双从读写分离部署》。

四 基础JDK安装

4.1 JDK下载

下载链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
JDK版本:jdk-8u144-linux-x64.rpm

4.2 JDK安装及配置

  1 [root@Amoeba tmp]# rpm -ivh jdk-8u144-linux-i586.rpm2 [root@Amoeba ~]# vi /etc/profile3 #set java environment4 JAVA_HOME=/usr/java/jdk1.8.0_144/5 JRE_HOME=/usr/java/jdk1.8.0_144/jre/6 CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib7 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin8 export JAVA_HOME JRE_HOME CLASS_PATH PATH9 [root@Amoeba ~]# source /etc/profile10 [root@Amoeba ~]# java -version            #验证是否安装成功

五 Amoeba安装

5.1 Amoeba下载

  1 [root@Amoeba tmp]# wget https://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip2 [root@Amoeba tmp]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/3 [root@Amoeba ~]# mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba

5.2 Amoeba-dbServers配置

  • dbServers.xml:读写分离配置文件
  • access_list.conf:IP访问列表控制配置文件
  • Amoeba的配置文件路径:/usr/local/amoeba/conf
  1 [root@Amoeba ~]# vi /usr/local/amoeba/conf/dbServers.xml2 ……3             <property name="port">3306</property>  #设置Amoeba要连接的mysql数据库的端口,默认是3306。4             <property name="schema">testdb</property>5 #设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,不支持use dbname指定缺省库,因为操作会调度到各个后端dbserver。6 <property name="user">test1</property>7             <property name="password">x12345678</property>

注意:设置amoeba连接后端数据库服务器的账号和密码,因此需要在所有后端数据库上创建该用户,并授权amoeba服务器可连接。
  1 ……2             <property name="maxActive">500</property>  #最大连接数,默认5003             <property name="maxIdle">500</property> #最大空闲连接数4             <property name="minIdle">1</property>  #最新空闲连接数5 ……6     <dbServer name="writedb"  parent="abstractServer">7 #设置一个后端可写的dbServer,这里定义为writedb,这个名字可以任意命名,后面还会用到。8         <factoryConfig>9             <property name="ipAddress">172.24.8.100</property>10 #设置后端可写dbserver ip。11         </factoryConfig>12     </dbServer>13 14     <dbServer name="slave01"  parent="abstractServer">15         <factoryConfig>16             <property name="ipAddress">172.24.8.101</property>17         </factoryConfig>18     </dbServer>19 20     <dbServer name="slave02"  parent="abstractServer">21         <factoryConfig>22             <property name="ipAddress">172.24.8.102</property>23         </factoryConfig>24     </dbServer>25 26     <dbServer name="slave03"  parent="abstractServer">27         <factoryConfig>28             <property name="ipAddress">172.24.8.103</property>29         </factoryConfig>30     </dbServer>31 32     <dbServer name="slave04"  parent="abstractServer">33         <factoryConfig>34             <property name="ipAddress">172.24.8.104</property>35         </factoryConfig>36     </dbServer>                              #以上设置四台后端可读节点信息。37     <dbServer name="myslave" virtual="true">38 #设置定义一个虚拟的dbserver,实际上相当于一个dbserver组,这里将可读的数据库ip统一放到一个组中,将这个组的名字命名为myslave。39         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">40             <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->41             <property name="loadbalance">1</property>  #选择调度算法,1表示负载均衡,2表示权重,3表示HA, 这里选择1。42 43             <!-- Separated by commas,such as: server1,server2,server1 -->44             <property name="poolNames">slave01,slave02,slave03,slave04</property> #myslave组成员。45         </poolConfig>46     </dbServer>

5.3 Amoeba-amoeba配置

  1 [root@Amoeba ~]# vi /usr/local/amoeba/conf/amoeba.xml2 ……3             <property name="port">8066</property>    #设置amoeba监听的端口,默认是80664 ……5 <property name="ipAddress">127.0.0.1</property>       #配置监听的接口,如果不设置,默认监听所以的IP6 ……7 <property name="user">root</property>8 <property name="password">x120952576</property>

注意:
  • 以上配置客户端连接amoeba时需要使用这里设定的账号;
  • 此处账号密码和amoeba连接后端数据库服务器的密码无关;
  • 前端应用程序连接数据库的地址就是Amoeba服务器的值,连接用户名和密码即为此处配置的用户名和密码。
  1 ……2 <property name="defaultPool">writedb</property>        #设置amoeba默认的池,这里设置为writedb3 <property name="writePool">writedb</property>4 <property name="readPool">myslave</property>5 <property name="needParse">true</property>             #取消注释,则指定前面定义好的俩个读写池。

六 数据库配置

6.1 创建数据库

  1 [root@Client ~]# mysql -ummm_test -px120952576 -h172.24.8.100        #从客户端使用可写vip连接数据库2 mysql> create database testdb;                         #曾经testdb数据库3 [root@Master02 ~]# mysql -uroot -px120952576                 #使用Master02进入4 mysql> show databases;                            #验证是否复制成功

提示:其他节点测试略。

6.2 授权Amoeba用户

  1 [root@Master01 ~]# mysql -uroot -px1209525762 mysql> grant all on testdb.* to 'test1'@'172.24.8.14' identified by 'x12345678';

注意:其他所有节点均需要授权此用户。

七 启动Amoeba

  1 [root@Amoeba ~]# /usr/local/amoeba/bin/launcher

可能会出现以下报错,原因是stack size太小,导致JVM启动失败
可执行如下修复操作:
  1 [root@Amoeba ~]# vim /usr/local/amoeba/jvm.properties2 JVM_OPTIONS="-server -Xms2048m -Xmx2048m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"

提示:原为:JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
  1 [root@Amoeba ~]# /usr/local/amoeba/bin/launcher &   #建议直接放入后台启动2 [root@Amoeba ~]# echo "/usr/local/amoeba/bin/launcher &" >> /etc/rc.local

[root@Amoeba ~]# netstat -unlpt | grep java #查看进程

八 测试

8.1 打开日志记录

  1 [root@Master01 ~]# touch /var/log/mysql_query_log2 [root@Master01 ~]# chown mysql:mysql /var/log/mysql_query_log3 [root@Master01 ~]# vi /etc/my.cnf4 general_log=ON5 general_log_file=/var/log/mysql_query_log.log

注意:
打开MySQL日志记录,必须存在log文件,且同时对MySQL具有权限;
所有节点均需要打开日志记录,方便记录测试情况。

8.2 新增对应数据

  1 [root@Master01 ~]# mysql -uroot -px1209525762 mysql> use testdb;3 mysql> create table mmm_test(id int,email varchar(60));4 mysql> insert into mmm_test (id,email) values (100,'ip is 172.24.8.10');

提示:
创建用于测试的表mmm_test,并插入含该节点IP的条目,方便之后测试;
所有节点均需要执行以上操作,但ip更换为对应的ip节点即可。

8.3 读写分离测试

  1 [root@Client ~]# mysql -uroot -h172.24.8.14 -px120952576 -P80662 mysql> select * from testdb.mmm_test;

提示:
  • 此处在Client端使用的是Amoeba的IP连接,端口为Amoeba服务的8066端口;
  • 多次执行查询,可知select请求均衡的分配在MMM集群中的4个节点,由于Master01和Master02同步复制,因为有两条相同结果。
  1 [root@Master01 ~]# tail -f /var/log/mysql_query_log | grep mmm_test2 #所有节点执行此命令,观察log信息。3 [root@Client ~]# mysql -uroot -h172.24.8.14 -px120952576 -P80664 mysql> create table mmm_test1(id int,email varchar(60));5 mysql> insert into mmm_test1 (id,email) values (104,'ip is 172.24.8.14');

提示:所有写操作均在Master01上执行,其他节点的均由复制而来,由此可知已实现读写分离。

九 其他附加

Amoeba主配置文件:$AMOEBA_HOME/conf/amoeba.xml,用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
数据库服务器配置文件:$AMOEBA_HOME/conf/dbServers.xml,用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。
切分规则配置文件:$AMOEBA_HOME/conf/rule.xml,用来配置切分规则。
数据库函数配置文件:$AMOEBA_HOME/conf/functionMap.xml,用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。
切分规则函数配置文件:$AMOEBA_HOME/conf/ruleFunctionMap.xml,用来配置切分规则中使用的用户自定义函数的处理方法。
访问规则配置文件:$AMOEBA_HOME/conf/access_list.conf,用来授权或禁止某些服务器IP访问Amoeba。
日志规格配置文件:$AMOEBA_HOME/conf/log4j.xml,用来配置Amoeba输出日志的级别和方式。
参考资料:http://www.cnblogs.com/liuyisai/p/6009379.html

转载于:https://www.cnblogs.com/itzgr/p/10331121.html

001.Amoeba读写分离部署相关推荐

  1. Amoeba读写分离部署

    一 Amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba forMysql软件.这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQ ...

  2. MySQL主从复制和基于Amoeba的读写分离部署

    文章目录 MySQL主从复制和基于Amoeba读写分离 什么是主从复制? 为什么要有MySQL主从复制? 什么是读写分离? 一.MySQL主从复制原理 二.主从复制的工作过程 三.主从复制方式 1.异 ...

  3. windows下Redis 主从读写分离部署

    windows下Redis 主从读写分离部署 原文: windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文 ...

  4. mysql读写分离 存储过程_基于maxscale的读写分离部署笔记

    使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可. 基于connect方式的不要使用.从库延迟他还会继续分发请求过去,暂时不 ...

  5. mycat读写分离部署步骤

    1.下载mycat: https://raw.githubusercontent.com/MyCATApache/Mycat-download/master/1.5-RELEASE/Mycat-ser ...

  6. mysql读写分离_MySQL基于amoeba读写分离实验

    =========================================== 主从复制只是一个同步数据的方式 读写分离:只在主的上面写,只在从的上面读 读写分离方案:[1]基于程序代码内部 ...

  7. amoeba mysql读写分离_mysql数据库-基于amoeba读写分离

    环境: 主机A( huangzp2):172.16.115.157 主机B( huangzp3):172.16.115.100 主机C( huangzp4):172.16.115.87 说明: 依赖于 ...

  8. ProxySQL实现双主双从读写分离部署

    文章目录 1.环境说明 2.安装proxysql和安装mysql和配置主从 2.1给四台mysql安装mariadb 2.2安装proxysql 2.2.1配置mysql-master和mysql-m ...

  9. mysql amoeba 事务_MySQL基于Amoeba实现读写分离

    在实际的生活环境中,如果对数据库的读和写都在同一个数据库服务中操作,无论是在安全性,高可用还是高并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制的方式来同步数据,再通过读写分离来提 ...

最新文章

  1. [APB VNext 笔记] UI
  2. 中随机打乱序列的函数_提前准备,方能“随机”应对,人生不悔
  3. 在本地如何搭建虚拟主机(Appserver集成环境)
  4. 离职后,我们该如何处理社保!
  5. 执行dos命令,不出现黑色的dos窗口
  6. mysql关系模式怎么画_关系数据库与mysql
  7. Vivado Bit文件压缩
  8. ip=request.servervariables(Remote_Addr)获得ip显示::1
  9. 关于suitescript 无法读取Item Number Field
  10. 《云计算:原理与范式》一3.2 知识经济时代的来临
  11. python爬虫(十一)爬取贴吧图片
  12. JSP之java.lang.ClassNotFoundException
  13. MLY -- 8.Establish a single-number evaluation metric for your team to optimize
  14. 永琳的竹林迷径(path)
  15. MATLAB中FIR滤波器的时延溢出问题详解:线性相位对信号造成的时延溢出及其消除方法,以及fir1等函数的使用
  16. .NET Core Onvif协议C#教程系列之XiaoFeng.Onvif组件库
  17. 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
  18. rust领地柜用石镐拆吗_腐蚀Rust防炸地基教学 伪分离和双层防炸地基怎么造
  19. mysql中group by用法解析
  20. 基于遗传算法的BP神经网络优化算法(附代码)

热门文章

  1. pycharm如何放大字体和缩小字体
  2. phpcms列表页调用 点击量
  3. SQLSERVER自动定时(手动)备份工具
  4. [Android Pro] 通过IMSI判断手机是移动、联通、电信
  5. Juniper NetScreen 基于源NAT转换
  6. Ubuntu14.04LST 安装Oracle SQL Developer 4.0.2
  7. Django Book 2.0 笔记——会话、用户和注册
  8. iOS开发那些事--编写OCUnit测试方法-逻辑测试方法
  9. how to figure out problems in the ardunio nano force senser? 1,2,3,4
  10. how to deal with Demodex