话编程 | 玩转Sharding-Proxy

Posted 肥鼠话编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了话编程 | 玩转Sharding-Proxy相关的知识,希望对你有一定的参考价值。

简介

官网解释:

Sharding-Proxy是ShardingSphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供mysql/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。

架构图

  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。

  • 适用于任何兼容MySQL/PostgreSQL协议的的客户端。

准备玩转

我们按照官网给的操作步骤,手动执行以下看看,Sharding-Proxy是怎么个流程,它是怎么充当数据库代理中间商的.

拉取官方的docker镜像

开始之前,需要将我们的基础实验环境搭建好,我们先启动一下虚拟机的docker服务,见如下图所示

话编程 | 玩转Sharding-Proxy

图10-1

启动docker服务之后,我们就可以从官网拉取sharding-proxy的官方镜像文件,操作如下:

话编程 | 玩转Sharding-Proxy

图10-2

话编程 | 玩转Sharding-Proxy

图10-3

为了方便操作,特意建了一个文件夹,取名shardingProxy,里面放了用于数据库分片以及读写分离的配置文件,如下图所示

话编程 | 玩转Sharding-Proxy

话编程 | 玩转Sharding-Proxy

图10-4

如上图所示,简单介绍一下:

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

图10-5

表示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

话编程 | 玩转Sharding-Proxy

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 

话编程 | 玩转Sharding-Proxy

这个时候,我在本地windows10上,使用telnet 192.168.1.101 13308 测试,可以远程连接

然后,这个时候兴冲冲的赶紧用DG工具远程连接sharding-proxy 却发现,怎么也连不上

捣鼓了很长时间,,哎,,最终放弃了,希望各位兄弟们给个指点意见,不胜感激!


以上是关于话编程 | 玩转Sharding-Proxy的主要内容,如果未能解决你的问题,请参考以下文章

动手玩转Scratch2.0编程pdf

轻松玩转函数式编程

玩转 JavaScript 面试:何为函数式编程?

玩转javascript异步编程

玩转javascript异步编程

带你玩转多进程编程