sharding-proxy分表配置过程记录

之前研究过通过mycat进行分库分表的配置,最近发现很多项目上用的都是sharding-proxy来实现,所以也来进行一个学习。下面来简单记录一下搭建的过程。

下载

首先自然是去官网下载软件,这里我下载的是最新版5.1.2,下载地址如下:

https://www.apache.org/dyn/closer.lua/shardingsphere/5.1.2/apache-shardingsphere-5.1.2-shardingsphere-proxy-bin.tar.gz

直接在centos虚拟机上用 wget命令进行下载即可,下载完成后,输入 tar -zxvf apache-shardingsphere-5.1.2-shardingsphere-proxy-bin.tar.gz进行解压,最终解压出来一个文件夹,进行下一步。

配置

进入文件夹,可以看到一个十分眼熟的文件结构,非常像tomcat。可能apache家的软件都是这个结构?(笑)

进入conf,首先我们修改 server.yaml这个配置文件,这个配置文件主要是用来设置一个虚拟的登录用户以及密码。

进去之后我们可以看到官方已经提供了样例配置,都被注释掉了。我们只需要放开需要修改的注释,并进行修改即可。这里我主要修改的内容如下:

rules:
  - !AUTHORITY
    users:
      - root@%:123456
      - sharding@:sharding
props:
  proxy-default-port: 3333

这里的配置,是开放了两个用户,root和sharding,作为连接我们sharding-proxy的用户。以及修改了应用启动的端口号,默认使用的是3307,但我还有其他的应用占用了3307,所以这里改成了3333。

接着我们修改config-sharding.yaml这个配置文件,这个文件就是我们分库分表的主要配置文件了。

这个文件也是官方提供了样例配置,我们同样只需要放开注释,进行修改:

######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################

databaseName: aki_sharding

dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/aki_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
#  ds_1:
#    url: jdbc:mysql://127.0.0.1:3306/aki_ds_1?serverTimezone=UTC&useSSL=false
#    username: root
#    password: 123456
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#    minPoolSize: 1

rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds_0.t_order_${0..1}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_inline
      keyGenerateStrategy:
        column: order_id
        keyGeneratorName: snowflake
    t_order_item:
      actualDataNodes: ds_0.t_order_item_${0..1}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_item_inline
      keyGenerateStrategy:
        column: order_item_id
        keyGeneratorName: snowflake
  bindingTables:
    - t_order,t_order_item
#  defaultDatabaseStrategy:
#    standard:
#      shardingColumn: user_id
#      shardingAlgorithmName: database_inline
#  defaultTableStrategy:
#    none:

  shardingAlgorithms:
    database_inline:
      type: INLINE
      props:
        algorithm-expression: ds_${user_id % 2}
    t_order_inline:
      type: INLINE
      props:
        algorithm-expression: t_order_${order_id % 2}
    t_order_item_inline:
      type: INLINE
      props:
        algorithm-expression: t_order_item_${order_id % 2}

  keyGenerators:
    snowflake:
      type: SNOWFLAKE

这个配置文件比较长,我们挑一些重要的来看看。

首先是开头,可以看到是配置了虚拟的数据库名称,以及数据源。这里可以看到我注释掉了第二个数据源,因为这里的多个数据源实际上对应着多个数据库,是一个分库的概念。这里我们先只探究分表的玩法。

再往下是一些分库分表的规则,这里可以配置数据按什么规则来进行分表,以及哪些表需要进行分表、主键生成策略等等,这里采用的是雪花id。

最后,还有一点需要注意,就是sharding-proxy本身并没有mysql的连接jar包,所以这里我们需要自己去准备一个,然后放到lib文件夹中。这里我用的mysql版本是8.x的,所以connector jar包也用了8.x的。

sharding-proxy分表配置过程记录_第1张图片

测试

配置完成后,程序启动方法也很简单。进入bin目录,执行start.sh即可。日志会自动输出到logs/stdout.log中

在启动之前,还需要注意,我们需要在真实的数据源中建立对应的数据库,否则启动会报错

我们用navicat连接进行测试

sharding-proxy分表配置过程记录_第2张图片

可以看到,在3333端口连接成功了。

然后,我们在这个aki_sharding库中,建立2张表:t_order,aki_test。这两张表,一个是在前面的配置文件中配置的要进行分表的表,一个则是完全无关的表。我们来看看会是什么样的结果:

sharding-proxy分表配置过程记录_第3张图片

可以看到,在宿主库中,sharding-proxy帮我们把t_order表进行了分表,分成了2张。而对于aki_test表,则是普通的创建。

下面我们试着往t_order表中插入几条数据进行测试:

sharding-proxy分表配置过程记录_第4张图片

然后我们去宿主库进行查看:

sharding-proxy分表配置过程记录_第5张图片

sharding-proxy分表配置过程记录_第6张图片

可以看到,主键id是用雪花id生成的,并且按照规则分配到了2张表中。这样我们就完成了分表的基本操作。

经过测试,基本的查询、修改、删除、插入等操作,对用户来说都是无感知的,可以把sharding-proxy虚拟出来的这个数据库,当成真正的数据库来进行使用。

你可能感兴趣的:(mysql,java,apache)