用amoeba做mysql数据水平切分与垂直切分

总结示例如下

192.168.17.131 amoeba 应用访问结点

192.168.17.133 作为键值奇数切分DB

192.168.17.134 作为键值偶数切分DB

配置如下

一、配置好java运行环境,就不用记录了

二、安装amoeba

1.mkdir /usr/local/amoeba

2.tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba

3.几个关键的配置文件说明

<1.$AMOEBA_HOME/conf/dbServers.xml-------主机IP、端口、Amoeba使用的用户名和密码等

<2.$AMOEBA_HOME/conf/rule.xml--------------切分规则配置

<3.$AMOEBA_HOME/conf/functionMap.xml-----描述了函数名和函数处理的关系

<4.$AMOEBA_HOME/conf/ruleFunctionMap.xml-自己定义的函数

<5.$AMOEBA_HOME/conf/access_list.conf------可访问以及拒绝访问的主机IP地址

<6.$AMOEBA_HOME/conf/log4j.xml-------------输出日志级别以及方式,配置方法使用log4j的文件格式

三、在两台机器 上分别创建切入DB,tb

  create database db1;

  use db1;

  create datatable tb1(id int,name varchar(50));

   grant all on aaa.* to 'amoeba'@'192.168.17.131' identified by '123'; --授权

四、配置几个关键文件

<1.vim /usr/local/amoeba/conf/dbServers.xml

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

<property name="schema">db1</property>

<property name="user">amoeba</property>

<property name="password">123</property>

<dbServer name="server1"  parent="abstractServer">
  <factoryConfig>
    <property name="ipAddress">192.168.17.133</property>
  </factoryConfig>
</dbServer>

<dbServer name="server2"  parent="abstractServer">
<factoryConfig>
   <property name="ipAddress">192.168.17.134</property>
</factoryConfig>
</dbServer>

<2.vim /usr/local/amoeba/conf/amoeba.xml    --应用访问配置
<property name="user">amoeba</property>
<property name="password">123</property>

<3.vim /usr/local/amoeba/conf/rule.xml --定义数据切分的规则
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:rule SYSTEM "rule.dtd">

<amoeba:rule xmlns:amoeba="http://amoeba.meidusa.com/">
        <tableRule name="tb1" schema="db1" defaultPools="server1,server2">
                <rule name="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>

五、启动

bin/amoeba start

六、测试

insert into tb1(id,name)values(1,'1');--此数据进入了192.168.17.133

insert into tb1(id,name)values(2,'2');--此数据进入了192.168.17.134

---以上是水平切分

垂直切分待总结

原文地址:https://www.cnblogs.com/bobsoft/p/2742767.html