Amoeba

1.介绍

Amoeba是mysql代理,增强mysql。类似的产品还有MyCat (mysql代理)

2.资源:点击打开链接c82k

3.准备:amoeba是基于java的所以必须有jdk

4.上传amoeba

5.解压tar包

6.配置文件


amoeba配置文件两个

dbServers.xml  多个数据源,多个数据库

amoeba.xml 启动参数,谁负责读,谁负责写,谁负责负载均衡

##################################dbServers.xml-start######################################

<?xml version="1.0"encoding="gbk"?>

 

<!DOCTYPE amoeba:dbServers SYSTEM"dbserver.dtd">

<amoeba:dbServersxmlns:amoeba="http://amoeba.meidusa.com/">

 

        <!--

           EachdbServer needs to be configured into a Pool,

           Ifyou need to configure multiple dbServer with load balancing that can besimplified by the following configuration:

            add attribute with name virtual ="true" in dbServer, but the configuration does not allow the elementwith name factoryConfig

            such as 'multiPool' dbServer  

       -->

      

    <dbServername="abstractServer" abstractive="true"><--建立抽象server动态代理-->

       <factoryConfigclass="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">

           <propertyname="manager">${defaultManager}</property>

           <propertyname="sendBufferSize">64</property>

           <propertyname="receiveBufferSize">128</property>

             

           <!--mysql port ,所有的主从复制的数据库的用户名和密码都要用一套-->

           <propertyname="port">3306</property>

          

           <!--mysql schema默认的要去检查schema,一般是test的数据库默认不变 -->

           <propertyname="schema">test</property>

          

           <!--mysql user,用户名默认都是root -->

           <propertyname="user">root</property>

          

           <!--  mysql password ,密码是root-->

           <propertyname="password">root</property>

          

       </factoryConfig>

 

       <poolConfigclass="com.meidusa.amoeba.net.poolable.PoolableObjectPool">

           <propertyname="maxActive">500</property>

           <propertyname="maxIdle">500</property>

           <propertyname="minIdle">10</property>

           <propertyname="minEvictableIdleTimeMillis">600000</property>

           <propertyname="timeBetweenEvictionRunsMillis">600000</property>

           <propertyname="testOnBorrow">true</property>

           <propertyname="testOnReturn">true</property>

           <propertyname="testWhileIdle">true</property>

       </poolConfig>

    </dbServer>

 

    <dbServername="master"  parent="abstractServer"><-默认继承了上面的abstractServer,所以是公用一套上面的配置--->

       <factoryConfig>

           <!--mysql ip 主的ip地址-->

           <propertyname="ipAddress">192.168.170.43</property>

       </factoryConfig>

    </dbServer>

   

    <dbServername="slave"  parent="abstractServer">

       <factoryConfig>

           <!--mysql ip -->

           <propertyname="ipAddress">192.168.170.85</property>

       </factoryConfig>

    </dbServer>

   

    <dbServername="multiPool" virtual="true"><--多个池-->

       <poolConfigclass="com.meidusa.amoeba.server.MultipleServerPool">

           <!--Load balancing strategy(负载均衡算法): 1=ROUNDROBIN轮询 , 2=WEIGHTBASED权重 , 3=HA高可用-->

           <propertyname="loadbalance">1</property>

          

           <!--Separated by commas,such as: server1,server2,server1配置那个数据库是负责读数据的 -->

           <propertyname="poolNames">master,slave</property>

       </poolConfig>

    </dbServer>

      

</amoeba:dbServers>

##################################dbServers.xml-end######################################

##################################amoeba.xml-end######################################

<?xml version="1.0"encoding="gbk"?>

 

<!DOCTYPE amoeba:configuration SYSTEM"amoeba.dtd">

<amoeba:configurationxmlns:amoeba="http://amoeba.meidusa.com/">

 

    <proxy>

   

       <!--service class must implements com.meidusa.amoeba.service.Service -->

       <servicename="Amoeba for Mysql"class="com.meidusa.amoeba.net.ServerableConnectionManager">

           <!--port ,amoeba的端口-->

           <propertyname="port">8066</property>

          

           <!--bind ipAddress ,绑定地址,谁可以访问amoeba,如果要让所有的主机都可以访问,就不需要设置-->

           <!--

           <propertyname="ipAddress">127.0.0.1</property>

            -->

          

           <propertyname="manager">${clientConnectioneManager}</property>

          

           <propertyname="connectionFactory">

              <beanclass="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">

                  <propertyname="sendBufferSize">128</property>

                  <propertyname="receiveBufferSize">64</property>

              </bean>

           </property>

          

           <propertyname="authenticator">

              <beanclass="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">

                 

                  <propertyname="user">root</property><-访问amoeba的用户名和密码--->

                 

                  <propertyname="password">root</property>

                 

                  <propertyname="filter">

                     <beanclass="com.meidusa.amoeba.server.IPAccessController">

                         <propertyname="ipFile">${amoeba.home}/conf/access_list.conf</property>

                     </bean>

                  </property>

              </bean>

           </property>

          

       </service>

      

       <!--server class must implements com.meidusa.amoeba.service.Service 阿米巴监控的,不需要监控默认不修改-->

       <servicename="Amoeba Monitor Server"class="com.meidusa.amoeba.monitor.MonitorServer">

           <!--port -->

           <!--  default value: random number

           <propertyname="port">9066</property>

           -->

           <!--bind ipAddress -->

           <propertyname="ipAddress">127.0.0.1</property>

           <propertyname="daemon">true</property>

           <propertyname="manager">${clientConnectioneManager}</property>

           <propertyname="connectionFactory">

              <beanclass="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean>

           </property>

          

       </service>

      

       <runtimeclass="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">

           <!--proxy server net IO Read thread size这些事实时运行的配置,默认不用改 -->

           <propertyname="readThreadPoolSize">20</property>

          

           <!--proxy server client process thread size -->

           <propertyname="clientSideThreadPoolSize">30</property>

          

           <!--mysql server data packet process thread size -->

           <propertyname="serverSideThreadPoolSize">30</property>

          

           <!--per connection cache prepared statement size -->

           <propertyname="statementCacheSize">500</property>

          

           <!--query timeout( default: 60 second , TimeUnit:second) -->

           <propertyname="queryTimeout">60</property>

       </runtime>

      

    </proxy>

   

    <!--

       EachConnectionManager will start as thread

       managerresponsible for the Connection IO read , Death Detection

    -->

    <connectionManagerList>

       <connectionManagername="clientConnectioneManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">

           <propertyname="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property>

           <!--

             default value is avaliable Processors

           <propertyname="processors">5</property>

            -->

       </connectionManager>

       <connectionManagername="defaultManager"class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">

           <propertyname="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>

          

           <!--

             default value is avaliable Processors

           <propertyname="processors">5</property>

            -->

       </connectionManager>

    </connectionManagerList>

   

       <!--default using file loader 指定刚刚配置过的dbServer.xml文件,将配置文件读入-->

    <dbServerLoaderclass="com.meidusa.amoeba.context.DBServerConfigFileLoader">

       <propertyname="configFile">${amoeba.home}/conf/dbServers.xml</property>

    </dbServerLoader>

   

    <queryRouterclass="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">

       <propertyname="ruleLoader">

           <beanclass="com.meidusa.amoeba.route.TableRuleFileLoader">

              <propertyname="ruleFile">${amoeba.home}/conf/rule.xml</property>

              <propertyname="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>

           </bean>

       </property>

       <propertyname="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>

       <propertyname="LRUMapSize">1500</property>

       <propertyname="defaultPool">master</property><--默认池只有master能写,所以要配主-->

      

 

       <propertyname="writePool">master</property><--master能写,所以要配主-->

       <propertyname="readPool">multiPool</property><--dbServer.xml中配置过能写的数据库,把他的属性写过来-->

 

       <propertyname="needParse">true</property>

    </queryRouter>

</amoeba:configuration>


##################################amoeba.xml-end######################################

7. 打开8066端口

/sbin/iptables -I INPUT -p tcp --dport 8066 -j ACCEPT

/etc/rc.d/init.d/iptables save      #修改生效

/etc/init.d/iptables status         #查看配置

8.启动和关闭amoeba

启动:./bin/amoeba start 或 ./bin/amoeba start &


关闭:

./bin/amoeba stop


9.启动报错


是因为jdk默认(128k)的栈太小了,而根据上述报错,栈需要228k才行

默认配置Xss比较小128k,启动时提示太小,则修改/amoeba/bin/amoeba文件,修改为256k即可。

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

再次启动,ok


检查是否启动成功


10.使用第三方软件链接amoeba


使用主从复制的bug来检查是链接到了主还是从,将主数据库和从数据库中各添加一条独特的数据

11.如果链接上amoeba后发现查不出数据


根据状态可知主从配置失败了,需要从新配置


从错误可知,主键重了,重新配置

1)将从停了

2)到主上查看位置pos


重新执行挂接命令


启动从服务


验证


然后根据那个bug来看,经过amoeba链接的是从还是主


上图链接的是主

修改的话修改的是主数据库


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Amoeba:分布式数据库Proxy解决方案 随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用 已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:集中式处理,势必造成性 能瓶颈;应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性 不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式数 据库将向分布式数据库发展。 分布式数据库系统的优点: 1、降低费用。分布式数据库在地理上可以式分布的。其系统的结构符合这种分布的要求。允许用 户在自己的本地录用、查询、维护等操作,实行局部控制,降低通信代价,避免集中式需要更高要求 的硬件设备。而且分布式数据库在单台机器上面数据量较少,其响应速度明显提升。 2、提高系统整体可用性。避免了因为单台数据库的故障而造成全部瘫痪的后果。 3、易于扩展处理能力和系统规模。分布式数据库系统的结构可以很容易地扩展系统,在分布式数 据库中增加一个新的节点,不影响现有系统的正常运行。这种方式比扩大集中式系统要灵活经济。在 集中式系统中扩大系统和系统升级,由于有硬件不兼容和软件改变困难等缺点,升级的代价常常是昂 贵和不可行的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值