前言
实际运用中,一定是要容器化部署的,所以需要打成镜像,官方也给出了基础镜像,我们可以参考官方给出的,链接如下:
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-proxy/,然而根据前一篇博客,我们需要定义自己的分片规则,需要将我们jar
打到proxy
的lib
目录下面,我们不得不自己大镜像了。
搭建步骤
看下目录如下:
-rwxrwxrwx. 1 root root 79 Jul 23 18:04 build_image.sh
-rw-r--r--. 1 root root 972 Jul 23 18:00 config-sharding.yaml
drwxr-xr-x. 2 root root 6 Jul 23 14:51 docker_build
-rw-r--r--. 1 root root 352 Jul 23 18:20 Dockerfile
-rw-r--r--. 1 root root 846263 Jul 23 14:30 mysql-connector-java-5.1.24.jar
-rw-r--r--. 1 1000 1000 1768 Jul 16 14:43 server.yaml
-rw-r--r--. 1 root root 10737874 Jul 15 13:37 sharding-algorithm-1.0-SNAPSHOT.jar
drwxr-xr-x. 2 root root 6 Jul 23 14:51 sharding-proxy-build-service
配置config-sharding.yaml
schemaName: sharding_db # 数据库名字
dataSources:
order_db_1: #数据源别名,多个往下边追加
url: jdbc:mysql://192.168.56.121:33065/order_db_1?useUnicode=true
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
shardingRule: #分库分表的规则
tables: # 多个表就往下边追加
t_order: # 逻辑表的名字
actualDataNodes: order_db_1.t_order_$->{1..2} #实际执行的节点
databaseStrategy:
standard:
shardingColumn: order_id #分表字段
preciseAlgorithmClassName: com.ddmc.algorithm.OrderShardingAlgorithm #分表规则
keyGenerator:
type: SNOWFLAKE #分布式主键类型
column: order_id # 分布式主键
bindingTables:
- t_order # 哪些表需要分库分表
defaultDatabaseStrategy:
none:
defaultTableStrategy:
none:
配置server.yaml
authentication:
users:
root:
password: root
sharding:
password: sharding
authorizedSchemas: sharding_db
props:
acceptor.size: 16
拷贝jar包
-
mysql-connector-java-5.1.24.jar
需要自行下载 -
sharding-algorithm-1.0-SNAPSHOT.jar
是我们自定义分片规则打成的包
编写Dockerfile
FROM docker.io/apache/sharding-proxy
MAINTAINER batman
USER root
WORKDIR /usr/src
VOLUME /data /data
ADD sharding-algorithm-1.0-SNAPSHOT.jar /opt/sharding-proxy/lib/
ADD config-sharding.yaml /opt/sharding-proxy/conf/config-sharding.yaml
ADD mysql-connector-java-5.1.24.jar /opt/sharding-proxy/lib/
ADD server.yaml /opt/sharding-proxy/conf/server.yaml
编写build_image.sh
#!/bin/sh
tag=$1
name=`basename $(echo $PWD)`
docker build -t ${name}:${tag} .
打镜像
./build_image.sh 0.0.1
查看并且启动镜像
[root@localhost sharding-proxy-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sharding-proxy-build 0.0.1 6b4a94649eda 7 minutes ago 697 MB
docker run -p3307:3307 -it 6b4a94649eda
[INFO ] 10:37:15.297 [main] c.a.icatch.provider.imp.AssemblerImp - USING: com.atomikos.icatch.tm_unique_name = 172.17.0.2.tm
[INFO ] 10:37:15.297 [main] c.a.icatch.provider.imp.AssemblerImp - USING: com.atomikos.icatch.forget_orphaned_log_entries_delay = 86400000
[INFO ] 10:37:15.297 [main] c.a.icatch.provider.imp.AssemblerImp - USING: com.atomikos.icatch.oltp_retry_interval = 10000
[INFO ] 10:37:15.297 [main] c.a.icatch.provider.imp.AssemblerImp - USING: java.naming.provider.url = rmi://localhost:1099
[INFO ] 10:37:15.298 [main] c.a.icatch.provider.imp.AssemblerImp - USING: com.atomikos.icatch.force_shutdown_on_vm_exit = false
[INFO ] 10:37:15.298 [main] c.a.icatch.provider.imp.AssemblerImp - USING: com.atomikos.icatch.default_jta_timeout = 300000
[INFO ] 10:37:15.298 [main] c.a.icatch.provider.imp.AssemblerImp - Using default (local) logging and recovery...
[INFO ] 10:37:15.400 [main] c.a.d.xa.XATransactionalResource - resource-1-order_db_1: refreshed XAResource
[INFO ] 10:37:16.193 [main] ShardingSphere-metadata - Loading 1 logic tables' meta data.
[INFO ] 10:37:16.306 [main] ShardingSphere-metadata - Loading 2 tables' meta data.
[INFO ] 10:37:16.551 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xc4f47ef0] REGISTERED
[INFO ] 10:37:16.552 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xc4f47ef0] BIND: 0.0.0.0/0.0.0.0:3307
[INFO ] 10:37:16.553 [epollEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xc4f47ef0, L:/0.0.0.0:3307] ACTIVE
看到启动日志ACTIVE
已经启动,客户端连接即可。