sharding-jdbc Apache官网
Apache ShardingSphere
Mycat是一个彻底开源的,面向企业应用开发的大数据库集群。从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
基础镜像openjdk:8-jre版本,其他版本apt-get会报错
FROM openjdk:8-jre
ENV AUTO_RUN_DIR ./mycat2
ENV DEPENDENCE_FILE mycat2-1.22-release-jar-with-dependencies.jar
ENV TEMPLATE_FILE mycat2-install-template-1.21.zip
RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN buildDeps='procps wget unzip' \
&& apt-get update \
&& apt-get install -y $buildDeps
# 安装地址 http://dl.mycat.org.cn/2.0/
# http://dl.mycat.org.cn/2.0/1.22-release/
# http://dl.mycat.org.cn/2.0/install-template/
RUN wget -P $AUTO_RUN_DIR/ http://dl.mycat.org.cn/2.0/1.22-release/$DEPENDENCE_FILE \
&& wget -P $AUTO_RUN_DIR/ http://dl.mycat.org.cn/2.0/install-template/$TEMPLATE_FILE
RUN cd $AUTO_RUN_DIR/ \
&& unzip $TEMPLATE_FILE \
&& ls -al . \
&& mv $DEPENDENCE_FILE mycat/lib/ \
&& chmod +x mycat/bin/* \
&& chmod 755 mycat/lib/* \
&& mv mycat /usr/local
#copy mycat /usr/local/mycat/
VOLUME /usr/local/mycat/conf
VOLUME /usr/local/mycat/logs
EXPOSE 8066 1984
CMD ["/usr/local/mycat/bin/mycat", "console"]
docker build -t mycat2:1.22 .
docker run -d --name=mycat2 -p 8066:8066 -p 1984:1984 mycat2:1.22
# 复制容器内配置
docker cp mycat2:/usr/local/mycat/conf .
docker cp mycat2:/usr/local/mycat/logs .
docker run -d --name=mycat2 -p 8066:8066 -p 1984:1984 -v $PWD/conf:/usr/local/mycat/conf -v $PWD/logs:/usr/local/mycat/logs mycat2:1.22
# 以root用户权限进入容器
docker exec -it -u root mycat2 bash
# 查看容器启动日志
docker logs -f mycat2
version: '3'
services:
mycat-service:
build:
context: ./
dockerfile: Dockerfile
image: mycat2:1.22
container_name: mycat2
restart: always
network_mode: "host"
volumes:
- /u01/mycat2/conf:/usr/local/mycat/conf
- /u01/mycat2/logs:/usr/local/mycat/logs
mycat配置文件夹
+ clusters
- prototype.cluster.json //无集群的时候自动创建
- c0.cluster.json
- c1.cluster.json
+ datasources
- prototypeDs.datasource.json //无数据源的时候自动创建
- dr0.datasource.json
- dw0.datasource.json
+ schemas
- db1.schema.json
- mysql.schema.json
+ sequences
- db1_schema.sequence.json
- server.json //服务器配置
- state.json //mycat运行状态,包含集群选举的主节点信息,配置时间戳
prototypeDs.datasource.json 该配置不能删除,可以设置用户、密码、数据库,该配置会在启动Mycat2时创建名为mycat的数据库,库中有mycat所需的数据表
cd /conf/datasources
prototypeDs.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// 数据库读写类型:READ、WRITE、READ_WRITE。Mycat 对数据库需要是可读可写的
"instanceType":"READ_WRITE",
"maxCon":1000,
// 定时检查闲置连接,单位:ms
"maxConnectTimeout":3000,
// jdbc查询超时时间,单位:ms
"queryTimeout": 5000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称,这里不要修改
"name":"prototypeDs",
// 数据库root密码
"password":"123456qq",
"type":"JDBC",
"url":"jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户(要有创建数据的权限)
"user":"root",
"weight":0
}
cd /conf/clusters/
prototype.cluster.json
{
// 集群类型:SINGLE_NODE(单节点)、MASTER_SLAVE(普通主从)、GARELA_CLUSTER(garela cluster/PXC集群)等
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
// 主节点数据源名称
"prototypeDs",
"dr0",
"dw0"
],
// 只有主节点则从节点可以不配置
"replicas":[
// 从节点数据源名称
],
"maxCon":200,
// 集群名称。在后面配置物理库(schema)时会用到
"name":"prototype",
// 查询负载均衡策略
"readBalanceType":"BALANCE_ALL",
// NOT_SWITCH(不进行主从切换)、SWITCH(进行主从切换)
"switchType":"SWITCH"
}
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
cd /conf/schemas/
{
// 物理库
"schemaName": "test",
"customTables": {},
"globalTables": {},
// 指向集群
"targetName": "prototype",
// 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项
"normalTables": {}
}
cd /conf/users
root.user.json
{
"dialect":"mysql",
"ip":null,
"password":"123456qq",
"transactionType":"proxy",
"username":"mycat"