ShardingSphere 5.3 系列ShardingSphere-Proxy保姆级教程 | Spring Cloud 50

news2025/1/19 14:20:02

一、前言

通过以下系列章节:

Spring Boot集成ShardingSphere实现数据分片(一) | Spring Cloud 40

Spring Boot集成ShardingSphere实现数据分片(二) | Spring Cloud 41

Spring Boot集成ShardingSphere实现数据分片(三) | Spring Cloud 42

Spring Boot集成ShardingSphere实现读写分离 | Spring Cloud 43

Spring Boot集成ShardingSphere实现按月数据分片及创建自定义分片算法 | Spring Cloud 44

Spring Boot集成ShardingSphere分片利器 AutoTable (一)—— 简单体验 | Spring Cloud 45

Spring Boot集成ShardingSphere分片利器 AutoTable (二)—— 自动分片算法示例 | Spring Cloud 46

ShardingSphere 5.3 系列Spring 配置升级指南 | Spring Cloud 47

Spring Boot集成ShardingSphere实现数据加密及数据脱敏 | Spring Cloud 48

Spring Boot集成ShardingSphere配合dynamic-datasource进行数据源切换 | Spring Cloud 49

ShardingSphere的数据分片、各分片算法应用、读写分离、数据加密、数据脱敏、最新版本升级等情况有了详细的了解,今天我们继续对其ShardingSphere的另一款产品ShardingSphere-Proxy进行了解学习。

二、ShardingSphere-Proxy

ShardingSphere-Proxy 定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQLPostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。

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

兼容 MariaDB 等基于 MySQL 协议的数据库,以及 openGauss 等基于 PostgreSQL 协议的数据库;
适用于任何兼容 MySQL/PostgreSQL 协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat 等。

在这里插入图片描述

2.1 产品功能

特性定义
数据分片数据分片,是应对海量数据存储与计算的有效手段。ShardingSphere 基于底层数据库提供分布式数据库解决方案,可以水平扩展计算和存储。
分布式事务事务能力,是保障数据库完整、安全的关键技术,也是数据库的核心技术。基于 XA 和 BASE 的混合事务引擎,ShardingSphere 提供在独立数据库上的分布式事务功能,保证跨数据源的数据安全。
读写分离读写分离,是应对高压力业务访问的手段。基于对 SQL 语义理解及对底层数据库拓扑感知能力,ShardingSphere 提供灵活的读写流量拆分和读流量负载均衡。
高可用 高可用,是对数据存储计算平台的基本要求。ShardingSphere 提供基于原生或 Kubernetes 环境下数据库集群的分布式高可用能力。
数据迁移数据迁移,是打通数据生态的关键能力。ShardingSphere 提供跨数据源的数据迁移能力,并可支持重分片扩展。
联邦查询联邦查询,是面对复杂数据环境下利用数据的有效手段。ShardingSphere 提供跨数据源的复杂查询分析能力,实现跨源的数据关联与聚合。
数据加密数据加密,是保证数据安全的基本手段。ShardingSphere 提供完整、透明、安全、低成本的数据加密解决方案。
影子库在全链路压测场景下,ShardingSphere 支持不同工作负载下的数据隔离,避免测试数据污染生产环境。

2.2 与 ShardingSphere-JDBC 比较

维度ShardingSphere-JDBCShardingSphere-Proxy
数据库任意MySQL/PostgreSQL
连接消耗数
异构语言仅 Java任意
性能损耗低损耗略高
无中心化
静态入口

三、部署使用

本文基于Docker部署ShardingSphere-Proxy无须额外依赖,部署版本为5.3.2
使用二进制分发包部署 ShardingSphere-Proxy,需要环境具备 Java JRE 8 或更高版本。

3.1 操作步骤

3.1.1 获取docker镜像

docker pull apache/shardingsphere-proxy:5.3.2

3.1.2 配置conf/server.yaml和conf/config-*.yaml

可以从docker容器中获取配置文件模板,拷贝到宿主机任意目录中:

docker run -d --name tmp --entrypoint=bash apache/shardingsphere-proxy:5.3.2
docker cp tmp:/opt/shardingsphere-proxy/conf /root/apps/shardingsphere-proxy
docker rm tmp

由于容器内的网络环境可能与宿主机的网络环境有差异,如果启动时报无法连接到数据库错误等错误,请确保 conf/config-*.yaml 配置文件中指定的数据库的 ip 可以被 docker 容器内部访问到。

3.1.3 引入数据库驱动(可选)

如果后端连接 MySQL 数据库,请下载驱动,在宿主机中任意位置创建 ext-lib 目录,并将驱动放入,且在启动容器时进行目录挂载。

3.1.4 配置conf/server.yaml

ShardingSphere-Proxy 运行模式在 server.yaml 中配置,配置格式与 ShardingSphere-JDBC 一致,请参考 模式配置。

我配置的是单机模式并开启权限:

mode:
  type: Standalone
  repository:
    type: JDBC
authority:
  users:
    - user: root@%
      password: root
    - user: sharding
      password: sharding
  privilege:
    type: ALL_PERMITTED

其他配置项请参考:

  • 权限配置
  • 属性配置
  • 规则配置

3.1.5 配置conf/config-*.yaml

修改宿主机conf目录下以 config- 前缀开头的文件,如:conf/config-sharding.yaml 文件,进行分片规配置。

config-*.yaml 文件的 * 部分可以任意命名。 ShardingSphere-Proxy 支持配置多个逻辑数据源,每个以 config- 前缀命名的 yaml 配置文件,即为一个逻辑数据源。

conf/config-sharding.yaml 文件示例:

databaseName: sharding_db
dataSources:
  ds1:
    url: jdbc:mysql://192.168.0.35:3306/db1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: '1qaz@WSX'
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

  ds2:
    url: jdbc:mysql://192.168.0.46:3306/db2?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: '1qaz@WSX'
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
rules:
- !SHARDING
  autoTables:
    # 取模
    t_auto_order_mod:
      actualDataSources: ds$->{1..2}
      shardingStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: auto_order_mod
      # 分布式序列策略
      keyGenerateStrategy:
        # 自增列名称,缺省表示不使用自增主键生成器
        column: order_id
        # 分布式序列算法名称
        keyGeneratorName: snowflake
    # 散列取模
    t_auto_order_hash_mod:
      actualDataSources: ds1
      shardingStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: auto_order_hash_mod
      # 分布式序列策略
      keyGenerateStrategy:
        # 自增列名称,缺省表示不使用自增主键生成器
        column: order_id
        # 分布式序列算法名称
        keyGeneratorName: snowflake
    # 容量范围
    t_auto_order_volume_range:
      actualDataSources: ds$->{1..2}
      shardingStrategy:
        standard:
          shardingColumn: price
          shardingAlgorithmName: auto_order_volume_range
      # 分布式序列策略
      keyGenerateStrategy:
        # 自增列名称,缺省表示不使用自增主键生成器
        column: order_id
        # 分布式序列算法名称
        keyGeneratorName: snowflake
    # 边界范围
    t_auto_order_boundary_range:
      actualDataSources: ds$->{1..2}
      shardingStrategy:
        standard:
          shardingColumn: price
          shardingAlgorithmName: auto_order_boundary_range
      # 分布式序列策略
      keyGenerateStrategy:
        # 自增列名称,缺省表示不使用自增主键生成器
        column: order_id
        # 分布式序列算法名称
        keyGeneratorName: snowflake
    # 自动日期间隔
    t_auto_order_auto_interval:
      actualDataSources: ds$->{1..2}
      shardingStrategy:
        standard:
          shardingColumn: create_time
          shardingAlgorithmName: auto_order_auto_interval
      # 分布式序列策略
      keyGenerateStrategy:
        # 自增列名称,缺省表示不使用自增主键生成器
        column: order_id
        # 分布式序列算法名称
        keyGeneratorName: snowflake
  # 分片算法配置
  shardingAlgorithms:
    # 取模
    auto_order_mod:
      type: MOD
      props:
        sharding-count: 6
    # 散列取模
    auto_order_hash_mod:
      type: HASH_MOD
      props:
        sharding-count: 6
    # 容量范围
    auto_order_volume_range:
      type: VOLUME_RANGE
      props:
        range-lower: 0
        range-upper: 20000
        sharding-volume: 10000
    # 边界范围
    auto_order_boundary_range:
      type: BOUNDARY_RANGE
      props:
        sharding-ranges: 10,15,100,12000,16000
    # 自动日期间隔
    auto_order_auto_interval:
      type: AUTO_INTERVAL
      props:
        datetime-lower: "2023-05-07 00:00:00"
        datetime-upper: "2023-05-10 00:00:00"
        sharding-seconds: 86400
  # 分布式序列算法配置(如果是自动生成的,在插入数据的sql中就不要传id,null也不行,直接插入字段中就不要有主键的字段)
  keyGenerators:
    # 分布式序列算法名称
    snowflake:
      # 分布式序列算法类型
      type: SNOWFLAKE

此处配置采用自动分配算法,具体使用说明请参考:Spring Boot集成ShardingSphere分片利器 AutoTable (二)—— 自动分片算法示例 | Spring Cloud 46

3.1.6 启动 ShardingSphere-Proxy容器

version: "3.8"
# 通用日志设置
x-logging:
    &default-logging
    # 日志大小和数量
    options:
        max-size: "100m"
        max-file: "3"
    # 文件存储类型
    driver: json-file
services:
  shardingsphere-proxy:
    image: apache/shardingsphere-proxy:5.3.2
    container_name: shardingsphere-proxy
    environment:
      - PORT=3308
      - JAVA_OPTS=XX:InitialRAMPercentage=80.0 -XX:MaxRAMPercentage=80.0 -XX:MinRAMPercentage=80.0
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime        #设置系统时区
      - /root/apps/shardingsphere-proxy/conf:/opt/shardingsphere-proxy/conf
      - /root/apps/shardingsphere-proxy/ext-lib:/opt/shardingsphere-proxy/ext-lib
    ports:
      - "13308:3308"
    restart: always
    logging: *default-logging

其中,ext-lib 非必需,用户可按需挂载。 ShardingSphere-Proxy 默认端口 3307,可以通过环境变量 -e PORT 指定。 自定义 JVM 相关参数可通过环境变量 JVM_OPTS 设置。

3.2 连接示例

3.2.1 使用客户端连接ShardingSphere-Proxy

执行 MySQL/PostgreSQL/openGauss 的客户端命令直接操作 ShardingSphere-Proxy 即可。

使用 MySQL 客户端连接 ShardingSphere-Proxy

mysql -h${proxy_host} -P${proxy_port} -u${proxy_username} -p${proxy_password}

使用 PostgreSQL 客户端连接 ShardingSphere-Proxy

psql -h ${proxy_host} -p ${proxy_port} -U ${proxy_username}

使用 openGauss 客户端连接 ShardingSphere-Proxy

gsql -r -h ${proxy_host} -p ${proxy_port} -U ${proxy_username} -W ${proxy_password}

3.2.2 使用Navicat连接ShardingSphere-Proxy

在这里插入图片描述
请在数据标签栏勾选对应的逻辑数据库,其中sharding_db是逻辑数据库名称,由config-sharding.yaml中定义。

3.3 常规使用

对上述定义分片规则的逻辑表可正常进行CRUD操作。

3.4 DistSQL

3.4.1 定义

DistSQL(Distributed SQL)Apache ShardingSphere 特有的操作语言。 它与标准 SQL 的使用方式完全一致,用于提供增量功能的 SQL 级别操作能力。

灵活的规则配置和资源管控能力是 Apache ShardingSphere 的特点之一。

在使用 4.x 及其之前版本时,开发者虽然可以像使用原生数据库一样操作数据,但却需要通过本地文件或注册中心配置资源和规则。然而,操作习惯变更,对于运维工程师并不友好。

5.x 版本开始,DistSQL(Distributed SQL)让用户可以像操作数据库一样操作 Apache ShardingSphere,使其从面向开发人员的框架和中间件转变为面向运维人员的数据库产品。

3.4.2 相关概念

DistSQL 细分为 RDLRQLRALRUL 四种类型:

  • RDL
    Resource & Rule Definition Language,负责资源和规则的创建、修改和删除。

  • RQL
    Resource & Rule Query Language,负责资源和规则的查询和展现。

  • RAL
    Resource & Rule Administration Language,负责强制路由、熔断、配置导入导出、数据迁移控制等管理功能。

  • RUL
    Resource & Rule Utility Language,负责 SQL 解析、SQL 格式化、执行计划预览等功能。

3.4.3 对系统的影响

  • 之前

在拥有 DistSQL 以前,用户一边使用 SQL 语句操作数据,一边使用 YAML 文件来管理 ShardingSphere 的配置,如下图:
在这里插入图片描述

这时用户不得不面对以下几个问题:

  • 需要通过不同类型的客户端来操作数据和管理 ShardingSphere 规则;

  • 多个逻辑库需要多个 YAML 文件;

  • 修改 YAML 需要文件的编辑权限;

  • 修改 YAML 后需要重启 ShardingSphere

  • 之后

随着 DistSQL 的出现,对 ShardingSphere 的操作方式也得到了改变:

在这里插入图片描述

现在,用户的使用体验得到了巨大改善:

  • 使用相同的客户端来管理数据和 ShardingSphere 配置;
  • 不再额外创建 YAML 文件,通过 DistSQL 管理逻辑库;
  • 不再需要文件的编辑权限,通过 DistSQL 来管理配置;
  • 配置的变更实时生效,无需重启 ShardingSphere

使用限制:
DistSQL 只能用于 ShardingSphere-ProxyShardingSphere-JDBC 暂不提供。

3.4.3 DistSQL语法规则

请见官网说明:https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-proxy/distsql/syntax/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:centos:组账户管理 》》添加组,用户加入组(设置组密码),删除组,查询账户信息,查询登录用户信息

/etc/group # 组信息文件 /etc/gshadow # 组密码文件(不常用) groupadd (属性) 组名 # 新建组 groupdel (属性) 组名 # 删除组 gpasswd # 可以…

Cartographer源码阅读---番外篇: Submap封装与维护

Cartographer中Submap(子图)没有被直接的调用进行维护, 而是针对2D和3D场景分别派生出子类Submap2D和Submap3D, 进行调用. 以2D为例, 为了方便维护, 又把Submap2D封装成了ActiveSubmaps2D进行维护, 其维护方式类似与滑窗, 也是只维护最近的一些数据. 1. Submap类 /*** brief …

Python学习之生成带logo背景图的二维码(静态和动态图)

前言 二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明。现随着智能手机的普及,已广泛应用于平常生活中,例如商品信息…

探索三维世界【4】:Three.js dat.gui gsap 的使用

探索三维世界【4】:Three.js & dat.gui & gsap 的使用 1、dat.gui是什么?2、gsap的介绍与使用2.1、前提准备工作(绘制一个BoxGeometry)2.2、安装引入gsap动画库2.3、使用gsap动画2.4、配合事件使用 3、使用dat.gui3.1、添…

生物信息学知识点

生物信息学知识点 1. 序列比对:1.1 基本概念:1.2 全局比对和局部比对:1.3 空位罚分的改进:1.4 同源性和相似性:1.5 相似性矩阵:1.5.1 PAM:1.5.2 BLOSUM: 2. BLAST算法:2.…

React | React的过渡动画

✨ 个人主页:CoderHing 🖥️ React.js专栏:React的过渡动画 🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#…

Grafana之Clock Panel使用(06)

Clock Panel可以用来显示当前(各国)时间或用于倒计时,并支持每秒更新一次。 Clock plugin for Grafana | Grafana Labs Clock Panel也是Grafana Labs提供,但并非Native,需自行安装,安装命令如下: # grafana-cli plugins install grafana-clock-panel # systemctl …

前端面试题 — — vue篇

前端面试笔记之vue篇 前言1.数据双向绑定原理⭐⭐⭐2. VUE生命周期⭐⭐⭐3.组件之间如何传值⭐⭐⭐4.路由之间如何传参⭐5.谈一谈VUEX⭐⭐6.如何解决VUEX页面刷新数据丢失问题?⭐⭐7.computed和watch的区别?⭐⭐⭐8.如何封装axios?⭐9.Route和…

APP和小程序共同塑造现代化政务服务

随着移动互联网的飞速发展,政务服务也开始向移动端转移,政务App和小程序结合,可以使政府更好地实现数字化转型和提供优质的政务服务。本文将探讨政务App和小程序的结合优势,以及如何推进政务App和小程序的发展。 移动政务服务应用…

RTSP/RTP on TCP 协议抓包记录

仅做记录,无他。 RTSP OPTIONS 客户端发送: 服务端响应 RTSP DESCRIBE 客户端发送 服务端响应 RTSP SETTUP 客户端发送请求 服务端响应 RTSP PLAY 客户端发送请求 服务端响应 RTP包 这个比较复杂,得好好解析&#xff0…

Git 解决missing Change-Id in message footer

ERROR: commit b007456: missing Change-Id in message footer 无论是linux 还是 window 出现这个,提示都是一样的,按照提示执行就好,网上基本都是这么说的,有的基本都是抄来抄去。 window 遇到这个问题解决步䠫: …

数学天才陶哲轩主持白宫生成式AI工作组,李飞飞、Hassabis发表演讲

夕小瑶科技说 分享 来源 | 新智元 最近,「数学天才」陶哲轩表示,自己将领导白宫生成式人工智能工作组,就当前AI评估并收集意见。在陶哲轩看来,加入工作流的ChatGPT在数学专业领域中,并没有太多增值。 近来&#xff0c…

Windows 环境解压 zip 压缩包乱码问题

前言 最近在接受他人上传的 ZIP 压缩包时,发现解压后文件名出现了乱码,记得自己很久以前似乎把系统的编码改为了 UTF,所以盲猜是压缩包发送人的系统使用了 GBK 编码,出现了错误。 正文 探索 搜了一下,发现了知乎上一…

360°VR全景图片,探索未知,畅游全景

随着科技的不断发展,人们对于视觉的需求越来越高,单一平面的图片已经无法满足人们的需要。360VR全景图片的出现填补了这个空白,它以其全景视角和互动体验,为我们带来了一场视觉盛宴。下面就让我们一起来探讨一下360VR全景图片的特…

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

需求背景 目前,网易云商七鱼智能客服数据库缓存使用了 spring-data-redis 框架,并由自研的缓存组件进行管理。该组件使用 Jackson 框架对缓存数据进行序列化和反序列化,并将其以明文 JSON 的形式存储在 Redis 中。 这种方式存在两个问题&…

(数字图像处理MATLAB+Python)第八章图像复原-第三、四节:图像复原代数方法和典型图像复原方法

文章目录 一:图像复原代数方法(1)无约束最小乘方复原(2)约束复原 二:典型图像复原方法(1)逆滤波复原A:概述B:程序 (2)维纳滤波复原A&a…

【C语言】负数取模、取余

文章目录 一. 关于“取整”1. 向0取整2. 向负无穷取整3. 向正无穷取整4. 四舍五入式的取整 二. 关于“取模”的本质三. 取余和取模的区别 一. 关于“取整” 首先谈谈关于数学取整的问题 1. 向0取整 C中的除法和取整规则都是向0取整,即所有小数都向 0 的方向取整&…

第四十一天学习记录:C语言进阶:笔试题整理Ⅱ

喝汽水问题&#xff1a;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;输入价钱&#xff0c;可以喝多少汽水。&#xff08;编程实现&#xff09; #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main() {int money 0;int total 0;int empty 0;s…

手把手教配置vsc中的c\c++环境

为了防止你之前所看vsc配置C\C视频或者教学不成功的残留影响&#xff0c;这边开始会对vsc进行一次卸载和删除缓存 打开控制面板--点击程序--点击卸载--卸载vsc 显示效果如下 点击是 上面三部完成vsc卸载&#xff0c;接下完成残留卸载 打开你的c盘&#xff0c;如图 点击进去&…

Vue3-黑马(十四)

目录&#xff1a; &#xff08;1&#xff09;vue3-进阶-router-令牌-前端路由 &#xff08;2&#xff09;vue3-进阶-router-令牌-前端路由 &#xff08;3&#xff09;vue3-进阶-pinia1 &#xff08;4&#xff09;vue3-进阶-pinia2 &#xff08;1&#xff09;vue3-进阶-rout…