Docker 部署 ShardingSphere-Proxy 数据库中间件

news2024/9/25 9:34:53

文章目录

  • Github
  • 官网
  • 文档
  • ShardingSphere-Proxy
    • mysql-connector-java 驱动下载
    • conf 配置
    • global.yaml
    • database-sharding.yaml
    • docker
    • docker-compose.yml

Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。

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

  • ShardingSphere-Proxy: 的定位为透明化的数据库代理,理论上支持任何使用 MySQL、PostgreSQL、openGauss 协议的客户端操作数据,对异构语言、运维场景更友好。

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

Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的标准和生态。 它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。 它站在数据库的上层视角,关注它们之间的协作多于数据库自身。

在这里插入图片描述
在这里插入图片描述

Github

  • https://github.com/apache/shardingsphere

官网

  • https://shardingsphere.apache.org/index_zh.html

文档

  • https://shardingsphere.apache.org/document/current/cn/overview/

ShardingSphere-Proxy

  • https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-proxy/startup/docker/
  • https://hub.docker.com/r/apache/shardingsphere-proxy
docker pull apache/shardingsphere-proxy:latest
  • 创建缩主机目录
cd /home
mkdir shardingsphere && cd shardingsphere
mkdir ext-lib

mysql-connector-java 驱动下载

  • https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/

注: 将下载的 mysql-connector-java-8.0.25.jar 包复制到缩主机 /home/shardingsphere/ext-lib 目录下,注意自己当前 数据库版本 选择相应的驱动包。

conf 配置

  • 拷贝容器 conf 到缩主机
# 创建容器
docker run -d --name shardingsphere --entrypoint=bash apache/shardingsphere-proxy
# 复制配置
docker cp shardingsphere:/opt/shardingsphere-proxy/conf /home/shardingsphere
# 删除容器
docker rm shardingsphere

在这里插入图片描述

  • database-encrypt.yaml: 定义数据库的加密策略和配置。可能包括对特定表或列的数据加密算法、加密密钥管理等配置。

  • database-readwrite-splitting.yaml: 定义数据库读写分离的配置。读写分离可以根据不同的规则将读操作和写操作分发到不同的数据库节点或者数据库副本上,以提升数据库的读写性能和负载均衡能力。

  • global.yaml: 定义全局的配置信息,例如全局的数据源配置、全局的规则配置等。这些配置通常会影响整个 ShardingSphere 的运行行为和规则解析。

  • database-hbase.yaml: 配置和管理连接到 HBase 数据库的相关设置。这可能包括连接信息、表映射、列簇定义等。

  • database-shadow.yaml: 配置数据库影子复制(Shadow Replica)的相关设置。影子复制是一种技术,用于在生产环境中实时复制数据库的操作,以便在测试或分析时使用真实的数据副本而不影响生产系统。

  • database-mask.yaml: 配置数据脱敏(Data Masking)策略。数据脱敏用于隐藏或掩盖数据库中敏感信息,确保只有经过授权的用户可以查看特定数据的明文。

  • database-sharding.yaml: 配置数据库分片(Sharding)的策略和规则。数据库分片是一种将数据库表按照某种规则分布到多个数据库节点中的技术,以提升数据库的扩展性和性能。

global.yaml

#mode:
#  type: Cluster
#  repository:
#    type: ZooKeeper
#    props:
#      namespace: governance_ds
#      server-lists: localhost:2181
#      retryIntervalMilliseconds: 500
#      timeToLiveSeconds: 60
#      maxRetries: 3
#      operationTimeoutMilliseconds: 500

authority:
 users:
   - user: root@%
     password: '4NuMDwIzp05BdKp7Bdmf'
   - user: sharding
     password: sharding
 privilege:
   type: ALL_PERMITTED

# 分布式事务
#transaction:
#  defaultType: XA
#  providerType: Atomikos

# SQL 解析
#sqlParser:
#  sqlStatementCache:
#    initialCapacity: 2000
#    maximumSize: 65535
#  parseTreeCache:
#    initialCapacity: 128
#    maximumSize: 1024

logging:
 loggers:
 - loggerName: ShardingSphere-SQL
   additivity: true
   level: INFO
   props:
     enable: false

# 联邦查询
sqlFederation:
 sqlFederationEnabled: false
 executionPlanCache:
   initialCapacity: 2000
   maximumSize: 65535

props:
 # 系统日志输出级别,支持 DEBUG、INFO、WARN 和 ERROR,默认级别是 INFO。
 system-log-level: INFO
 # 一次查询请求在每个数据库实例中所能使用的最大连接数。
 max-connections-size-per-query: 1
 # 用于设置任务处理线程池的大小。每个 ShardingSphereDataSource 使用一个独立的线程池,同一个 JVM 的不同数据源不共享线程池。
 kernel-executor-size: 16  # Infinite by default.
 # 在 ShardingSphere-Proxy 中设置传输数据条数的 IO 刷新阈值。
 proxy-frontend-flush-threshold: 128  # The default value is 128.
 #  是否在日志中打印 SQL。打印 SQL 可以帮助开发者快速定位系统问题。日志内容包含:逻辑 SQL,真实 SQL 和 SQL 解析结果。如果开启配置,日志将使用 Topic ShardingSphere-SQL,日志级别是 INFO。
 sql-show: true
 #  在程序启动和更新时,是否检查分片元数据的结构一致性。
 check-table-metadata-enabled: false
 # Proxy 后端与数据库交互的每次获取数据行数(使用游标的情况下)。数值增大可能会增加 ShardingSphere Proxy 的内存使用。默认值为 -1,代表设置为 JDBC 驱动的最小值。
 proxy-backend-query-fetch-size: -1
 # Proxy 前端 Netty 线程池线程数量,默认值 0 代表使用 Netty 默认值。
 proxy-frontend-executor-size: 0 # Proxy frontend executor size. The default value is 0, which means let Netty decide.
 # 允许连接 Proxy 的最大客户端数量,默认值 0 代表不限制。
 proxy-frontend-max-connections: 0 # Less than or equal to 0 means no limitation.
 # Proxy 前端协议类型,支持 MySQL,PostgreSQL 和 openGauss
 proxy-frontend-database-protocol-type: MySQL
#  proxy-default-port: 3307 # Proxy default port.
#  proxy-netty-backlog: 1024 # Proxy netty backlog.
#  cdc-server-port: 33071 # CDC server port
#  proxy-frontend-ssl-enabled: false
#  proxy-frontend-ssl-cipher: ''
#  proxy-frontend-ssl-version: TLSv1.2,TLSv1.3

database-sharding.yaml

databaseName: sharding_db

dataSources:
 ds_0:
   url: jdbc:mysql://192.168.0.100:3306/demo_0?useSSL=false
   username: test1
   password: 'te123456'
   connectionTimeoutMilliseconds: 30000
   idleTimeoutMilliseconds: 60000
   maxLifetimeMilliseconds: 1800000
   maxPoolSize: 50
   minPoolSize: 1
 ds_1:
   url: jdbc:mysql://192.168.0.101:3306/demo_1?useSSL=false
   username: test2
   password: 'te123456'
   connectionTimeoutMilliseconds: 30000
   idleTimeoutMilliseconds: 60000
   maxLifetimeMilliseconds: 1800000
   maxPoolSize: 50
   minPoolSize: 1

#rules:
#- !SHARDING
#  tables:
#    t_order:
#      actualDataNodes: ds_${0..1}.t_order_${0..1}
...

docker

docker run -d --name shardingsphere \
-v /home/shardingsphere/conf:/opt/shardingsphere-proxy/conf \
-v /home/shardingsphere/ext-lib:/opt/shardingsphere-proxy/ext-lib \
-e JVM_OPTS="-Djava.awt.headless=true" \
-e CGROUP_MEM_OPTS="-XX:InitialRAMPercentage=80.0 -XX:MaxRAMPercentage=80.0 -XX:MinRAMPercentage=80.0" \
-e PORT=3308 \
-p 3308:3308 \
apache/shardingsphere-proxy:latest

docker-compose.yml

services:
  shardingsphere:
    image: apache/shardingsphere-proxy:latest
    container_name: shardingsphere
    restart: always
    ports:
      - 3308:3308
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/shardingsphere/conf:/opt/shardingsphere-proxy/conf
      - /home/shardingsphere/ext-lib:/opt/shardingsphere-proxy/ext-lib
    environment:
      PORT: 3308
      JVM_OPTS: "-Djava.awt.headless=true"
      CGROUP_MEM_OPTS: "-XX:InitialRAMPercentage=80.0 -XX:MaxRAMPercentage=80.0 -XX:MinRAMPercentage=80.0"
docker-compose up -d shardingsphere

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

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

相关文章

绿盟培训入侵排查

一、webshell 排查 1、文件特征 2、windows 3、linux 4、内存马 二、web 日志排查 1、日志排查 2、中间件报错排查 三、服务器失陷处置

Linux常用选项和指令

目录 Linux指令使用注意 用户创建与删除 ls指令 ls指令介绍 ls常见选项 ls选项组合使用 pwd指令 Linux文件系统结构 多叉树结构文件系统介绍 多叉树结构文件系统的特点 cd指令 绝对路径 相对路径 cd指令介绍 家户目录 最近访问的目录 touch指令 ​编辑mkdir指…

【HarmonyOS NEXT】鸿蒙 代码混淆

代码混淆简介 针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。 DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、编译模式为release时自动进行代码混淆。 使用约束 …

【中项第三版】系统集成项目管理工程师 | 第 10 章 启动过程组

前言 第10章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在2分。 目录 10.1 制定项目章程 10.1.1 主要输入 10.1.2 主要输出 10.2 识别干系人 10.2.1 主要输入 10.2.2 主要工具与技…

解决:WPS,在一个表格中,按多次换行,无法换到下一页

现象:在一个表格里面,多次按下回车,始终无法到下一页 解决方法:右击—>表格属性—>选择行—>勾选 允许跨页断行 效果演示 对比展示

vulnhub-NOOB-1

确认靶机 扫描靶机发现ftp Anonymous 的A大小写都可以 查看文件 解密 登录网页 点击about us会下载一个压缩包 使用工具提取 steghide info 目标文件 //查看隐藏信息 steghide extract -sf 目标文件 //提取隐藏的文件 steghide embed -cf 隐藏信息的文件 -ef…

【AI大模型新型智算中心技术体系深度分析 2024】

文末有福利! ChatGPT 系 列 大 模 型 的 发 布, 不 仅 引 爆 全 球 科 技 圈, 更 加 夯 实 了 人 工 智 能(Artificial Intelligence, AI)在未来改变人类生产生活方式、引发社会文明和竞争力代际跃迁的战略性地位。当…

CephFS文件系统存储服务

目录 1.创建 CephFS 文件系统 MDS 接口 服务端操作 1.1 在管理节点创建 mds 服务 1.2 创建存储池,启用 ceph 文件系统 1.3 查看mds状态,一个up,其余两个待命,目前的工作的是node02上的mds服务 1.4 创建用户 客户端操作 1.5…

【割点 C++BFS】2556. 二进制矩阵中翻转最多一次使路径不连通

本文涉及知识点 割点 图论知识汇总 CBFS算法 LeetCode2556. 二进制矩阵中翻转最多一次使路径不连通 给你一个下标从 0 开始的 m x n 二进制 矩阵 grid 。你可以从一个格子 (row, col) 移动到格子 (row 1, col) 或者 (row, col 1) ,前提是前往的格子值为 1 。如…

【论文阅读】Characterization of Large Language Model Development in the Datacenter

26.Characterization of Large Language Model Development in the Datacenter 出处: NSDI-2024 数据中心中大型语言模型开发的表征InternLM/AcmeTrace (github.com) 摘要 大语言模型(LLMs)在许多任务中表现出色。然而,要高效利用大规模集…

深入了解代理IP常见协议:区别与选择

代理服务器在网络使用中扮演着重要的角色,是您设备和互联网之间的中间层。它不仅可以增强网络访问的安全性和隐私保护,还可以提供许多灵活的应用。使用代理时,不同的协议类型对数据交换具有不同的规则和特征。常见的代理协议包括HTTP代理、HT…

什么样的开放式耳机好用舒服?南卡、倍思、Oladance高人气质量绝佳产品力荐!

​开放式耳机在如今社会中已经迅速成为大家购买耳机的新趋势,深受喜欢听歌和热爱运动的人群欢迎。当大家谈到佩戴的稳固性时,开放式耳机都会收到一致好评。对于热爱运动的人士而言,高品质的开放式耳机无疑是理想之选。特别是在近年来的一些骑…

有什么语音转文字免费的方法?7个软件教你快速的转换文件

有什么语音转文字免费的方法?7个软件教你快速的转换文件 将语音转化为文字是一项常见的需求,尤其是在需要记录会议、采访或演讲内容时。以下是七款免费且实用的语音转文字软件,它们各具特色,适合不同需求和用户水平。 迅捷文字识…

【正点原子i.MX93开发板试用连载体验】简单的音频分类

本文最早发表于电子发烧友论坛: 今天测试的内容是进行简单的音频分类。我们要想进行语音控制,就需要构建和训练一个基本的自动语音识别 (ASR) 模型来识别不同的单词。如果想了解这方面的知识可以参考TensorFlow的官方文档:简单的音频识别&…

DDoS攻击详解

DDoS 攻击,其本质是通过操控大量的傀儡主机或者被其掌控的网络设备,向目标系统如潮水般地发送海量的请求或数据。这种行为的目的在于竭尽全力地耗尽目标系统的网络带宽、系统资源以及服务能力,从而致使目标系统无法正常地为合法用户提供其所应…

光学、SAR卫星影像助力洞庭湖决堤抢险(附带数据下载)

​​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 7月5日下午,湖南岳阳市华容县团洲乡团北村团洲垸洞庭湖一线堤防发生决口&#xff0…

关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目,部署到IIS的时候,生成报告时,需要获取公司LOGO图片放到PDF报告文件中,这时候访问静态图片没有问题。 然后还有生成邀请二维码图片,这时候动态创建图片路径和图片也没有问题,可以在站点的…

传知代码-多行人姿态检测系统

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本项目创新在于采用多级网络串联工作来进行目标的行为分析,并使用在视频监控领域,可部署在任何有需要的人员流动密集场所(如医院,机场,养老院等)或者用于空巢…

基于SpringBoot实现轻量级的动态定时任务调度

在使用SpringBoot框架进行开发时,一般都是通过Scheduled注解进行定时任务的开发: Component public class TestTask {Scheduled(cron"0/5 * * * * ? ") //每5秒执行一次public void execute(){SimpleDateFormat df new SimpleDateFormat(…

自定义枚举对象序列化规则: 在Json中以枚举的code值表示枚举;枚举序列化时,新增枚举描述字段;String到IEnum的转换

文章目录 引言I 案例分析1.1 接口签名计算1.2 请求对象1.3 枚举对象序列化1.4 创建JavaTimeModule以支持Java 8的时间日期类型序列化和反序列化1.5 请求对象默认值处理II 在JSON中以枚举的code值来表示枚举的实现方式2.1 自定义toString方法返回code2.2 使用@JsonValue注解,只…