简介
官网解释:
Sharding-Proxy是ShardingSphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。
架构图
- 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
- 适用于任何兼容MySQL/PostgreSQL协议的的客户端。
准备玩转
我们按照官网给的操作步骤,手动执行以下看看,Sharding-Proxy是怎么个流程,它是怎么充当数据库代理中间商的.
拉取官方的docker镜像
开始之前,需要将我们的基础实验环境搭建好,我们先启动一下虚拟机的docker服务,见如下图所示
启动docker服务之后,我们就可以从官网拉取sharding-proxy的官方镜像文件,操作如下:
docker拉取镜像速度有点慢,远程仓库地址是国外,大家也可以配置国内docker镜像或者配置国内镜像加速点,国内比较常用的镜像仓库比如网易云,阿里云,时速云等,这里就不赘述了,直接上国外镜像拉取,,不管怎样,只要能拉取下来就oK,最终拉取完效果如图所示:
为了方便操作,特意建了一个文件夹,取名shardingProxy,里面放了用于数据库分片以及读写分离的配置文件,如下图所示
如上图所示,简单介绍一下:
1) 创建了两个数据源,ds0和ds1
2) 两个数据库中分别创建了两张表,t_order,t_item,并在这里分别设置了两张表的数据分片规则,其中t_order取user_id为分片键,来获取数据源策略,使用user_id对2取余,用来产生真实表,相当于:ds0.t_order0,ds0.t_order1,ds1.t_order0,ds1.t_order1,t_order_item分片规则跟t_order类似,不再赘述
3) bindingTables : 制定t_order与t_order_item是一对绑定表
运行docker容器
执行 docker run -d -v /opt/apps/docker/shardingProxy:/opt/sharding-proxy/conf –env PORT=3308 -p13308:3308 docker.io/apache/sharding-proxy
得到如下图效果:
表示sharding-proxy启动成功 ,但最终的效果是:sharding-proxy能启动成功,但却连不上,,这一下傻眼了,,,本来想放弃的,后来想想,还是接着写下去,跟大家一起交流一下,,到底是什么原因客户端连不上呢?我把整个执行过程都列了出来,请看效果分析章节.
效果分析
除了上述官网提供的方法启动sharding-proxy以外,我们还可以通过构造镜像的方式启动,这种方式需要兄弟们自行写一个Dockerfile脚本,通过脚本构建的方式,将sharding-proxy在docker容器中启动,其实跟上述效果一样,只不过道路不同,条条大路通罗马,我反正mysql,sharding都是跑在了docker容器中,下面就给大家介绍一下详细使用过程,
1) 构建mysql 镜像文件,如下是docker-compose.yml文件
version: “2”
services:
mysql:
build:
context: .
hostname: mysql
restart: on-failure
privileged: true
volumes:
– /opt/apps/docker/mysql/data:/var/lib/mysql
environment:
– MYSQL_ROOT_PASSWORD=root
ports:
– 3306:3306
2) 设置镜像文件:Dockerfile,贴脚本
#维护作者信息
FROM 127.0.0.1:5000/mysql
LABEL maintainer=”yuenbin@inspur.com”
#将所需文件拷贝到容器相应的目录下
COPY ./setup /docker-entrypoint-initdb.d
COPY ./conf/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf#设置时区
RUN apt-get install tzdata \
&& /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo ‘Asia/Shanghai’ >/etc/timezone
在当前文件目录下,执行docker-compose up -d 启动mysql
3) 构建sharding-proxy的docker-compose.yml,啥也不说,上脚本
version: “2”
services:
sharding:
build:
context: .
hostname: localhost
restart: on-failure
privileged: true
volumes:
– /opt/apps/docker/shardingProxy/logs:/opt/sharding-proxy/logs
environment:
– ‘JVM_OPTS=-Djava.awt.headless=true’
– ‘PORT=3308’
ports:
– 13308:3308
对外向主机暴露13308端口
4) 构建docker镜像文件,啥也不说,上脚本
#维护作者信息
FROM docker.io/apache/sharding-proxy
LABEL maintainer=”yuenbin@inspur.com”
#将所需文件拷贝到容器相应的目录下
COPY ./lib/* /opt/sharding-proxy/lib/
COPY ./conf/* /opt/sharding-proxy/conf/
同理,执行 docker-compose up -d
这个时候,我在本地windows10上,使用telnet 192.168.1.101 13308 测试,可以远程连接
然后,这个时候兴冲冲的赶紧用DG工具远程连接sharding-proxy 却发现,怎么也连不上
捣鼓了很长时间,,哎,,最终放弃了,希望各位兄弟们给个指点意见,不胜感激!