您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > mycat分库分表docker的实现教程
mycat分库分表docker的实现教程实验环境docker版本:Dockerversion1.13.1mycat版本:Mycat-server-1.6-RELEASE-jdk版本:jdk1.8mysql版本:mysql5.7linux版本:LinuxVM_0_12_centos3.10.0-862.3.2.el7.x86_64#1SMPMonMay2123:36:36UTC2018x86_64x86_64x86_64GNU/Linux实验目的实现mysql分库分表,本示例中将用户的消费记录表(user_consumption_record)分了三个库,对应三张表,三个库分别在不同的节点上,使用mycat做路由。使得对用用户来说,就好像在操作一个表。用户表(未做分库分表操作),是单表直接放到了其中一个节点上。实验结果展示构建实验所需的docker镜像我们所需要的镜像有两个,第一个是mysql的镜像,第二个是mycat的镜像,mysql的镜像,dockersearch一下可以找到很多可以用的,所以我们这边就不重复去自己构建了,显得麻烦。下面是我们使用的网上直接找的mysql镜像:下面我们开始构建我们需要的一个含jdk8的mycat1.6的镜像,构建所需的资源如下:下面是构建含jdk8的mycat1.6的镜像的Dockerfile?12345678910111213FROMdocker.io/centosCOPYmycat/jdk-8u171-linux-x64.tar.gz/usr/local/RUNtar-zxvf/usr/local/jdk-8u171-linux-x64.tar.gz-C/usr/local/ENVJAVA_HOME=/usr/local/jdk1.8.0_171ENVPATH=$PATH:$JAVA_HOME/binENVCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarCOPYmycat/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz/usr/local/RUNtar-zxvf/usr/local/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz-C/usr/local/ENVMYCAT_HOME=/usr/local/mycatRUNsource/etc/profileRUNsource~/.bash_profileCMD[/usr/local/mycat/bin/mycat,console]执行类似下面的命令,就可以生成我们需要的含jdk8的mycat1.6的镜像了(/home/wen这个是我的当前构建目录)?1dockerbuild-tcentos-jdk8-mycat1.6-fDockerfile/home/wen/编写mycat的sechma.xml文件mycat的server.xml、rule.xml都没改过,我这边就不贴出来了,这里面如果有一些标签的意义不理解的,那还是请百度把,本文就不讲解这些标签怎么使用了。?1234567891011121314!--?xmlversion=1.0?--mycat:schemaxmlns:mycat==falsename=TESTDBsqlmaxlimit=100!--autoshardingbyid(long)--tabledatanode=dn1name=userprimarykey=idtbodytrtd/td/tr/tbody/tabledatanodedatabase=db1datahost=mysql1name=dn1易火棋牌=db2datahost=mysql2name=dn2datanodedatabase=db3datahost=mysql3name=dn3datahostbalance=0dbdriver=nativedbtype=mysql1516171819202122232425262728293031323334353637383940414243444546474849505152535455565758maxcon=1000mincon=10name=mysql1writetype=0heartbeatselectuser()/heartbeatwritehosthost=host1password=123456url=172.18.4.21:3306user=root/writehost/datahostdatahostbalance=0dbdriver=nativedbtype=mysqlmaxcon=1000mincon=10name=mysql2writetype=0heartbeatselectuser()/heartbeatwritehosthost=host2password=123456url=172.18.4.22:3306user=root/writehost/datahostdatahostbalance=0dbdriver=nativedbtype=mysqlmaxcon=1000mincon=10name=mysql3writetype=0heartbeatselectuser()/heartbeatwritehosthost=host3password=123456url=172.18.4.23:3306user=root/writehost/datahosth2id=docker-compose文件的编写docker-compose文件的编写/h2pdocker-compose.yml其实就是帮我们做了个服务编排,使用起来就很方便了,下面贴出本次实验的服务编排明细:/ppreclass=brush:sql;version:'2'services:mycat:image:centos-jdk8-mycat1.6networks:jznet:ipv4_address:172.18.4.26volumes:-/root/data/mycat/logs:/usr/local/mycat/logs-/home/wen/mycat-test/schema.xml:/usr/local/mycat/conf/schema.xmlports:-8066:8066-9066:9066mysql-01:image:docker.io/centos/mysql-57-centos7networks:jznet:ipv4_address:172.18.4.21ports:-3301:3306environment:-MYSQL_ROOT_PASSWORD=123456mysql-02:image:docker.io/centos/mysql-57-centos75960616263646566676869707172737475767778798081828384858687888990919293949596979899100101networks:jznet:ipv4_address:172.18.4.22ports:-3302:3306environment:-MYSQL_ROOT_PASSWORD=123456mysql-03:image:docker.io/centos/mysql-57-centos7networks:jznet:ipv4_address:172.18.4.23ports:-3303:3306environment:-MYSQL_ROOT_PASSWORD=123456networks:jznet:driver:bridgeipam:driver:defaultconfig:-subnet:172.18.4.0/26/preh2id=启动服务启动服务/h2pimgalt=这里写图片描述src=/uploadfile/Collfiles/20180622/20180622112057160.pngstyle=width:630px;height:89.1028px;/p035棋牌的日志还是会报错的,报下面的错误:/ppimgalt=这里写图片描述src=/uploadfile/Collfiles/20180622/20180622112058162.pngstyle=width:630px;height:103.96px;/pp其实这个是由于我们数据的db1、db2、db3、没创建好导致的,我们在各自的数据库将这三个库手动创建好就可以了/ppimgalt=这里写图片描述src=/uploadfile/Collfiles/20180622/20180622112058163.pngstyle=width:245px;height:366px;/ph2实验sql/h2preclass=brush:sql;select*fromuser_consumption_recordlimit10;createtableuser(idintnotnull,namevarchar(20));createtableuser_consumption_record(idintnotnullPRIMARYkeyCOMMENT主键auto_increment,goodsvarchar(20)COMMENT商品,amountDECIMAL(15,2)COMMENT金额,finish_timedatetime)COMMENT完成时间;杰克棋牌(id,goods,amount,finish_time)values(7,'a',1,now());insertintouser_consumption_record(id,goods,amount,finish_time)values(2,'b',1,now());insertintouser_consumption_record(id,goods,amount,finish_time)values(3,'c',1,now());insertintouser_consumption_record(id,goods,amount,finish_time)values(4,'d',1,now());insertintouser_consumption_record(id,goods,amount,finish_time)values(5,'e',1,now());insertintouser_consumption_record(id,goods,amount,finish_time)values(6,'f',1,now());droptableuser;droptableuser_consumption_record;/preh2实验之后/h2p分库分表虽然是实现了,但是这个直接拿到生产上使用肯定还不可行,有以下问题需要考虑:/pp1、数据库备份/pp2、业务量大了一个mycat是搞不定的,可能需要多个mycat,多个mycat的话那么可能需要用到zk统一管理配置/pp3、主键的生成可以考虑使用mycat的数据的sequence、自己实现也可以/ph2注意点/h2p1、表的新增、删除都需要修改schema.xml/p
本文标题:mycat分库分表docker的实现教程
链接地址:https://www.777doc.com/doc-5328740 .html