Amoeba原理戳这里:Amoeba详细介绍


实验环境

Master、Amoeba--IP:192.168.1.5

Slave---IP:192.168.1.10

安装JDK

JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

[root@dep5 ~]# mkdir /usr/local/JDF

[root@dep5 ~]# tar -xvf jdk-8u101-linux-x64.tar.gz -C /usr/local/JDF/

[root@dep5 ~]#vim /etc/profile

  1. JAVA_HOME=/usr/local/JDF/jdk1.8.0_101
  2. export JAVA_HOME
  3. PATH=$JAVA_HOME/bin:$PATH
  4. export PATH
  5. CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
  6. export CLASSPATH

####测试JDK是否OK

[root@dep5 ~]# java -version

java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

安装Amoeba

Amoeba下载地址:https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/

[root@dep5 ~]# mkdir /usr/local/amoeba

[root@dep5 ~]# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba

[root@dep5 ~]# chmod -R +x /usr/local/amoeba/bin/

主从授权,增加用户,修改配置文件

主(192.168.1.5 vim /etc/my.cnf):

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

从(192.168.1.10  vim /etc/my.cnf):

server-id = 2 #从数据库标志

所有参与主从分离的机器(192.168.1.5,192.168.1.10):

mysql-->grant all privileges on *.* to amoeba@'%' identified by 'amoeba';

mysql-->flush privileges;

Amoeba配置介绍

Amoeba For MySQL 的使用非常简单,所有的配置文件都是标准的XML 文件,总共有四个配置文件。分别为:

  • amoeba.xml:主配置文件,配置所有数据源以及Amoeba 自身的参数设置;实现主从的话配置这个文件就可以了;
  • rule.xml:配置所有Query 路由规则的信息;
  • functionMap.xml:配置用于解析Query 中的函数所对应的Java 实现类;
  • rullFunctionMap.xml:配置路由规则中需要使用到的特定函数的实现类;

下面是一份已经修改OK的amoeba.xml配置文件

[root@dep5 ~]# vim /usr/local/amoeba/conf/amoeba.xml

  1. <?xml version="1.0" encoding="gbk"?>
  2.  
  3. <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
  4. <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
  5.  
  6. <server>
  7. <!-- proxy server绑定的端口 -->
  8. <property name="port">8888</property>
  9.  
  10. <!-- proxy server绑定的IP -->
  11.  
  12. <property name="ipAddress">192.168.1.5</property>
  13. <!-- 对外验证的用户名 -->
  14. <property name="user">amoeba</property>
  15. <!-- 对外验证的密码 -->
  16. <property name="password">amoeba</property>
  17.  
  18. <!-- proxy server net IO Read thread size -->
  19. <property name="readThreadPoolSize">20</property>
  20.  
  21. <!-- proxy server client process thread size -->
  22. <property name="clientSideThreadPoolSize">30</property>
  23.  
  24. <!-- mysql server data packet process thread size -->
  25. <property name="serverSideThreadPoolSize">30</property>
  26.  
  27. <!-- socket Send and receive BufferSize(unit:K) -->
  28. <property name="netBufferSize">128</property>
  29.  
  30. <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
  31. <property name="tcpNoDelay">true</property>
  32.  
  33. <!-- query timeout( default: 60 second , TimeUnit:second) -->
  34. <property name="queryTimeout">60</property>
  35. </server>
  36.  
  37. <!--
  38. 每个ConnectionManager都将作为一个线程启动。
  39. manager负责Connection IO读写/死亡检测
  40. -->
  41. <connectionManagerList>
  42. <connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
  43. <property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
  44.  
  45. <!--
  46. default value is avaliable Processors
  47. <property name="processors">5</property>
  48. -->
  49. </connectionManager>
  50. </connectionManagerList>
  51.  
  52. <dbServerList>
  53. <!--
  54. 一台mysqlServer 需要配置一个pool,
  55. 如果多台 平等的mysql需要进行loadBalance,
  56. 平台已经提供一个具有负载均衡能力的objectPool:com.meidusa.amoeba.mysql.server.MultipleServerPool
  57. 简单的配置是属性加上 virtual="true",该Pool 不允许配置factoryConfig
  58. 或者自己写一个ObjectPool。
  59. -->
  60. <dbServer name="server1">
  61.  
  62. <!-- PoolableObjectFactory实现类 -->
  63. <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  64. <property name="manager">defaultManager</property>
  65.  
  66. <!-- 真实mysql数据库端口 -->
  67. <property name="port">3306</property>
  68.  
  69. <!-- 真实mysql数据库IP -->
  70. <property name="ipAddress">192.168.1.5</property>
  71. <property name="schema">test</property>
  72.  
  73. <!-- 用于登陆mysql的用户名 -->
  74. <property name="user">amoeba</property>
  75.  
  76. <!-- 用于登陆mysql的密码 -->
  77. <property name="password">amoeba</property>
  78.  
  79. </factoryConfig>
  80.  
  81. <!-- ObjectPool实现类 -->
  82. <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
  83. <property name="maxActive">200</property>
  84. <property name="maxIdle">200</property>
  85. <property name="minIdle">10</property>
  86. <property name="minEvictableIdleTimeMillis">600000</property>
  87. <property name="timeBetweenEvictionRunsMillis">600000</property>
  88. <property name="testOnBorrow">true</property>
  89. <property name="testWhileIdle">true</property>
  90. </poolConfig>
  91. </dbServer>
  92. <dbServer name="server2">
  93.  
  94. <!-- PoolableObjectFactory实现类 -->
  95. <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  96. <property name="manager">defaultManager</property>
  97.  
  98. <!-- 真实mysql数据库端口 -->
  99. <property name="port">3306</property>
  100.  
  101. <!-- 真实mysql数据库IP -->
  102. <property name="ipAddress">192.168.1.10</property>
  103. <property name="schema">test</property>
  104.  
  105. <!-- 用于登陆mysql的用户名 -->
  106. <property name="user">amoeba</property>
  107.  
  108. <!-- 用于登陆mysql的密码 -->
  109. <property name="password">amoeba</property>
  110.  
  111. </factoryConfig>
  112.  
  113. <!-- ObjectPool实现类 -->
  114. <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
  115. <property name="maxActive">200</property>
  116. <property name="maxIdle">200</property>
  117. <property name="minIdle">10</property>
  118. <property name="minEvictableIdleTimeMillis">600000</property>
  119. <property name="timeBetweenEvictionRunsMillis">600000</property>
  120. <property name="testOnBorrow">true</property>
  121. <property name="testWhileIdle">true</property>
  122. </poolConfig>
  123. </dbServer>
  124.  
  125. <dbServer name="master" virtual="true">
  126. <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  127. <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  128. <property name="loadbalance">1</property>
  129.  
  130. <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
  131. <property name="poolNames">server1</property>
  132. </poolConfig>
  133. </dbServer>
  134. <dbServer name="slave" virtual="true">
  135. <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  136. <!-- 负载均衡参数 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  137. <property name="loadbalance">1</property>
  138.  
  139. <!-- 参与该pool负载均衡的poolName列表以逗号分割 -->
  140. <property name="poolNames">server2</property>
  141. </poolConfig>
  142. </dbServer>
  143. </dbServerList>
  144.  
  145. <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
  146. <property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
  147. <property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
  148. <property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
  149. <property name="LRUMapSize">1500</property>
  150. <property name="defaultPool">server1</property>
  151.  
  152.    <!-- 读写分离在这里 -->
  153. <property name="writePool">master</property>
  154. <property name="readPool">slave</property>
  155.  
  156. <property name="needParse">true</property>
  157. </queryRouter>
  158. </amoeba:configuration>

启动Amoeba

# cd /usr/local/amoeba/bin

这种启动方便看nohup.log日志.防止提示溢出

#:nohup bash -x amoeba &

常见错误:1

The stack size specified is too small, Specify at least 228k

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

解决办法:

# vim /usr/local/amoeba/bin/amoeba

#DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"  注释

DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"   增加

常见错误2:

org.xml.sax.SAXParseException; lineNumber: 406; columnNumber: 6; 注释中不允许出现字符串 "--"

解决办法:

后来改了一大通,试了一下午,才发现。 我们的注释两边要有空格,才行。

测试是否读写分离

在(master)主上的test库建立一个los的表

Mysql->use test;

Mysql->create table los(id int(10),name char(10));

在(slave)从上查看test库是否同步了los表

Mysql-> use test;

Mysql->show tables;

在主(master)操作.插入一条数据.

mysql-->insert into alvin values(1,'master');

在从(slave)操作,插入一条数据.

mysql-->insert into alvin values(2,'slave');

注意因为从同步主的数据。所以这里有2条数据,

(1)     先验证读。我们配置文件是用的是DR轮询,注意这个IP地址要写:amoeba的IP地址,不是master也不是slave (只是实验,就把amoeba跟master放在同一个机器上面)是通过amoeba代理登陆。192.168.1.5

(2)     验证写,正常来说。如果只有全部写到主里面,两边的数据才会以致。如果其中有一个不一致的话。那么说明写到从里面去了。因为主不会同步从的数据。都是单向数据传输。

我就稍微稍微偷一下懒嘛,弄清楚读写分离的原理,弄懂原理就好办了,肯定有各种想法在里面,如果这些想法都能得到验证,那么主从就Ok了

参考度娘时好多博客文件,然后自己做实验通过OK

Mysql集群读写分离(Amoeba)的更多相关文章

  1. docker+mysql集群+读写分离+mycat管理+垂直分库+负载均衡

    依然如此,只要大家跟着我的步骤一步步来,100%是可以测试成功的 centos6.8已不再维护,可能很多人的虚拟机中无法使用yum命令下载docker, 但是阿里源还是可以用的 因为他的centos- ...

  2. MySQL集群读写分离的自定义实现

    基于MySQL Router可以实现高可用,读写分离,负载均衡之类的,MySQL Router可以说是非常轻量级的一个中间件了.看了一下MySQL Router的原理,其实并不复杂,原理也并不难理解, ...

  3. 使用mysql-proxy 快速实现mysql 集群 读写分离

    目前较为常见的mysql读写分离分为两种: 1. 基于程序代码内部实现:在代码中对select操作分发到从库:其它操作由主库执行:这类方法也是目前生产环境应用最广泛,知名的如DISCUZ X2.优点是 ...

  4. MySQL集群系列2:通过keepalived实现双主集群读写分离

    在上一节基础上,通过添加keepalived实现读写分离. 首先关闭防火墙 安装keepalived keepalived 2台机器都要安装 rpm .el6.x86_64/ 注意上面要替换成你的内核 ...

  5. 十四、linux-MySQL的数据库集群读写分离及高可用性、备份等

    一.数据库集群及高可用性 二.mysql实现读写分离 mysql实现读写分离有多种方式: 1)代码语言(php\python\java等)层面实现读写分离,找开发进行实现. 2)通过软件工具实现读写分 ...

  6. linux上使用amoeba实现MySql集群,以及读写分离,主从复制

    一.由于是MySql集群,所以就不可能只有一个MySql,需要多个MySql,具体安装步骤,可以参考http://www.cnblogs.com/ywzq/p/4882140.html这个地址进行安装 ...

  7. Mycat搭建负载均衡,读写分离的Mysql集群

    Mycat搭建负载均衡,读写分离的Mysql集群 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.Mycat-server-1.6.7.4-te ...

  8. MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

    前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离. 注意:这里比较坑的就是mysql-proxy一直没有更新 ...

  9. 2.Mysql集群------Mycat读写分离

    前言: Mycat: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...

随机推荐

  1. go share library

    http://blog.ralch.com/tutorial/golang-sharing-libraries/ Sharing Golang packages to C and Go Sun, Au ...

  2. Git 版本管理基本操作

    Git是一个版本管理操作的工具 非常N,可以很智能的分布式管理, 本网站学习笔记 来自于廖雪峰老师的内容借鉴 安装 yum -y install git 本地设置全局 告知是谁提交代码 信息 # gi ...

  3. asp.net导出excel科学计数问题

    方法一: 在asp.net 中 我一般都是将要导出的数据放到gridview网格里,首先对网格邦定数据时 字符串形式处理,然后再用普通的形式导出excel就把问题解决了. 我的代码非常简单:在邦定gr ...

  4. linux fork()函数

    C语言编程创建函数fork() 执行解析 | 浏览:1842 | 更新:2013-04-22 15:12 | 标签:c语言 概述 最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思 ...

  5. OpenGL中glFrustum()和gluPerspective()的相互转换

    OpenGL中在窗口的大小发生变化的时候会触发resize()函数,这里会传入一个新的宽和高,在resize()函数中我们会设置投影矩阵,在可以使用OpenGL基础函数glFrustum()函数和gl ...

  6. phpStudy环境配置多个站点,绑定域名

    经常做网站的朋友,往往要在自已的电脑同时建立多个站点,而phpstudy这款软件就能很好的解决这个问题,大家看下图 点击上图中的 其它选项菜单 ,就会弹出下面的对话框,然后点击 站点域名管理 然 后在 ...

  7. Power oj2470/DFS

    题目链接 2469: C 小Y的难题(1) Time Limit: 1000 MS Memory Limit: 65536 KB Total Submit: 9 Accepted: 7 Page Vi ...

  8. Android自定义XML属性

    <?xml version="1.0" encoding="utf-8"?> <resources> <declare-style ...

  9. Break on _NSLockError() to debug.

    *** -[NSCondition dealloc]: condition (<NSCondition: 0x1039a450> '(null)') deallocated while s ...

  10. 栈的java实现和栈的应用

    [例子和习题出自数据结构(严蔚敏版), 本人使用java进行实现.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 栈的实现 栈是一种先进后出的数据结构, 首先定义了栈需要实现的接口: ...