sharding-ui实现sharding-proxy动态更新分库分表规则

在这里插入图片描述

前言

之前搭建了sharding-proxy,提供给客户端只有一个数据库连接,但是每次更新都需要重启服务,比较麻烦,看了下官方文档,支持zookeeper更新,还提供了页面更新,这里给出详细的搭建步骤。

环境

中间件版本
zookeeper3.4.13
sharding-proxy4.1.1
sharding-ui4.1.1

zookeeper搭建

这个之前搭建过,可以查看之前的文章。

shardingsphere

我们这次搭建使用的源码启动的。

sharding-proxy启动

在这里插入图片描述
sharding-proxy-bootstrap这个目录是启动目录,是一个标准的springboot项目,进到项目里面,需要配置两个配置文件

在这里插入图片描述

  • 配置config-sharding文件,配置的是数据库连接和分库分表规则
schemaName: fdc_do_facade

dataSources:
    fdc_do_0:
        url:  jdbc:mysql://{ip:prot}?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
        username: {username}
        password: {password}
        connectionTimeoutMilliseconds: 30000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50

shardingRule: #分库分表的规则
    tables: # 多个表就往下边追加
        fdc_stock: # 逻辑表的名字
            actualDataNodes: fdc_do_$->{0..7}.fdc_stock_$->{0..7}   #实际执行的节点
            databaseStrategy:
                standard:
                    shardingColumn:  XXX #分表字段
                    preciseAlgorithmClassName: XXX  #分表规则
    bindingTables:
        - fdc_stock
    defaultDatabaseStrategy:
        none:
    defaultTableStrategy:
        none:
  • server.yaml文件,配置sharding-proxy的账号和密码,以及配置zookeeper的地址

orchestration:
  orchestration_ds:
    orchestrationType: registry_center,config_center,distributed_lock_manager
    instanceType: zookeeper
    serverLists: 192.168.56.120:2181
    namespace: orchestration
    props:
      overwrite: false
      retryIntervalMilliseconds: 500
      timeToLiveSeconds: 60
      maxRetries: 3
      operationTimeoutMilliseconds: 500
      
authentication:
  users:
    root:
      password: root
    sharding:
      password: sharding
      authorizedSchemas: sharding_db
#
props:
#  max.connections.size.per.query: 1
  acceptor.size: 16  # The default value is available processors count * 2.
#  executor.size: 16  # Infinite by default.
#  proxy.frontend.flush.threshold: 128  # The default value is 128.
#    # LOCAL: Proxy will run with LOCAL transaction.
#    # XA: Proxy will run with XA transaction.
#    # BASE: Proxy will run with B.A.S.E transaction.
#  proxy.transaction.type: LOCAL
#  proxy.opentracing.enabled: false
#  proxy.hint.enabled: false
#  query.with.cipher.column: true
  sql.show: true
#  allow.range.query.with.inline.sharding: false

  • 启动org.apache.shardingsphere.shardingproxy.Bootstrap这个文件,启动服务,使用navicat连接

ip:localhostport:3307username:rootpassword:root ,连接成功,说明搭建的没有问题。

sharding-ui搭建

在这里插入图片描述
分为两个工程:

  • shardingsphere-ui-backend这个工程是后端工程,提供接口服务,springboot项目。
  • shardingsphere-ui-frontend前端工程,vue项目。

启动后端工程,启动org.apache.shardingsphere.ui.Bootstrap文件

启动前端工程,先到shardingsphere-ui-frontend根目录下,然后执行npm install,之后npm run dev启动项目,之后访问http://localhost:8080/

在这里插入图片描述
账号密码都是admin
在这里插入图片描述

添加注册中心,配置可以复制sharding-proxyserver.yaml文件中配置
在这里插入图片描述

配置中心的配置

在这里插入图片描述

之后可以看到Rule Config菜单下可以配置ruledatasource

在这里插入图片描述
可以看到rule中的配置确实只有一个数据库的分库分表配置,接下来可以动态修改,sharding-proxy也会动态的修改。
在这里插入图片描述

动态添加分库分表规则

目前只有一张表,接下来可以在配置另外一张表。
在这里插入图片描述
打开rule配置添加另外一张表。

在这里插入图片描述
点击发布可以看到,数据库中有多了一另外一张表。

在这里插入图片描述
当我们打开新增表的数据的时候可以发现并没有数据

在这里插入图片描述
我们换一种方式查询,指定你要查询的字段,可以看到确实有数据了。

在这里插入图片描述

那为什么select *,就没有数据了呢,debug了下源码发现

org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.execute.callback.ProxySQLExecuteCallback#executeSQL()这个方法返回的 org.apache.shardingsphere.shardingproxy.backend.response.query.QueryHeader这个数据为空,select具体字段的时候就会返回的。这个是个bug,有发现的可以给出解决方案。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Sharding-Proxy 是一个开源的分库分表中间件,它可以帮助应用程序实现无感知的分库分表操作。下面是一个简单的步骤来利用 Sharding-Proxy 进行分库分表: 1. 安装和配置 Sharding-Proxy:首先,你需要下载 Sharding-Proxy 的安装包,并解压到你的服务器上。然后,根据你的需求修改配置文件,配置数据源和分片规则等信息。 2. 创建数据库和表:在进行分库分表之前,你需要创建相应的数据库和表结构。你可以选择手动创建,或者使用 Sharding-Proxy 提供的自动建表功能。 3. 配置分片规则:在 Sharding-Proxy 的配置文件中,你需要定义分片规则,指定如何将数据分散到不同的数据库和表中。可以使用基于范围、哈希、精确等多种分片算法。 4. 连接到 Sharding-Proxy:在应用程序中,需要修改数据库连接信息,将原来连接数据库的地址改为连接 Sharding-Proxy 的地址。这样应用程序就可以通过 Sharding-Proxy 访问分片后的数据。 5. 进行分库分表操作:现在你可以在应用程序中执行正常的数据库操作,而无需关心具体的分库分表细节。Sharding-Proxy 会根据配置的规则自动将数据路由到正确的库和表中。 需要注意的是,使用 Sharding-Proxy 进行分库分表操作需要仔细考虑数据一致性、事务处理、跨库查询等问题。在配置和使用过程中,建议参考官方文档和示例来确保正确性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值