文章目录

  • 简介
  • 目标
  • 相关知识
    • 相关概念
  • ShardingSphere-Proxy部署运行
    • 1. 安装zookeeper
    • 2. 下载解压SHARDINGSPHERE_PROXY
    • 3. 规则配置
      • 数据源配置
      • 权限配置
    • 4. 引入依赖
    • 5. 启动服务
    • 6. 使用ShardingSphere-Proxy
  • ShardingSphere-UI
    • 简介
    • 部署运行
    • 配置使用
  • 后续

简介

  • Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
  • Apache ShardingSphere 旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 关系型数据库当今依然占有巨大市场份额,是企业核心系统的基石,未来也难于撼动,我们更加注重在原有基础上提供增量,而非颠覆。
  • Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。
  • ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。
  • 文档地址:https://shardingsphere.apache.org/document/current/cn/overview/

目标

  • 设置一个虚拟ip,代理到不同数据库节点
  • 程序只需要连接一个vip,然后根据设置的rule等策略,连接到不同的数据库
  • 读写分离,分库分表
  • spring boot + hibernate / JPA

相关知识

  • 传统的将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景
  • 水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是分库分表的标准解决方案
  • 尽量透明化分库分表所带来的影响,让使用方尽量像使用一个数据库一样使用水平分片之后的数据库集群,是 Apache ShardingSphere 数据分片模块的主要设计目标

相关概念

  • 逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。如 t_order
  • 真实表: 在分片的数据库中真实存在的物理表。上个示例中的 t_order_0 到 t_order_9
  • 数据节点:数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0
  • 绑定表:指分片规则一致的主表和子表。例如:t_order 表和 t_order_item 表,均按照 order_id 分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升
  • 广播表:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表
  • 单表:指所有的分片数据源中只存在唯一一张的表。适用于数据量不大且不需要做任何分片操作的场景
  • ShardingSphere 的 3 个产品的数据分片主要流程是完全一致的。 核心由 SQL 解析 => 执行器优化 => SQL 路由 => SQL 改写 => SQL 执行 => 结果归并 的流程组成
  • 建议用户采用 PreparedStatement 这种 SQL 预编译的方式来提升性能

ShardingSphere-Proxy部署运行

1. 安装zookeeper

  • ShardingSphere-Proxy 支持使用 SPI 方式接入分布式治理,实现配置和元数据统一管理以及实例熔断和从库禁用等功能
  • ShardingSphere-Proxy 默认提供了 Zookeeper 解决方案,实现了注册中心功能
  • 首先安装zookeeper
  • 将zookeeper启动起来
  • 查看是否为主节点/home/zookeeper/apache-zookeeper-3.6.2-bin/bin/zkServer.sh status
  • 分布式治理
governance:  name: # 治理名称registryCenter: # 配置中心type: # 治理持久化类型。如:Zookeeper, etcdserverLists: # 治理服务列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181 overwrite: # 本地配置是否覆盖配置中心配置。如果可覆盖,每次启动都以本地配置为准

2. 下载解压SHARDINGSPHERE_PROXY

  • 下载 ShardingSphere-Proxy的最新发行版
  • 下载KEYSasc文件
  • 进行文件完整性校验,解压文件
# 下载tar文件
wget https://mirrors.bfsu.edu.cn/apache/shardingsphere/5.0.0-beta/apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz
# 下载 asc 文件
wget https://downloads.apache.org/shardingsphere/5.0.0-beta/apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz.asc
# 下载KEYS,导入
wget https://downloads.apache.org/shardingsphere/KEYS
gpg --import KEYS
# 文件校验
gpg --verify apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz.asc apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz
# 解压
tar -xzvf apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz
# 名字太长,换一个
mv apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin shardingsphere-5

3. 规则配置

  • 配置是 ShardingSphere-Proxy 中唯一与开发者交互的模块,通过它可以快速清晰的理解 ShardingSphere-Proxy 所提供的功能
  • ShardingSphere-Proxy 只提供基于 YAML 的配置方式。 通过配置,应用开发者可以灵活的使用数据分片、读写分离、数据加密、影子库等功能,并且能够叠加使用
  • 解压缩后修改conf/server.yaml和以config- 前缀开头的文件,如:conf/config-xxx.yaml 文件,进行分片规则、读写分离规则配置
  • 使用 conf/server.yaml 配置注册中心、认证信息以及公用属性
  • 支持多逻辑数据源,每个以 config- 前缀命名的 YAML 配置文件,即为一个逻辑数据源
rules:
- !SHARDINGtables:t_order:actualDataNodes: ds_${0..1}.t_order_${0..2}tableStrategy:standard:shardingColumn: order_idshardingAlgorithmName: t_order_inlinekeyGenerateStrategy:column: order_idkeyGeneratorName: snowflaket_order_item:actualDataNodes: ds_${0..1}.t_order_item_${0..2}tableStrategy:standard:shardingColumn: order_idshardingAlgorithmName: t_order_item_inlinekeyGenerateStrategy:column: order_item_idkeyGeneratorName: snowflakebindingTables:- t_order,t_order_itemdefaultDatabaseStrategy:standard:shardingColumn: user_idshardingAlgorithmName: database_inlinedefaultTableStrategy:none:shardingAlgorithms:database_inline:type: INLINEprops:algorithm-expression: ds_${user_id % 2}t_order_inline:type: INLINEprops:algorithm-expression: t_order_${order_id % 2}t_order_item_inline:type: INLINEprops:algorithm-expression: t_order_item_${order_id % 2}keyGenerators:snowflake:type: SNOWFLAKEprops:worker-id: 123

数据源配置

schemaName: # 逻辑数据源名称dataSources: # 数据源配置,可配置多个 <data-source-name><data-source-name>: # 与 ShardingSphere-JDBC 配置不同,无需配置数据库连接池url: #数据库 URL 连接username: # 数据库用户名password: # 数据库密码connectionTimeoutMilliseconds: # 连接超时毫秒数idleTimeoutMilliseconds: # 空闲连接回收超时毫秒数maxLifetimeMilliseconds: # 连接最大存活时间毫秒数maxPoolSize: 50 # 最大连接数minPoolSize: 1  # 最小连接数     rules: # 与 ShardingSphere-JDBC 配置一致# ...

权限配置

  • 用于执行登录 Sharding Proxy 的权限验证。 配置用户名、密码、可访问的数据库后,必须使用正确的用户名、密码才可登录
  • hostname 为%或空字符串,则代表不限制host
  • providertype 必须显式指定
rules:- !AUTHORITYusers:- root@localhost:root  # <username>@<hostname>:<password>- sharding@:shardingprovider:type: NATIVE

4. 引入依赖

如果后端连接 PostgreSQL 数据库,不需要引入额外依赖。

如果后端连接 MySQL 数据库,请下载 mysql-connector-java-5.1.47.jar,并将其放入 %SHARDINGSPHERE_PROXY_HOME%/lib 目录

5. 启动服务

  • 使用默认配置项启动
sh %SHARDINGSPHERE_PROXY_HOME%/bin/start.sh
  • 默认启动端口为 3307,默认配置文件目录为:%SHARDINGSPHERE_PROXY_HOME%/conf/

  • 自定义端口和配置文件目录启动

  • 可以通过启动脚本追加参数作为启动端口号

sh %SHARDINGSPHERE_PROXY_HOME%/bin/start.sh ${proxy_port} ${proxy_conf_directory}
  • 使用 conf/server.yaml 配置注册中心、认证信息以及公用属性
  • 支持多逻辑数据源,每个以 config- 前缀命名的 YAML 配置文件,即为一个逻辑数据源

6. 使用ShardingSphere-Proxy

  • 执行 MySQL 或 PostgreSQL的客户端命令直接操作 ShardingSphere-Proxy 即可。以 MySQL 举例:
mysql -u${proxy_username} -p${proxy_password} -h${proxy_host} -P${proxy_port}psql -h ${proxy_host} -p ${proxy_port}-U ${proxy_username}-d ${schemaName}
  • 或者使用navcat等工具,建立连接查看

ShardingSphere-UI

简介

  • ShardingSphere-UI 是 ShardingSphere 的一个简单而有用的web管理控制台。它用于帮助用户更简单的使用 ShardingSphere 的相关功能,目前提供注册中心管理、动态配置管理、数据库编排等功能
  • 项目结构上采取了前后端分离的方式,前端使用 Vue 框架,后端采用 Spring Boot 框架。使用标准的 Maven 方式进行打包,部署,同时也可以采用前后端分离的方式本地运行,方便开发调试

部署运行

  • 下载与SHARDINGSPHERE_PROXY版本一致的UI的发行版本
  • 下载asc文件
  • 进行文件完整性校验,解压文件
# 如果没有下载KEYS,需要下载导入
wget https://downloads.apache.org/shardingsphere/KEYS
gpg --import KEYS
# 下载tar文件
wget https://mirrors.bfsu.edu.cn/apache/shardingsphere/shardingsphere-ui-5.0.0-alpha/apache-shardingsphere-5.0.0-alpha-shardingsphere-ui-bin.tar.gz
# 下载 asc 文件
wget https://downloads.apache.org/shardingsphere/shardingsphere-ui-5.0.0-alpha/apache-shardingsphere-5.0.0-alpha-shardingsphere-ui-bin.tar.gz.asc
# 文件校验
gpg --verify apache-shardingsphere-5.0.0-alpha-shardingsphere-ui-bin.tar.gz.asc apache-shardingsphere-5.0.0-alpha-shardingsphere-ui-bin.tar.gz
# 解压
tar -xzvf apache-shardingsphere-5.0.0-alpha-shardingsphere-ui-bin.tar.gz
# 名字太长,换一个
mv apache-shardingsphere-5.0.0-alpha-shardingsphere-ui-bin shardingsphere-ui

配置使用

  • ui的默认端口号 8088 ,默认用户名密码为 admin

  • 在UI里添加注册中心即可,需要注意一点,治理实例名,需要与配置文件一致

  • 在之前的配置文件里,设置overwrite=false,就可以使用UI里的值,覆盖本地的,可以在这里修改,动态生效

后续

  • 建库建表sql,针对我自己黏贴的配置文件,仅供参考sql文件
  • 至此,sharding-proxy 和 sharding-UI 就搭建完毕
  • 后面需要针对分库分表策略等,制作Spring boot的程序demo,敬请期待

sharding-proxy和sharding-ui 简介与v5.0.0-beat版本搭建配置相关推荐

  1. Sharding Proxy 实战

    理论参考:MySQL 高级框架实战理论笔记 GitHub 代码:lane-mysql-42 文章目录 单纯的 MySQL 实现 建表 SQL 下载并配置 sharding porxy 添加 mysql ...

  2. Avalonia UI 简介

    引用:Avalonia UI 简介 | ZZONN # 简介 Avalonia是一个跨平台的.NET框架,用于构建漂亮.现代的图形用户界面(GUI).使用Avalonia,您可以从单个代码库创建适用于 ...

  3. JQuery Smart UI 简介(四) — 强大的适用性存在问题【项目使用性介绍】

    感谢各位朋友对Smart UI的支持,对于这两天下载代码的版本的问题给大家带来不便,也深表歉意,因为手上的环境问题,总或多或少的有些问题.等后面有时间,详细整理Vs2005 - vs2010各个版本的 ...

  4. JQuery Smart UI 简介(六) — 框架设计【后篇】(数据接口、后台框架)[简介系列完结]...

    上篇介绍了Smart UI的前台架构,本篇继续后面的内容 - Data Interface.Business Layout.DataAccess. Data Interface 数据接口,Smart ...

  5. 腾讯前端组件android,前端之Android入门(2):程序目录及UI简介 - 腾讯ISUX

    在这次的文章中,将会介绍Android程序的目录结构以及UI知识,为下一篇实际例子的编写打下基础.由于文章篇幅有限,所以本着先浅后深的思路,从简单介绍入手,然后在往后实际例子编写中再深入扩展学习各个知 ...

  6. 引擎入门 | Unity UI简介–第1部分(1)

    本期我们开始为大家介绍UI,这个教程分为三大部分,在第一部分中你将熟悉Unity UI,使你能够向游戏添加自定义用户界面. 值得庆幸的是,Unity Technologies听取了社区的反馈并制定了一 ...

  7. 引擎入门 | Unity UI简介–第1部分(6)

    本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 12.Rect变换取决于当前锚点设置 13.Pivot 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇 ...

  8. 人机交互界面UI简介

    人机交互界面UI简介 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 人机交互界面UI简介 前言 1.命令行界面 CLI 2 ...

  9. Swagger UI简介

    Swagger UI 简介 Swagger UI允许任何人(无论您是开发团队还是最终用户)都可以可视化API资源并与之交互,而无需任何实现逻辑.它是根据您的OpenAPI(以前称为Swagger)规范 ...

最新文章

  1. Android应用开发:页面跳转和数据传递
  2. 数据挖掘:分享两个Pandas使用小陷阱
  3. linux颜色吸取工具,8 个优秀的 Linux 图形图像及色彩工具
  4. Shell 更好看的回显
  5. 汇编语言笔记(四):内中断
  6. 面向对象设计原则之3-里氏替换原则
  7. 程序员相亲的血泪史,千万别做这些事情!
  8. Ubuntu IPFS小白安装入门教程
  9. python简明教程电子书下载_python简明教程中文pdf下载-Python入门级电子书完整免费版-东坡下载...
  10. idea创建jsp项目并运行
  11. MySQL:数据库练习题-3
  12. 博弈论基础知识与SG函数
  13. 关于2022年电改政策的解读
  14. 好书推荐之《不能承受的生命之轻》 隐私策略(Privacy policy)
  15. 电脑如何查看wifi密码?
  16. 在传统软件公司十年深恶痛绝的感受
  17. 搭配Online:腾讯吃鸡手游《PUBG Mobile》及《和平精英》(前《刺激战场》)全球收入超15亿美元!
  18. 思科交换机配置ipv6实验
  19. 操作系统LAB1实验报告
  20. 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMP...

热门文章

  1. AltiumDesigner那些让你效率翻倍的技巧汇总 (持续更新)
  2. 机器学习 + NFT,跨界联合可以擦出什么火花?
  3. golang实现大顶堆只看这篇文章就够了
  4. YUV420格式视频下载
  5. 用DIV+CSS制作四川成都美食网页介绍
  6. Allegro Design Entry HDL
  7. <Linux开发>驱动开发 -之-platform 驱动
  8. STM32学习笔记(10)——高级定时器TIM
  9. 砸自家招牌?PS 发布准确率高达 99% 的「去 PS」神器
  10. 圆柱面展开为平面的Fortran 程序