Mycat和Atlas分库分表安装、配置指南

背景

数据库中间件选型思考
官网上安装、配置信息零散,需要使用者收集整理信息,在理解基础上正确配置,才能保证运行成功。这个工作比较耗时,希望读者看到此博客能快速run起来。

网络博客上也有很多人写Mycat和Atlas,绝大多数是针对Mycat和Atlas读写分离场景配置的。对Atlas,奇虎360在GitHub上开源了2个版本,一个版本为纯代理版,支持分表功能,另一个为Sharding版本。本次配置分库分表场景。

环境准备

部署架构

部署架构图

部署环境

MySQL:申请4个节点配置相同(虚拟机或物理机都可以),每个节点创建一个数据库,名称相同都为dbproxy,接着每个库创建一个相同表sbtest1
Mycat:下载Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
Atlas:下载Atlas-sharding_1.0.1-el6.x86_64.rpm
创建一个表:sbtest1
sbtest1表结构为:

CREATE TABLE `sbtest1` (
  `id` int(10) unsigned NOT NULL,
  `k` int(10) unsigned NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_1` (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

sbtest1表结构为使用sysbench工具创建生成的,去掉了自增主键设置,后续就可以直接使用扩展版sysbench测试

中间件安装配置

Mycat安装配置

Mycat服务有2种配置方式,其一为在zookeeper上配置,启动后也会把内容写到*.xml几个文件中,其二是直接到*.xml修改配置,本次采用第二种方式简单方便。

安装

tar xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

配置

server.xml账号和资源配置
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
    <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
    <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->
    <property name="sequnceHandlerType">2</property>
    <property name="processorBufferPoolType">0</property>
    <property name="serverPort">8066</property>
    <property name="managerPort">9066</property> 
    <property name="idleTimeout">300000</property> 
    <property name="bindIp">0.0.0.0</property> 
    <property name="processorExecutor">32</property>    
    <property name="handleDistributedTransactions">0</property>
    <property name="useOffHeapForMerge">1</property>
    <property name="memoryPageSize">1m</property>
    <property name="spillsFileBufferSize">1k</property>
    <property name="useStreamOutput">0</property>
    <property name="systemReserveMemorySize">384m</property>
    <property name="useZKSwitch">true</property>
    </system>

    <user name="root">
        <property name="password">123456</property>
        <property name="schemas">testdb</property>
    </user>

    <user name="user">
        <property name="password">123456</property>
        <property name="schemas">testdb</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

Mycat会对数据库访问资源进行管理,有2种类型账号,分为管理员、普通用户;管理员负责中间件各种资源管理(后端数据库访问)、查看、分配等,普通用户只能对数据库进行DDL和DML操作。每个用户配置了访问具体数据库资源,由schemas参数决定,未配置则无法访问。

schema.xml逻辑库配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="testdb" checkSQLschema="false" sqlMaxLimit="10000" >
        <table name="sbtest1" primaryKey="id" dataNode="dn01,dn02,dn03,dn04" rule="mod-long" />
    </schema>

    <dataNode name="dn01" dataHost="dbp1" database="dbproxy" />
    <dataNode name="dn02" dataHost="dbp2" database="dbproxy" />
    <dataNode name="dn03" dataHost="dbp3" database="dbproxy" />
    <dataNode name="dn04" dataHost="dbp4" database="dbproxy" />

        <dataHost name="dbp1" maxCon="2000" minCon="1000" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                  <heartbeat>select user()</heartbeat>
                  <writeHost host="dbpHostM1" url="ip01:3306" user="zhitao" password="iyw_=EseXx94">
                  </writeHost>            
        </dataHost>

        <dataHost name="dbp2" maxCon="2000" minCon="1000" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                  <heartbeat>select user()</heartbeat>
                  <writeHost host="dbpHostM2" url="ip02:3306" user="zhitao" password="iyw_=EseXx94">
                  </writeHost>

        </dataHost> 

        <dataHost name="dbp3" maxCon="2000" minCon="1000" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                  <heartbeat>select user()</heartbeat>
                  <writeHost host="dbpHostM3" url="ip03:3306" user="zhitao" password="iyw_=EseXx94">
                  </writeHost>

        </dataHost>

        <dataHost name="dbp4" maxCon="2000" minCon="1000" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                  <heartbeat>select user()</heartbeat>
                  <writeHost host="dbpHostM4" url="ip04:3306" user="zhitao" password="iyw_=EseXx94">
                  </writeHost>
        </dataHost>
</mycat:schema>

以上配置了4个逻辑库,只有主库没配从库,如有需要读者可以加上,一个表sbtest1数据切分到4个逻辑库上。其中’rule=”mod-long”‘表示选择取模算法,对应下面的配置

rule.xml分片规则配置
......
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">4</property>
    </function>
......

表示id % 4 = 路由到对应逻辑库上(dbp1|dbp2|dbp3|dbp4)
数据分片规则

成功执行一条SQL语句:
成功执行一条SQL语句

Atlas安装配置

Atlas配置相对较简单,配置项和文件都比Mycat要少

安装

1.执行如下命令
sudo rpm –i Atlas-XX.el6.x86_64.rpm
默认安装目录:/usr/local/mysql-proxy
2.配置test.cnf
进入conf目录

[mysql-proxy]
admin-username = user
admin-password = 123456
#配置代理或读写分离主库配置
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
#proxy-backend-addresses = ip01:3306,ip02:3306

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#proxy-read-only-backend-addresses = readonlyIP01:3306,readonlyIP02:3306

#示例,配置代理主库配置
proxy-backend-addresses = ipxxx:3306

daemon = true
keepalive = false
#libevent线程数配置
event-threads = 32
log-level = error
#日志路径
log-path = /usr/local/mysql-proxy/log
sql-log = OFF
#代理端口配置,用于操作数据库
proxy-address = 0.0.0.0:1234
#管理端口配置,用于管理资源,监控,系统信息操作、查看等
admin-address = 0.0.0.0:2345
charset = UTF8
wait-timeout = 3600
#Atlas密码需要加密,安装Atlas进入bin目录,执行:./encrypt mysql数据库密码;生成加密串拷贝上去
pwds = zhitao:If2Il8Bd7YgWZ+vzsw3ZlQ==


[shardrule-0]
table = dbproxy.sbtest1
# sharding类型:range或hash,本次
type = hash  
# 分片字段名
shard-key = id
# 0:0-999,1:1000-1999 #分片的group,如果是range类型的sharding,则groups的格式是:group_id:id范围。如果是hash类型的sharding,则groups的格式是:group_id。例如groups = 0, 1
groups = 0,1,2,3

[group-0]
# master
proxy-backend-addresses=ip01:3306

[group-1]
proxy-backend-addresses=ip02:3306

[group-2]
proxy-backend-addresses=ip03:3306

[group-3]
proxy-backend-addresses=ip04:3306

登录Atlas:
登录Atlas

执行SQL Atlas:
执行SQL Atlas

注意:配置分库分表时,只有指定的分表才会执行shardrule流程,其他表走正常请求流程,所以要配置proxy-backend-addresses,从库配置视部署情况可选

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值