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

背景

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

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

环境准备

部署架构

Mycat和Atlas分库分表安装、配置指南_第1张图片

部署环境

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账号和资源配置


<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
    <property name="useSqlStat">0property>  
    <property name="useGlobleTableCheck">0property>  
    <property name="sequnceHandlerType">2property>
    <property name="processorBufferPoolType">0property>
    <property name="serverPort">8066property>
    <property name="managerPort">9066property> 
    <property name="idleTimeout">300000property> 
    <property name="bindIp">0.0.0.0property> 
    <property name="processorExecutor">32property>    
    <property name="handleDistributedTransactions">0property>
    <property name="useOffHeapForMerge">1property>
    <property name="memoryPageSize">1mproperty>
    <property name="spillsFileBufferSize">1kproperty>
    <property name="useStreamOutput">0property>
    <property name="systemReserveMemorySize">384mproperty>
    <property name="useZKSwitch">trueproperty>
    system>

    <user name="root">
        <property name="password">123456property>
        <property name="schemas">testdbproperty>
    user>

    <user name="user">
        <property name="password">123456property>
        <property name="schemas">testdbproperty>
        <property name="readOnly">trueproperty>
    user>
mycat:server>

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

schema.xml逻辑库配置



<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">
        
        <property name="count">4property>
    function>
......

表示id % 4 = 路由到对应逻辑库上(dbp1|dbp2|dbp3|dbp4)
Mycat和Atlas分库分表安装、配置指南_第2张图片

成功执行一条SQL语句:
Mycat和Atlas分库分表安装、配置指南_第3张图片

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:
Mycat和Atlas分库分表安装、配置指南_第4张图片

执行SQL Atlas:
Mycat和Atlas分库分表安装、配置指南_第5张图片

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

你可能感兴趣的:(数据库中间件)