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

来源:互联网 发布:玩客云京东抢购软件 编辑:程序博客网 时间:2024/05/15 08:32

背景

数据库中间件选型思考
官网上安装、配置信息零散,需要使用者收集整理信息,在理解基础上正确配置,才能保证运行成功。这个工作比较耗时,希望读者看到此博客能快速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 = useradmin-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:3306daemon = truekeepalive = false#libevent线程数配置event-threads = 32log-level = error#日志路径log-path = /usr/local/mysql-proxy/logsql-log = OFF#代理端口配置,用于操作数据库proxy-address = 0.0.0.0:1234#管理端口配置,用于管理资源,监控,系统信息操作、查看等admin-address = 0.0.0.0:2345charset = UTF8wait-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, 1groups = 0,1,2,3[group-0]# masterproxy-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 0