前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql分布式前端代理 - Amoeba最简配置案例

mysql分布式前端代理 - Amoeba最简配置案例

作者头像
dys
发布2018-04-02 15:51:04
7760
发布2018-04-02 15:51:04
举报
文章被收录于专栏:性能与架构

主要配置文件说明

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档