主要配置文件说明
1)amoeba.xml
定义客户端如何连接amoeba等基础信息
2)dbServers.xml
Amoeba作为数据库代理层,它一定会和很多数据库保持通信,因此它必须知道由它代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等
3)rule.xml
Amoeba为完成数据切分提供了完善的切分规则配置,为了了解如何分片数据、如何将数据库返回的数据整合,它必须知道切分规则
4)functionMap.xml
当我们书写SQL来操作数据库的时候,常常会用到很多不同的数据库函数,比如:UNIX_TIMESTAMP()、SYSDATE()等等。这些函数如何被Amoeba解析呢?functionMap.xml描述了函数名和函数处理的关系
5)ruleFunctionMap.xml
对rule.xml进行配置时,会用到一些我们自己定义的函数,比如我们需要对用户ID求HASH值来切分数据,这些函数在ruleFunctionMap.xml中定义
6)access_list.conf
制定一些可访问以及拒绝访问的主机IP地址
7)log4j.xml
配置输出日志级别以及方式,配置方法使用log4j的文件格式
配置案例
目标:
使用amoeba代理一个mysql,通过客户端操作amoeba,验证mysql是否被成功代理
操作:
1)在 dbServers.xml 中配置mysql的连接信息
编辑 $AMOEBA_HOME/conf/dbServers.xml
找到节点 <dbServer name="abstractServer" abstractive="true">
修改下面的 port、schema(要连接的数据库名称)、user、password 属性值为mysql的连接信息
2)在 amoeba.xml 中配置客户端连接 amoeba 的连接信息
编辑 $AMOEBA_HOME/conf/amoeba.xml
找到 name="authenticateProvider" 的 property 节点,自定义设置下面的 user 和 password 属性值,用于客户端的连接信息
3)测试
使用 amoeba.xml 中配置的信息连接数据,示例:
$ mysql -uroot -p111111 -h127.0.0.1 -P8066
8066是amoeba的默认连接端口
连接成功后进入我们熟悉的mysql命令行,通过 Server version 信息项可以看出是连接到了 amoeba
Server version: 5.1.45-mysql-amoeba-proxy-3.0.4-BETA MySQL Community Server (GPL)
在命令行中可以对数据库添加一条测试数据,然后退出 amoeba,再登陆真正的mysql进行验证
配置文件结构说明
1)dbServers.xml
其中定义了多个 dbServer 节点,之前修改的名为 abstractServer 的dbServer节点,是一个抽象节点,是用来定义一些公共信息的,例如连接多个mysql时的用户名密码,和每个mysql连接池的基本参数
定义好了abstractServer后,就可以添加真实的 dbServer 配置了,可以继承 abstractServer 的定义,然后只需配置好自己独特的信息,例如:
<dbServer name="server1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">127.0.0.1</property>
</factoryConfig>
</dbServer>
真实的多个mysql配置好后,还可以把某几个mysql配置为一个虚拟的dbServer,例如有多个从服务器,都是用于读取数据的,可以把他们放在一起,定义为一个读服务器,当amoeba接收到读请求时,就可以直接分配给这个虚拟的读服务器,至于实际访问哪个从服务器,是虚拟读服务器内部协商决定的,例如:
<dbServer name="multiPool" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>
<!-- Separated by commas,such as: server1,server2,server1 -->
<property name="poolNames">server1,server2</property>
</poolConfig>
</dbServer>
2)amoeba.xml
amoeba对外就是一个mysql服务器,所以有一个 server 节点,用来配置客户端连接信息
amoeba需要知道各个mysql的信息,通过 dbServerLoader 节点指定从哪儿加载 dbServers.xml
queryRouter节点用来指定sql路由规则,例如写操作使用哪个dbServer,读操作使用哪个dbServer