amoeba同时做读写分离和水平切分

1.      环境:

水平切分(即写服务器)的两台服务器:192.168.0.114:3307

                                                192.168.0.114:3308

读服务器:192.168.0.114:3309

采用在一台机器上创建多个mysql实例(上篇文章讲的就是怎么配置多个mysql实例的)的方法进行的实验,没办法,老板让做这个,但是又不给我机器。

2.      对amoeba.xml的配置:

在下面代码中:

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

                    <!-- port -->

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

                   

                   

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

的ipAddress中绑定amoeba服务器(即允许amoeba的机器)的IP,上面我的是192.168.0.109.

 

 

在下面代码中:

<propertyname="authenticator">

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

                                      

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

                                      

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

给出授权信息,即登陆amoeba的账号和密码,我的账户名是root,密码是hfut。

 

在下面代码中:

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

                    <!-- port -->

                    <!--  default value: random number

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

                    -->

                    <!-- bind ipAddress-->

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

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

增加monitor服务器的ip地址,我的是192.168.0.109.

 

好,其他不变。

 

3.对dbServers.xml的配置

对下面代码:

<dbServername="abstractServer" abstractive="true">

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

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

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

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

                            <!-- mysql ip-->

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

                           

                            <!-- mysql schema-->

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

                           

                            <!-- mysql user-->

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

                           

                           

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

                           

                   </factoryConfig>

这定义了虚拟的服务器属性,因为我用的服务器的ip都是一样的,只是端口不一样,和amoeba原配置文件不同,它的是端口一样儿ip地址不同,所以我按照我的需求进行配置,将共同的ip配置在这里。

增加三个server,代码如下:

<dbServername="server1" parent="abstractServer">

                   <factoryConfig>

                            <!-- mysql port-->

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

                   </factoryConfig>

         </dbServer>

        

         <dbServername="server2" parent="abstractServer">

                   <factoryConfig>

                            <!-- mysql port-->

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

                   </factoryConfig>

         </dbServer>

        

         <dbServername="server3" parent="abstractServer">

                   <factoryConfig>

                            <!-- mysql port-->

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

                   </factoryConfig>

         </dbServer>

4对rule.xml的配置

我的配置如下:

<?xmlversion="1.0" encoding="gbk"?>

<!DOCTYPEamoeba:rule SYSTEM "rule.dtd">

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

         <tableRulename="tenant" schema="test" defaultPools="server1,server2"readPools='server1,server2,server3'>

                  

                   <rulename="rule1" ruleResult="POOLNAME">

                            <parameters>id</parameters>

                  <expression><![CDATA[

                 var division = id % 2;

                 case division when 0 then'server1';

                               when 1 then'server2';

                 end case;

                    ]]></expression>

                           

                   </rule>

                  

         </tableRule>

        

</amoeba:rule>

关键是tableRule的属性,第一段红色代码,我分割的是数据库test的表tenant,用来写的是做水平切分的是server1和server2,用来读的服务器是server1,server2和server3. 第二段红色代码是水平切分的规则,id是表tenant的属性,当id%2为0时写到server1上,相反写到server2上。

5说明:

1)        通过Amoeba进行插入的时候,插入语句要这么写:

insert tenant(id,name)values(‘1’,’a’);

即表名tenant后面要加上完整的列名,values是复数的形式;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值