在线编程在线课堂在线测评Anycodes在线编程

编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

How to use bs4??
本帖最后由 carry0987 于
Double Queue 问题描述 : The new founded Balkan Investment Group Bank (
John 问题描述 : Little John is playing very funny game
linux-command Linux命令大全搜索工具,内容包含Linux命令
Coati 是一款跨平台的代码查看工具,适用于 C/C++ 和 Java。商业软件。特性:1. 索引
系统可承载海量并发,消息收发确认机制 保障消息必达 系统采用动态智
全平台视频监控,支持安卓苹果以及pcweb,支持海康大华等主流dvr,全部源码以及文档 单聊、群聊、商
如何访问类的私有属性? 下面以 TPathData 为例,
问题:从 XE4 以来,Firemonkey 曲线绘图在移动平台不平滑的问题一直令人诟病,提交到官方的 QC 也是族繁不及备载,官方似乎有意的
操作数据库(RODBC)   odbcConnect(dsn, uid="", p
数据模式:mode函数显示任何对象的模式。常见的单个的
系统可承载海量并发,消息收发确认机制 保障消息必达 系统采用动态智
RabbitMQ与PHP(一) 项
Iease团队扩编预备中,盼望能有Ruby或者java工程师加盟。全职兼职都可以。有爱好的伴侣请与我接洽。 邮件:i
ruby 怎么设置装备摆设GTK2,求教指导下!
#include #include #include #include using namespace std; int main() {
标题如图所示: 有n盏灯,编号1~n。一开端灯都是关着的
成熟的消息收发确认机制,支持万人大群 支持开发自定义的消息sdk接口,扩展性超强 支持单/
成熟的消息收发确认机制,支持万人大群 支持开发自定义的消息sdk接口,扩展性超强 支持单/
1. 注意列表和集合的区别 set 列表表现形式: list_1
Ajax   Ajax即“Asynchronous Javascript And
大师好,我比来在做布谷鸟优
分辨提取A和B图像Harris角点,接下来须要对

[精彩分享] MySQL+Amoeba实现数据库主从复制和读写分离

[复制链接]
发表于 2016-12-24 13:19:00 | 显示全部楼层 |阅读模式
MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的。通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性。实现数据的读写分离能带来的好处有:

  • 增加物理服务器,提升机器处理能力,也就是拿硬件换性能。
  • 主从只负责各自的读和写,极大程度缓解X锁和S锁争用。
  • slave可以配置myIasm引擎,提升查询性能以及节约系统开销。
  • master直接写是并发的,slave通过主库发送来的binlog恢复数据是异步。
  • slave可以单独设置一些参数来提升其读的性能。
  • 增加冗余,提高可用性。
常见的实现数据库读写分离的方案大致有两种:应用层,代理层
在应用层也就是在代码中进行操作,通过对数据库操作类型的不同手动指定数据源,可以通过AOP的方式进行实现,不过对于一个已经搭建起来并正在运行的系统来说,这个方案应该比较复杂。
另外一种实现方式是通过数据库代理层,代理对应用层呢个是透明的,所有的读写分离操作由代理层来完成,好处就是对于开发应用层来说是透明的,不需要管理数据源,缺点在于应用原来直接访问数据库现在变成了通过代理访问数据库,性能上肯定会有影响,不过如果代理层实现的很优秀的话这个影响应该不大。
通过代理层实现数据库读写分离又有两种方案可供选择,其一是使用MySQL-Proxy,另一种是使用Amoeba。最开始找到的实现方案是基于MySQL-Proxy的,由于它没有配置文件,所要完成的工作需要由Lua脚本来实现,这对于一个Lua门外汉来说压力不小。后来找到的Amoeba实现起来很简单,只需要简单地配置就能实现数据库的读写分离,所以这里记录我通过使用Amoeba来实现数据库读写分离的过程。


Amoeba简介:
Amoeba(变形虫)致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能。
Amoeba使用:
一、准备工作

  • amoeba使用java编写,所以运行amoeba的运行环境要安装好java环境,并配置好环境变量,jdk版本要在1.5以上,因为amoeba就是用jdk1.5编写的;我的服务器java版本为1.7。
  • amoeba是在主从同步的基础上工作的,所以要先配置好MySQL的主从同步功能,我在另一篇日志中记录了我实现Mysql主从同步的过程,可以参考:MySQL主从复制(Master-Slave)实践
  •   amoeba服务器 :虚拟机 ip:182.92.172.80   amoeba版本3.0.5-RC   mysql版本5. 5.32   Java环境1.7.0_60    操作系统linux
        master服务器    :虚拟机 ip:182.92.172.80  mysql版本5. 5.32   操作系统centos6.5 (和amoeba在同一个服务器上,因为我只用了两个服务器)
        slave服务器       :虚拟机 ip:123.57.44.85   mysql版本5.5.39   操作系统centos6.5
二、下载安装amoeba
下载地址:https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/,选择最新版本进行下载,我下载的版本为:amoeba-mysql-3.0.5-RC-distribution.zip
安装:把zip安装包解压到自己指定的服务器路径上就可以了,我把它放在了/usr/local/amoeba/amoeba-mysql-3.0.5-RC里面,解压后的文件结构如下图:


三、配置amoeba
Amoeba基础配置介绍:
想象Amoeba作为数据库代理层,它一定会和很多数据库保持通信,因此它必须知道由它代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。这些信息存储在$AMOEBA_HOME/conf/dbServers.xml中。
Amoeba为了完成数据切分提供了完善的切分规则配置,为了了解如何分片数据、如何将数据库返回的数据整合,它必须知道切分规则。与切分规则相关的信息存储在$AMOEBA_HOME/conf/rule.xml中。
当我们书写SQL来操作数据库的时候,常常会用到很多不同的数据库函数,比如:UNIX_TIMESTAMP()、SYSDATE()等等。这些函数如何被Amoeba解析呢?$AMOEBA_HOME/conf/functionMap.xml描述了函数名和函数处理的关系。
对$AMOEBA_HOME/conf/rule.xml进行配置时,会用到一些我们自己定义的函数,比如我们需要对用户ID求HASH值来切分数据,这些函数在$AMOEBA_HOME/conf/ruleFunctionMap.xml中定义。
Amoeba可以制定一些可访问以及拒绝访问的主机IP地址,这部分配置在$AMOEBA_HOME/conf/access_list.conf中
Amoeba允许用户配置输出日志级别以及方式,配置方法使用log4j的文件格式,文件是$AMOEBA_HOME/conf/log4j.xml。
在开始配置amoeba配置文件之前我们需要先了解为什么要做这些配置工作。
第一,如上第一条所述,Amoeba是通过代理MySQL服务来实现数据库的读写分离的,它必须要知道如何连接到需要被代理的数据库,因此需要被代理的数据库需要创建一个访问用户给amoeba,这样amoeba才能连接到数据库上。
第二,amobea把对客户端也就是应用层是透明的,不管amoeba如何实现的读写分离,它既然把数据库全都给代理了,那它就要为客户端提供一个类似原来mysql那样的连接,客户端就把当它是mysql,它其实是一个虚拟的mysql,对外提供mysql协议,客户端连接amoeba就象连接mysql一样,因此amoeba要为客户端提供一个可供连接的用户账号。
第三,amoeba内部是实现了多数据库的负载均衡、读写分离、可切片的,所以这部分的配置是它功能上的核心配置。
下面就正式开始配置amoeba

  • 所有数据库创建amoeba访问的用户:
  1. mysql>grant all on *.* to 'amoeba'@'182.92.172.80' identified by '123456'  #创建用户并授权
  2. mysql>flush privileges; #刷新权限
复制代码
  为了方便统一管理就把所有数据库创建的用户名和密码保持一致了
  2.配置conf文件
在amoeba安装目录的conf文件夹下找到dbServer.xml和amoeba.xml文件,这两个文件是需要我们配置的
我的dbServer.xml文件配置如下:
  1. 1 <?xml version="1.0" encoding="gbk"?>
  2. 2
  3. 3 <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
  4. 4 <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
  5. 5
  6. 6         <!--
  7. 7             Each dbServer needs to be configured into a Pool,
  8. 8             If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
  9. 9              add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
  10. 10              such as 'multiPool' dbServer   
  11. 11         -->
  12. 12         
  13. 13     <dbServer name="abstractServer" abstractive="true">
  14. 14         <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  15. 15             <property name="connectionManager">${defaultManager}</property>
  16. 16             <property name="sendBufferSize">64</property>
  17. 17             <property name="receiveBufferSize">128</property>
  18. 18                 
  19. 19             <!-- mysql port -->
  20. 20             <!--<property name="port">3306</property>-->
  21. 21            
  22. 22             <!-- mysql schema -->
  23. 23             <property name="schema">yj_platform</property>
  24. 24            
  25. 25             <!-- mysql user -->
  26. 26             <property name="user">amoeba</property>
  27. 27            
  28. 28             <property name="password">123456</property>
  29. 29         </factoryConfig>
  30. 30
  31. 31         <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">
  32. 32             <property name="maxActive">500</property>
  33. 33             <property name="maxIdle">500</property>
  34. 34             <property name="minIdle">1</property>
  35. 35             <property name="minEvictableIdleTimeMillis">600000</property>
  36. 36             <property name="timeBetweenEvictionRunsMillis">600000</property>
  37. 37             <property name="testOnBorrow">true</property>
  38. 38             <property name="testOnReturn">true</property>
  39. 39             <property name="testWhileIdle">true</property>
  40. 40         </poolConfig>
  41. 41     </dbServer>
  42. 42
  43. 43     <dbServer name="master"  parent="abstractServer">
  44. 44         <factoryConfig>
  45. 45             <!-- mysql ip -->
  46. 46             <property name="ipAddress">182.92.172.96</property>
  47. 47             <!-- mysql port -->
  48. 48             <property name="port">3306</property>
  49. 49         </factoryConfig>
  50. 50     </dbServer>
  51. 51     
  52. 52     <dbServer name="slave1"  parent="abstractServer">
  53. 53         <factoryConfig>
  54. 54             <!-- mysql ip -->
  55. 55             <property name="ipAddress">123.57.44.78</property>
  56. 56             <!-- mysql port -->
  57. 57             <property name="port">13306</property>
  58. 58         </factoryConfig>
  59. 59     </dbServer>
  60. 60     
  61. 61 <!--    <dbServer name="multiPool" virtual="true">
  62. 62         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  63. 63             #Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA
  64. 64             <property name="loadbalance">1</property>
  65. 65            
  66. 66             #Separated by commas,such as: server1,server2,server1
  67. 67             <property name="poolNames">slave1,slave2</property>
  68. 68         </poolConfig>
  69. 69     </dbServer>
  70. 70 -->        
  71. 71 </amoeba:dbServers>
复制代码

需要我们关注的元素用标红字体显示出来了,在这里是指几个dbServer元素,需要手动修改的部分用黄色背景表示出来。
第一个dbServer元素其abstractive="true"属性表示这个一个抽象元素可以被其他dbServer元素扩展,类似于java里面的抽象类和类的继承之间的关系。这个dbServer里面配置amoeba连接它所代理的mysql数据库的连接信息,因为之前已经说过为了方便管理把每个数据库为amoeba访问创建的用户都统一了账号,在这里我把端口信息给注释掉了,因为我的slave数据库端口用的不是默认的3306,这种和ip,端口不一样的信息就没办法配置在通用的抽象dbServer里面了。
第二个dbServer取名为"maser",其parent="abstractServer"表示拓展了上面的抽象dbServer,在这里设置的是amoeba连接数据库具体的信息,因为每个数据库的ip肯定是不同的。
同样第三个dbServer取名为“slave”,连接信息是slave服务器。
在下面被我注释掉的第四个dbServer其name="multiPool" virtual="true"属性表示这是一个对多服务器池,这个配置使得amoeba可以把多个读数据库管理成一个读池,把多个写数据库管理成写池,在每个池中amoeba就能够实现负载均衡。由于我的主从同步只设置了一主一从,并不涉及到多个读数据库组成池的情况,所以我就把这个配置注释掉了。
接下来配置amoeba.xml文件,同样放上我的配置文件:
  1. 1 <?xml version="1.0" encoding="gbk"?>
  2. 2
  3. 3 <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
  4. 4 <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
  5. 5
  6. 6     <proxy>
  7. 7     
  8. 8         <!-- service class must implements com.meidusa.amoeba.service.Service -->
  9. 9         <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService">
  10. 10             <!-- port -->
  11. 11             <property name="port">8066</property>
  12. 12            
  13. 13             <!-- bind ipAddress -->
  14. 14            
  15. 15             <!--<property name="ipAddress">127.0.0.1</property>-->
  16. 16            
  17. 17            
  18. 18             <property name="connectionFactory">
  19. 19                 <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
  20. 20                     <property name="sendBufferSize">128</property>
  21. 21                     <property name="receiveBufferSize">64</property>
  22. 22                 </bean>
  23. 23             </property>
  24. 24            
  25. 25             <property name="authenticateProvider">
  26. 26                 <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
  27. 27                     
  28. 28                     <property name="user">amoeba</property>
  29. 29                     
  30. 30                     <property name="password">password</property>
  31. 31                     
  32. 32                     <property name="filter">
  33. 33                         <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController">
  34. 34                             <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
  35. 35                         </bean>
  36. 36                     </property>
  37. 37                 </bean>
  38. 38             </property>
  39. 39            
  40. 40         </service>
  41. 41         
  42. 42         <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
  43. 43            
  44. 44             <!-- proxy server client process thread size -->
  45. 45             <property name="executeThreadSize">128</property>
  46. 46            
  47. 47             <!-- per connection cache prepared statement size  -->
  48. 48             <property name="statementCacheSize">500</property>
  49. 49            
  50. 50             <!-- default charset -->
  51. 51             <property name="serverCharset">utf8</property>
  52. 52            
  53. 53             <!-- query timeout( default: 60 second , TimeUnit:second) -->
  54. 54             <property name="queryTimeout">60</property>
  55. 55         </runtime>
  56. 56         
  57. 57     </proxy>
  58. 58     
  59. 59     <!--
  60. 60         Each ConnectionManager will start as thread
  61. 61         manager responsible for the Connection IO read , Death Detection
  62. 62     -->
  63. 63     <connectionManagerList>
  64. 64         <connectionManager name="defaultManager" class="com.meidusa.toolkit.net.MultiConnectionManagerWrapper">
  65. 65             <property name="subManagerClassName">com.meidusa.toolkit.net.AuthingableConnectionManager</property>
  66. 66         </connectionManager>
  67. 67     </connectionManagerList>
  68. 68     
  69. 69         <!-- default using file loader -->
  70. 70     <dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader">
  71. 71         <property name="configFile">${amoeba.home}/conf/dbServers.xml</property>
  72. 72     </dbServerLoader>
  73. 73     
  74. 74     <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
  75. 75         <property name="ruleLoader">
  76. 76             <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
  77. 77                 <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
  78. 78                 <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
  79. 79             </bean>
  80. 80         </property>
  81. 81         <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
  82. 82         <property name="LRUMapSize">1500</property>
  83. 83         <property name="defaultPool">slave1</property>
  84. 84         <property name="writePool">master</property>
  85. 85         <property name="readPool">slave1</property>
  86. 86         <property name="needParse">true</property>
  87. 87     </queryRouter>
  88. 88 </amoeba:configuration>
复制代码

amoeba.xml文件中需要配置的地方也不多,首先要配置的是service标签,其中需要配置的地方有三个port,user,password。这里的端口,用户名和密码其实就是为了虚拟出一个mysql链接做准备的(非真实,amoeba服务器可以不安装真实的mysql数据库),端口默认的事8066,可以修改但是不要跟现有的端口冲突,用户名和密码是客户端连接amoeba虚拟出来的mysql连接的用户名密码,和之前mysql数据库创建给amoeba的用户账号不同。在这里有一个注释掉的ipAddress属性,如果Amoeba所在的服务器在多个网络环境内你可以定义该机器的其中一个IP来指定Amoeba所服务的网络环境,但是如果设置为127.0.0.1将导致其他机器无法访问Amoeba的服务。
之后配置queryRouter标签,这是amoeba真正实现读写分离所产生作用的地方,之前的配置都是为了该处做准备。
该处有三个地方需要我们配置,首先是defaultPool,一些除了SELECT\UPDATE\INSERT\DELETE的语句都会在defaultPool执行。
之后是writePool,这里是配置写库也就是主数据库,在这里是前面dbServer.xml中配置的master。
resdPool配置的是读库,我这里是slave1,如果读库有多个这里可以填读池,也就是我在dbServer.xml中注释掉的那个dbServer配置的信息。在这里就完成了读写分离(主写从读)的配置。我的配置中是把写操作限制在了master中,把读限制在了slave中,如果我把defaultPool改成master的话那么读操作就会在master和slave之间做负载均衡了。

四、配置jvm运行参数
运行在jdk1.7环境中的amoeba要求xss参数必须大于228才能启动JVM
所以在amoeba安装目录下的jvm.properties文件中进行参数设置:
  1. 1 # app名字
  2. 2 APP_NAME=Amoeba-MySQL
  3. 3
  4. 4 # app版本号
  5. 5 APP_VERSION=3.0.0-beta
  6. 6
  7. 7 # 日志输出路径,log4j中可引用参数 ${project.output}
  8. 8
  9. 9 APP_OUTPUT_PATH=$PROJECT_HOME/logs
  10. 10
  11. 11 # 应用程序的PID文件存放路径,    默认存放在: ${project.home}/${APP_NAME}.pid
  12. 12
  13. 13 #APP_PID_PATH=/temp/logs/$APP_NAME
  14. 14
  15. 15
  16. 16 # 控制台输出到日志文件
  17. 17
  18. 18 APP_CONSOLE_LOG=$APP_OUTPUT_PATH/console.log
  19. 19
  20. 20
  21. 21 # 程序相关的配置参数
  22. 22
  23. 23 #APP_OPTIONS="-DmyParam=value1 -DmyParam2=value2"
  24. 24
  25. 25 # 启动参数  
  26. 26
  27. 27 #APP_ARGS="args0 "
  28. 28
  29. 29
  30. 30 # JVM相关的参数,包括内存配置、垃圾回收策略
  31. 31
  32. 32 JVM_OPTIONS="-server -Xms512m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"
  33. 33
  34. 34
  35. 35 # 应用程序忽略的信号列表,以逗号分割,程序shutdown的信号为15(可用 kill -15 pid 可让程序文明的shutdown,请不要在这儿填15)
  36. 36
  37. 37 IGNORE_SIGNALS=1,2
复制代码

如上所有的配置工作就已经完成了,可以看出amoeba所需的全部配置工作还是比较少的。
启动amoeba:
启动脚本在amoeba安装目录的bin目录下运行lancher:
  1. root@iZ25j1wvn7pZ:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin# ./launcher
  2. 2016-12-12 21:38:05,748 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA
  3. log4j:WARN ip access config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/access_list.conf
  4. 2016-12-12 21:38:06,037 INFO  net.ServerableConnectionManager - Server listening on /127.0.0.1:8066.
  5. 2016-12-12 22:14:44 [INFO] Project Name=Amoeba-MySQL, PID=2596 , System shutdown ....
  6. 2016-12-12 22:14:48 [INFO] Project Name=Amoeba-MySQL, PID=3324 , starting...
  7. log4j:WARN log4j config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/log4j.xml
  8. 2016-12-12 22:14:49,405 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA
  9. log4j:WARN ip access config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/access_list.conf
  10. 2016-12-12 22:14:49,664 INFO  net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.
  11. 2016-12-14 15:02:14 [INFO] Project Name=Amoeba-MySQL, PID=3324 , System shutdown ....
  12. 2016-12-14 15:02:20 [INFO] Project Name=Amoeba-MySQL, PID=12246 , starting...
  13. log4j:WARN log4j config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/log4j.xml
  14. 2016-12-14 15:02:20,955 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA
  15. log4j:WARN ip access config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/access_list.conf
  16. 2016-12-14 15:02:21,224 INFO  net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.
复制代码


运行结果如上所示表示启动成功。
之后可以通过amoeba连接到数据库,连接信息如下:
  1. root@iZ25j1wvn7pZ:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin# mysql -h182.92.172.80 -P8066 -uamoeba -ppassword
  2. Welcome to the MySQL monitor.  Commands end with ; or \g.
  3. Your MySQL connection id is 2049945506
  4. Server version: 5.1.45-mysql-amoeba-proxy-3.0.4-BETA (Ubuntu)
  5. Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
  6. Oracle is a registered trademark of Oracle Corporation and/or its
  7. affiliates. Other names may be trademarks of their respective
  8. owners.
  9. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  10. mysql>
复制代码

五、amoeba服务测试
从连接的server version 可以看出连接数据可的实例是amoeba-proxy实例不是mysql实例,这样就表示可以通过amoeba的访问账户连接amoeba服务了。之后就可以进行测试了,首先向数据库中添加一条记录,可以看见数据同时更新到master和slave中,主从同步功能是可以用的。之后在slave上停止slave服务,再通过amoeba写入数据,这时amoeba重新读出的数据就没有新插入的数据了,因为主从同步功能已经关掉了,写入的数据在master中,没有同步到slave中,而amoeba读数据是从slave中读取的,因此没有新加入的数据。之后打开slave的同步服务,再在amoeba中读取就可以读到之前添加的数据了。整体测试下来就保证了amoeba实现了读写分离功能。

参考资料:
mysql基于amoeba的读写分离
MySQL基于amoeba的读写分离及负载均衡

CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻

通过Amoeba对一个数据库实例进行操作
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复

使用道具 举报

发布主题 上个主题 下个主题 快速回复 返回列表 官方QQ群
在线客服
客 服 中 心
群 机 器 人
网站二维码
收 起 客 服

QQ|Archiver|手机版|小黑屋|Anycodes ( ICP14002806Anycodes在线编程

GMT+8, 2018-11-15 04:44 , Processed in 2.368708 second(s), 65 queries .

Powered by Anycodes

© 2001-2013 吉林市群龙科技有限公司 Inc.

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