来自:mjsws > 馆藏分类
配色: 字号:
mycat分库分表docker的实现教程
2018-06-30 | 阅:  转:  |  分享 
  
<
tr>
mycat分库分表docker的实现教程实验环境docker版本:Dockerversion1.13.1mycat版本:Mycat-se
rver-1.6-RELEASE-jdk版本:jdk1.8mysql版本:mysql5.7linux版本:Linux?VM_0_1
2_centos3.10.0-862.3.2.el7.x86_64#1SMPMonMay2123:36:36UTC
2018x86_64x86_64x86_64GNU/Linux实验目的实现mysql分库分表,本示例中将用户的消费记录表
(user_consumption_record)分了三个库,对应三张表,三个库分别在不同的节点上,使用mycat做路由。使得对用
用户来说,就好像在操作一个表。用户表(未做分库分表操作),是单表直接放到了其中一个节点上。实验结果展示构建实验所需的docker镜
像我们所需要的镜像有两个,第一个是mysql的镜像,第二个是mycat的镜像,mysql的镜像,dockersearch一
下可以找到很多可以用的,所以我们这边就不重复去自己构建了,显得麻烦。下面是我们使用的网上直接找的mysql镜像:下面我们开始构建我
们需要的一个含jdk8的mycat1.6的镜像,构建所需的资源如下:下面是构建含jdk8的mycat1.6的镜像的Dockerfi
le?12345678910111213FROMdocker.io/centosCOPYmycat/jdk-8u171-lin
ux-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_171EN
VPATH=$PATH:$JAVA_HOME/binENVCLASSPATH=.:$JAVA_HOME/lib/dt.jar:
$JAVA_HOME/lib/tools.jarCOPYmycat/Mycat-server-1.6-RELEASE-20161
028204710-linux.tar.gz?/usr/local/RUNtar-zxvf/usr/local/Mycat
-server-1.6-RELEASE-20161028204710-linux.tar.gz-C/usr/local/ENV
MYCAT_HOME=/usr/local/mycat?RUNsource/etc/profileRUNsource~/
.bash_profileCMD["/usr/local/mycat/bin/mycat","console"]执行类似下面的
命令,就可以生成我们需要的含jdk8的mycat1.6的镜像了(/home/wen这个是我的当前构建目录)?1dockerbu
ild-tcentos-jdk8-mycat1.6-fDockerfile?/home/wen/编写mycat的sech
ma.xml文件mycat的server.xml、rule.xml都没改过,我这边就不贴出来了,这里面如果有一些标签的意义不理
解的,那还是请百度把,本文就不讲解这些标签怎么使用了。?1234567891011121314151617181920212223
24252627282930313233343536373839404142434445464748495051525354555
65758596061626364656667686970717273747576777879808182838485868788
8990919293949596979899100101?emaxmlns:mycat="https://io.mycat/">??se"name="TESTDB"sqlmaxlimit="100">?
?
st="mysql1"name="dn1">易火棋牌www.482223.com?b2"datahost="mysql2"name="dn2">?st="mysql3"name="dn3">??dbtype="mysql"maxcon="1000"mincon="10"name="mysql1"writetype=
"0">?selectuser()?password="123456"url="172.18.4.21:3306"user="root">>??ql"maxcon="1000"mincon="10"name="mysql2"writetype="0">?beat>selectuser()?123456"url="172.18.4.22:3306"user="root">?t>?"1000"mincon="10"name="mysql3"writetype="0">?select
user()
?="172.18.4.23:3306"user="root">?ocker-compose文件的编写">docker-compose文件的编写

docker-compose.yml
其实就是帮我们做了个服务编排,使用起来就很方便了,下面贴出本次实验的服务编排明细:

ql;">version:''2''services:?mycat:?image:centos-jdk8-mycat1.6?net
works:?jznet:?ipv4_address:172.18.4.26?volumes:?-/root/data/myc
at/logs:/usr/local/mycat/logs?-/home/wen/mycat-test/schema.xml:/
usr/local/mycat/conf/schema.xml?ports:?-"8066:8066"?-"9066:9066
"?mysql-01:?image:docker.io/centos/mysql-57-centos7?networks:?jz
net:?ipv4_address:172.18.4.21?ports:?-"3301:3306"?environment:?
-MYSQL_ROOT_PASSWORD=123456?mysql-02:?image:docker.io/centos/my
sql-57-centos7?networks:?jznet:?ipv4_address:172.18.4.22?ports:?
-"3302:3306"?environment:?-MYSQL_ROOT_PASSWORD=123456?mysql-03:
?image:docker.io/centos/mysql-57-centos7?networks:?jznet:?ipv4_a
ddress:172.18.4.23?ports:?-"3303:3306"?environment:?-MYSQL_ROO
T_PASSWORD=123456networks:?jznet:?driver:bridge?ipam:?driver:de
fault?config:?-subnet:172.18.4.0/26启动服务>

22112057160.png"style="width:630px;height:89.1028px;">

035
棋牌www.267774.com

启动之后我们发现mycat的日志还是会报错的,报下面的错误:

="这里写图片描述"src="/uploadfile/Collfiles/20180622/20180622112058162.
png"style="width:630px;height:103.96px;">

其实这个是由于我们数据的d
b1、db2、db3、没创建好导致的,我们在各自的数据库将这三个库手动创建好就可以了

述"src="/uploadfile/Collfiles/20180622/20180622112058163.png"sty
le="width:245px;height:366px;">

实验sql

rush:sql;">selectfromuser_consumption_recordlimit10;?create
tableuser(idintnotnull,namevarchar(20));createtableuser_c
onsumption_record(idintnotnullPRIMARYkeyCOMMENT"主键"auto_i
ncrement,goodsvarchar(20)COMMENT"商品",amountDECIMAL(15,2)COM
MENT"金额",finish_timedatetime)COMMENT"完成时间";杰克棋牌www.jiekeqipa
i.net??insertintouser_consumption_record(id,goods,amount,finish
_time)values(7,''a'',1,now());?insertintouser_consumption_record
(id,goods,amount,finish_time)values(2,''b'',1,now());insertintou
ser_consumption_record(id,goods,amount,finish_time)values(3,''c'',
1,now());insertintouser_consumption_record(id,goods,amount,fini
sh_time)values(4,''d'',1,now());insertintouser_consumption_recor
d(id,goods,amount,finish_time)values(5,''e'',1,now());insertinto
user_consumption_record(id,goods,amount,finish_time)values(6,''f''
,1,now());?droptableuser;droptableuser_consumption_record;re>

实验之后

分库分表虽然是实现了,但是这个直接拿到生产上使用肯定还不可行,有以下问题需要考虑:

1、数据库备份

2、业务量大了一个mycat是搞不定的,可能需要多个mycat,多个mycat的话那么可能需要用到zk统一管理配置

3、主键的生成可以考虑使用mycat的数据的sequence、自己实现也可以

注意点

1、表的新增、删除都需要修改schema.xml

2、即使有的表是单表也需要配置到schema.xml里卖年

3、分表键需要慎重考虑,避免引起跨库事物。

献花(0)
+1
(本文系mjsws首藏)
类似文章 更多
发表评论: