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

文章目录

  • Github
  • 官网
  • 文档
  • ShardingSphere-Proxy
    • mysql-connector-java 驱动下载
    • conf 配置
    • global.yaml
    • database-sharding.yaml
    • database-readwrite-splitting.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-5.1.9.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}
...

database-readwrite-splitting.yaml

databaseName: readwrite_splitting_db

dataSources:
 write_ds:
   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
 read_ds_0:
   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

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.mfbz.cn/a/796888.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初学编程不知道怎么选?推荐学习的三种热门编程语言

在当今的社会需求下,市场上最常见、最受欢迎、最广泛应用的编程语言主要有三种:C语言、Java语言和Python语言。 既然要做出选择,我们就需要明白这三种编程语言各自有何特点和区别。 一、特点 C语言 高效与灵活:C语言生成的机器…

防火墙组网与安全策略实验

实验要求: 实现: 防火墙接口配置: 所有接口均配置为三层接口 由于G1/0/3口下为vlan环境,所以防火墙需要配置子接口 : 交换机划分vlan分开生产区和办公区、配置trunk干道 : 安全策略: 生产区访…

【fastadmin 开发实战】select 级联选择

先看实现的效果 1、表单页面实现级联选择 2、级联选项后台可以编辑添加 前端代码&#xff08;编辑窗口&#xff09;&#xff1a; <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(渠道归属)}:</label><…

240713_昇思学习打卡-Day25-LSTM+CRF序列标注(4)

240713_昇思学习打卡-Day25-LSTMCRF序列标注&#xff08;4&#xff09; 最后一天咯&#xff0c;做第四部分。 BiLSTMCRF模型 在实现CRF后&#xff0c;我们设计一个双向LSTMCRF的模型来进行命名实体识别任务的训练。模型结构如下&#xff1a; nn.Embedding -> nn.LSTM -&…

java各种锁介绍

在 Java 中&#xff0c;锁是用来控制多个线程对共享资源进行访问的机制。主要有以下几种类型的锁&#xff1a; 1.互斥锁&#xff08;Mutex Lock)&#xff1a;最简单的锁&#xff0c;一次只允许一个线程访问共享资源。如果一个线程获得了锁&#xff0c;其他线程必须等待锁被释放…

深度解读李彦宏的“不要卷模型,要卷应用”

深度解读李彦宏的“不要卷模型&#xff0c;要卷应用” —— AI技术的应用之道 引言 在2024世界人工智能大会的舞台上&#xff0c;李彦宏的“不要卷模型&#xff0c;要卷应用”言论犹如一石激起千层浪&#xff0c;引发了业界对AI技术发展路径的深思。本文将深入探讨这一观点&a…

JAVA设计模式>>结构型>>适配器模式

本文介绍23种设计模式中结构型模式的适配器模式 目录 1. 适配器模式 1.1 基本介绍 1.2 工作原理 1.3 适配器模式的注意事项和细节 1.4 类适配器模式 1.4.1 类适配器模式介绍 1.4.2 应用实例 1.4.3 注意事项和细节 1.5 对象适配器模式 1.5.1 基本介绍 1.5.2 …

解答|服务器只能开22端口可以申请IP地址SSL证书吗?

IP地址SSL证书&#xff0c;是一种专门颁发给公网IP地址的SSL证书&#xff0c;而不是常见的基于域名的SSL证书。SSL证书主要用于保障数据在客户端&#xff08;如用户的浏览器&#xff09;和服务器之间传输时的加密性和安全性&#xff0c;以防止数据被截取或篡改。 服务器只能开…

Python + OpenCV 简单车辆统计

目录 1 源码 2 运行结果 Python OpenCV 简单车辆统计 IDE : PyChram 1 源码 函数 car_count() 简单车辆统计 # 这是一个示例 Python 脚本。# 按 ShiftF10 执行或将其替换为您的代码。 # 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。 import cv2 impor…

windows远程桌面到 Linux系统(Ubuntu:22.04)—— 安装xrdp软件

1、在Linux系统上安装xrdp软件 sudo apt update sudo apt install xrdp2、安装完成后&#xff0c;需要开启xrdp服务 sudo systemctl start xrdp sudo systemctl enable xrdp打印返回 Synchronizing state of xrdp.service with SysV service script with /lib/systemd/system…

计算机网络通信

1、最原始的hub结构 2、局域网的交换机&#xff1a;mac和交换机端口路由表-数据链路层 mac地址 3、不同局域网之间进行通信&#xff0c;主要是路由器-网络层-ip 源ip到目标ip的不变化&#xff0c;但是mac地址在一直变化

【qt】TCP客户端如何断开连接?

disconnectFromHost() 来关闭套接字,断开连接. 当我们关闭窗口时,也需要断开连接. 需要重写关闭事件 如果当前的套接字状态是连接上的,我们就可以来断开连接. 运行结果:

C++ //练习 15.6 将Quote和Bulk_quote的对象传给15.2.1节(第529页)练习中的print_total函数,检查该函数是否正确。

C Primer&#xff08;第5版&#xff09; 练习 15.6 练习 15.6 将Quote和Bulk_quote的对象传给15.2.1节&#xff08;第529页&#xff09;练习中的print_total函数&#xff0c;检查该函数是否正确。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; ## 工具&am…

FastAPI 学习之路(三十七)元数据和文档 URL

实现前的效果 那么如何实现呢&#xff0c;第一种方式如下&#xff1a; from routers.items import item_router from routers.users import user_router""" 自定义FastApi应用中的元数据配置Title&#xff1a;在 OpenAPI 和自动 API 文档用户界面中作为 API 的…

百日筑基第二十天-一头扎进消息队列3-RabbitMQ

百日筑基第二十天-一头扎进消息队列3-RabbitMQ 如上图所示&#xff0c;RabbitMQ 由 Producer、Broker、Consumer 三个大模块组成。生产者将数据发送到 Broker&#xff0c;Broker 接收到数据后&#xff0c;将数据存储到对应的 Queue 里面&#xff0c;消费者从不同的 Queue 消费数…

一个极简的 Vue 示例

https://andi.cn/page/621516.html

HSP_15章 Python_模板设计模式和oop进阶总结

P136 模板设计模式 1. 设计模式简介 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 设计模式就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我们用不同的棋谱&#xff0c;免去我们自己再思考和摸索 2. 模板设计模式 基本…

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令&#xff0c;find 查找某个目录&#xff0c;但是不包括这个目录本身&#xff1f; Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…

Python爬虫之路(2):爬天气情况

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

卷积神经网络可视化的探索

文章目录 训练LeNet模型下载FashionMNIST数据训练保存模型 卷积神经网络可视化加载模型一个测试图像不同层对图像处理的可视化第一个卷积层的处理第二个卷积层的处理 卷积神经网络是利用图像空间结构的一种深度学习网络架构&#xff0c;图像在经过卷积层、激活层、池化层、全连…