Amoeba配置读写分离

Amoeba配置读写分离读写分离配置本想采用 MysqlProxy 来实现读写分离 奈何其使用的 lua 脚本着实让人头痛 最后决定采用国人开发的开源数据库代理中间件 Amoeba 使用 Amoeba 只需要简单的 xml 配置 就可以很容易地实现读写分离 Amoeba 处于应用程序和数据库服务器之间 充当一个中间代理层 其支持负载均衡 高可用性 Query 过滤 读写分离 可路由相关的 query 到目标数据库 可并发请求多

读写分离配置

本想采用Mysql Proxy来实现读写分离,奈何其使用的lua脚本着实让人头痛,最后决定采用国人开发的开源数据库代理中间件Amoeba。使用Amoeba,只需要简单的xml配置,就可以很容易地实现读写分离。

Amoeba处于应用程序和数据库服务器之间,充当一个中间代理层。其支持负载均衡、高可用性、Query过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。功能很强大。

Amoeba默认的端口为8066,实现了Mysql协议。应用程序中只需要修改一个数据库连接就可以实现采用Amoeba来代理数据库访问。比如:java应用中,

假如你原来的jdbc连接字符串为:jdbc:mysql://192.168.168.42:3306/minishop,那么现在,你想

使用Amoeba作为数据库访问代理,则

只需要将上面连接字符串改为如下(假如Amoeba所在机子IP为192.168.168.88):jdbc:mysql://192.168.168.88:8066/minishop。

Amoeba透明性做的很赞。

主要还是配置Amoeda,但是配置也是相当的简单。基本

只需要配置两个文件:

1.conf\dbServers.xml

2.conf\amoeba.xml

配置中各项的含义,可以参考amoeda中文指南,这里不做过多解释。仅记录下配置。

dbServers.xml主要配置

[html]  view plain   copy

  1. <amoeba:dbServers xmlns:amoeba=“http://amoeba.meidusa.com/”>  
  2.   
  3.         
      
  4.             <property name=“port”>3306
    property>  
  5.               
  6.             
      
  7.             <property name=“schema”>minishop
    property>  
  8.               
  9.             
      
  10.             <property name=“user”>chenjie
    property>  
  11.               
  12.             
      
  13.             <property name=“password”>chenjie
    property>  
  14.   
  15.         
    factoryConfig>  
  16.   
  17.         <poolConfig class=“com.meidusa.amoeba.net.poolable.PoolableObjectPool”>  
  18.             <property name=“maxActive”>500
    property>  
  19.             <property name=“maxIdle”>500
    property>  
  20.             <property name=“minIdle”>10
    property>  
  21.             <property name=“minEvictableIdleTimeMillis”>
    property>  
  22.             <property name=“timeBetweenEvictionRunsMillis”>
    property>  
  23.             <property name=“testOnBorrow”>true
    property>  
  24.             <property name=“testWhileIdle”>true
    property>  
  25.         
    poolConfig>  
  26.     
    dbServer>  
  27.   
  28.     <dbServer name=“master”  parent=“abstractServer”>  
  29.         <factoryConfig>  
  30.             
      
  31.             <property name=“ipAddress”>192.168.168.253
    property>  
  32.         
    factoryConfig>  
  33.     
    dbServer>  
  34.   
  35.     <dbServer name=“slave1”  parent=“abstractServer”>  
  36.         <factoryConfig>  
  37.             
      
  38.             <property name=“ipAddress”>192.168.168.119
    property>  
  39.         
    factoryConfig>  
  40.     
    dbServer>  
  41.   
  42.     <dbServer name=“slave2”  parent=“abstractServer”>  
  43.         <factoryConfig>  
  44.             
      
  45.             <property name=“ipAddress”>192.168.168.251
    property>  
  46.   
  47.         
    factoryConfig>  
  48.     
    dbServer>  
  49.       
  50.     <dbServer name=“multiPool” virtual=“true”>  
  51.         <poolConfig class=“com.meidusa.amoeba.server.MultipleServerPool”>  
  52.             
      
  53.             <property name=“loadbalance”>1
    property>  
  54.               
  55.             
      
  56.             <property name=“poolNames”>slave1,slave2
    property>  
  57.         
    poolConfig>  
  58.     
    dbServer>  
  59.           

  60. amoeba:dbServers>  

amoeba.xml配置:

[html]  view plain   copy

  1. <amoeba:configuration xmlns:amoeba=“http://amoeba.meidusa.com/”>  
  2.   
  3.     <proxy>  
  4.       
  5.         
      
  6.         <service name=“Amoeba for Mysql” class=“com.meidusa.amoeba.net.ServerableConnectionManager”>  
  7.             
      
  8.             <property name=“port”>8066
    property>  
  9.               
  10.             
      
  11.   
  12.             <property name=“ipAddress”>192.168.168.253
    property>  
  13.   
  14.               
  15.             <property name=“manager”>${clientConnectioneManager}
    property>  
  16.               
  17.             <property name=“connectionFactory”>  
  18.                 <bean class=“com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory”>  
  19.                     <property name=“sendBufferSize”>128
    property>  
  20.                     <property name=“receiveBufferSize”>64
    property>  
  21.                 
    bean>  
  22.             
    property>  
  23.               
  24.             <property name=“authenticator”>  
  25.                 <bean class=“com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator”>  
  26.                       
  27.                     <property name=“user”>chenjie
    property>  
  28.                       
  29.                     <property name=“password”>chenjie
    property>  
  30.                       
  31.                     <property name=“filter”>  
  32.                         <bean class=“com.meidusa.amoeba.server.IPAccessController”>  
  33.                             <property name=“ipFile”>${amoeba.home}/conf/access_list.conf
    property>  
  34.                         
    bean>  
  35.                     
    property>  
  36.                 
    bean>  
  37.             
    property>  
  38.               
  39.         
    service>  
  40.           
  41.         
      
  42.         <service name=“Amoeba Monitor Server” class=“com.meidusa.amoeba.monitor.MonitorServer”>  
  43.             
      
  44.             
      
  45.             <property name=“ipAddress”>127.0.0.1
    property>  
  46.             <property name=“daemon”>true
    property>  
  47.             <property name=“manager”>${clientConnectioneManager}
    property>  
  48.             <property name=“connectionFactory”>  
  49.                 <bean class=“com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory”>
    bean>  
  50.             
    property>  
  51.               
  52.         
    service>  
  53.           
  54.         <runtime class=“com.meidusa.amoeba.mysql.context.MysqlRuntimeContext”>  
  55.             
      
  56.             <property name=“readThreadPoolSize”>20
    property>  
  57.               
  58.             
      
  59.             <property name=“clientSideThreadPoolSize”>30
    property>  
  60.               
  61.             
      
  62.             <property name=“serverSideThreadPoolSize”>30
    property>  
  63.               
  64.             
      
  65.             <property name=“statementCacheSize”>500
    property>  
  66.               
  67.             
      
  68.             <property name=“queryTimeout”>60
    property>  
  69.         
    runtime>  
  70.           
  71.     
    proxy>  
  72.       
  73.     
      
  74.     <dbServerLoader class=“com.meidusa.amoeba.context.DBServerConfigFileLoader”>  
  75.         <property name=“configFile”>${amoeba.home}/conf/dbServers.xml
    property>  
  76.     
    dbServerLoader>  
  77.       
  78.     <queryRouter class=“com.meidusa.amoeba.mysql.parser.MysqlQueryRouter”>  
  79.         <property name=“ruleLoader”>  
  80.             <bean class=“com.meidusa.amoeba.route.TableRuleFileLoader”>  
  81.                 <property name=“ruleFile”>${amoeba.home}/conf/rule.xml
    property>  
  82.                 <property name=“functionFile”>${amoeba.home}/conf/ruleFunctionMap.xml
    property>  
  83.             
    bean>  
  84.         
    property>  
  85.         <property name=“sqlFunctionFile”>${amoeba.home}/conf/functionMap.xml
    property>  
  86.         <property name=“LRUMapSize”>1500
    property>  
  87.   
  88.         <property name=“defaultPool”>master
    property>  
  89.           
  90.   
  91.         <property name=“writePool”>master
    property>  
  92.         <property name=“readPool”>multiPool
    property>  
  93.   
  94.         <property name=“needParse”>true
    property>  
  95.     
    queryRouter>  

  96. amoeba:configuration> 
至此,Mysql主从热备和读写分离配置完毕。但是,具体应用到生产环境究竟如何,还有待测试和考察。后来测试一主多从,又加入了一台Mysql从数据库服务器,这就是为什么上面amoeba配置中多了一个IP为119的原因。








版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220183.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:03
下一篇 2026年3月17日 下午9:03


相关推荐

  • 如何实现股票自动化交易,甚至自动打板?

    如何实现股票自动化交易,甚至自动打板?闲聊曾经比较喜欢玩手机游戏 在某个手游板砖了无数个日月后 突然一天牛顿的宁夏哈密瓜砸爆了我的头 我为什么要手动玩游戏 一个开发者应该有开发者玩游戏的尊严 自动化 因此我完成了一个脚本来玩游戏来解放双手 在一个小圈子我突然冒出来 我是程序员 然后大家都惊呆了 原来经常讨论的程序猿就在身边 同时我共享了自己的脚本 得到了大家的认可 大佬 收下我的膝盖 程序猿无所不能 不禁有了一丝作

    2025年12月7日
    4
  • 真正解决方案:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

    真正解决方案:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException今天在使用JDK9.0环境下使用Hibernate时候出现了这个错误,错误日志如下:故障原因:JAXBAPI是javaEE的API,因此在javaSE9.0中不再包含这个Jar包。java9中引入了模块的概念,默认情况下,JavaSE中将不再包含javaEE的Jar包而在java6/7/8时关于这个API都是捆绑在一起的…

    2022年7月21日
    15
  • 基于matlab的声源定位系统_盲源分离算法

    基于matlab的声源定位系统_盲源分离算法(转载)基于TDOA声源定位算法仿真–MATLAB仿真转载自:https://blog.xxcxw.cn/archives/28声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUSIC和DOA算法并不适用该场景,本仿真主要用TDOA算法进行定位。常用的阵列信号定位算法主要有三大类:基于高分辨率谱估计的定位技术、基于可控波束形成(Beamforming)的定位技术和基于TDOA的定位技术,以上三种算法在阵列信号处理中,尤其是移动通信的阵列信号处理中都有广泛的应用。但是声音信号与传统的电磁

    2026年2月15日
    4
  • 【控制】人工势场法及人工势场函数「建议收藏」

    【控制】人工势场法及人工势场函数「建议收藏」人工势场法是由Khatib提出的一种机器人路径规划算法。该算法将目标和障碍物分别看做对机器人有引力和斥力的物体,机器人沿引力与斥力的合力来进行运动。该法结构简单,便于低层的实时控制,在实时避障和平滑的轨迹控制方面,得到了广泛应用,其不足在于存在局部最优解,容易产生死锁现象,因而可能使移动机器人在到达目标点之前就停留在局部最优点。From:人工势场法1.概述我们打两个比方来说明人工势场法的作用机理。首先,我们把构型空间比作一个电势场平面,机器人(的当前构型)比作空间中一点。如果让机器人的起点和障碍物

    2022年6月29日
    39
  • linux中文镜像文件iso下载地址,linux系统镜像iso文件下载

    linux中文镜像文件iso下载地址,linux系统镜像iso文件下载Asp&period;NetCore–基于声明的授权翻译如下:当创建身份时,其可以被分配由可信方发布的一个或多个声明.索赔是名称值对,表示主题是什么,而不是主体可以做什么.例如,您可能有驾驶执照,由当地驾驶执照颁发.您的驾驶执照上有您的出生日期…优秀IT技术文章集&lpar;最新&rpar;&lpar;高质量&rpar;作者:赵磊博客:h…

    2022年5月10日
    53
  • 【EmguCV】EmguCV各种调用

    【EmguCV】EmguCV各种调用后续将不定期补充在使用 EmguCV 过程中的一些笔记 如何调用 api 实现相应功能 1 查找对应的轮廓 IntPtrDyncon newIntPtr 存放检测到的图像块的首地址 IntPtrDynsto CvInvoke cvCreateMemS 0 开辟内存区域 intm 88 intn CvInvoke cvFindCont

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号