ShardingSphere-Proxy 分库分表

news2024/12/26 20:50:40

安装ShardingSphere-Proxy

中间件封装

定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。

请添加图片描述
5.1.1安装:

https://shardingsphere.apache.org/document/5.1.1/cn/user-manual/shardingsphere-proxy/startup/bin/)

https://archive.apache.org/dist/shardingsphere/

下载jar包后,上传到解压到 /usr/local 文件后解压

tar -zxvf apache-shardingsphere-5.1.1-shardingsphere-proxy-bin.tar.gz 

新建ext-lib目录

cd /usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin

mkdir  ext-lib

然后将MySQL驱动mysql-connector-java-8.0.22.jar 放到ext-lib目录

修改配置文件

cd /usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/conf

vim server.yaml

左以下配置,表示任何服务器都可以使用root用户登录,并且有所有的权限

rules:
  - !AUTHORITY
    users:
      - root@%:root
    provider:
      type: ALL_PRIVILEGES_PERMITTED
# 打印sql
props:
  sql-show: true
  
  

请添加图片描述

启动:

/usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/bin/start.sh 3306

也可以指定端口号和配置文件目录:`bin/start.bat ${proxy_port} ${proxy_conf_directory}` ,不指定就是3307端口

停止:

/usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/bin/stop.sh

查看启动状态

 ps -ef|grep shardingsphere|grep -v grep

开启端口:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

重启防火墙:

firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

远程连接

mysql -h192.168.158.166 -p3306 -uroot -p

连接成功

请添加图片描述
也可以使用可视化工具连接,和正常使用mysql没有区别

请添加图片描述

配置读写分离

/conf 目录下有以下几个配置文件

请添加图片描述
修改配置文件 config-readwrite-splitting.yaml

cd  /usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/conf

vim  config-readwrite-splitting.yaml
schemaName: readwrite_splitting_db

dataSources:
  db1:
    url: jdbc:mysql://192.168.158.134:3306/distributed_server?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: psh120370
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  slave1:
    url: jdbc:mysql://192.168.158.146:3306/distributed_server?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: psh120370
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  db0:
    url: jdbc:mysql://192.168.158.165:3306/distributed_server?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: psh120370
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

rules:
- !READWRITE_SPLITTING
  dataSources:
    readwrite_ds:
      type: Static
      props:
        write-data-source-name: db1
        read-data-source-names: slave1

重新启动:

/usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/bin/start.sh 3306

对 readwrite_splitting_db 的查询就会落在 slave1 上,写就会落在 db1上,slave1 是db1的从库,readwrite_splitting_db 就是一个代理库

通过springboot整合ShardingSphere-Proxy,不需要添加任何额外的依赖,在配置数据源的时候需要连接上面的逻辑库readwrite_splitting_db

spring:
  application:
    name: shardingProxy
  cloud:
    nacos:
      discovery:
        server-addr: http://192.168.158.135:8848
        namespace: d3a69e71-1c55-411c-940a-1f275c8c7bea
      username: nacos
      password: nacos
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://192.168.158.166:3306/readwrite_splitting_db?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
      username: root
      password: root

水平分片

表结构和查询逻辑见:

https://blog.csdn.net/persistence_PSH/article/details/131367613

修改配置config-sharding.yaml

cd  /usr/local/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/conf

vim  config-sharding.yaml

这里的 schemaName 需要和上面的读写分离逻辑库的名称不一致,其实就是把原本在spring boot中的配置写到了ShardingSphere-Proxy

schemaName: sharding_db

dataSources:
  db1:
    url: jdbc:mysql://192.168.158.134:3306/distributed_server?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: psh120370
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  slave1:
    url: jdbc:mysql://192.168.158.146:3306/distributed_server?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: psh120370
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  db0:
    url: jdbc:mysql://192.168.158.165:3306/distributed_server?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: psh120370
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

rules:
- !SHARDING
  tables:
    test_order:
      actualDataNodes: db$->{0..1}.test_order$->{0..1}
      databaseStrategy:
        standard:
          shardingColumn: account
          shardingAlgorithmName: inline_account
      tableStrategy:
        standard:
          shardingColumn: order_no
          shardingAlgorithmName: hash_mod
      keyGenerateStrategy:
        column: id
        keyGeneratorName: snowflake
    test_order_item:
      actualDataNodes: db$->{0..1}.test_order_item$->{0..1}
      databaseStrategy:
        standard:
          shardingColumn: account
          shardingAlgorithmName: inline_account
      tableStrategy:
        standard:
          shardingColumn: order_no
          shardingAlgorithmName: hash_mod
      keyGenerateStrategy:
        column: id
        keyGeneratorName: snowflake

  bindingTables:
    - test_order,test_order_item


  shardingAlgorithms:
    inline_account:
      type: HASH_MOD
      props:
        sharding-count: 2
    hash_mod:
      type: HASH_MOD
      props:
        sharding-count: 2
  
  keyGenerators:
    snowflake:
      type: SNOWFLAKE

springboot配置文件

spring:
  application:
    name: shardingProxy
  cloud:
    nacos:
      discovery:
        server-addr: http://192.168.158.135:8848
        namespace: d3a69e71-1c55-411c-940a-1f275c8c7bea
      username: nacos
      password: nacos
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://192.168.158.166:3306/sharding_db?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
      username: root
      password: root

查询成功:请添加图片描述

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

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

相关文章

面试必问:四种经典限流算法

今天给大家分享一下限流方面的,大家都知道,在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。希望能够给大家带来帮助&#xf…

STM32常见面试题

一、STM32F1和F4的区别? 内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核; 主频不同:F1主频72MHz,F4主频168MHz; 浮点运算:F1无浮点运算单位,F4有; 功能性能&…

【无标题】vue中表单绑定v-model

表单绑定v-model 表单控件在实际开发中是非常常见的。特别是对于用户信息的提交,需要大量的表单。 Vue中使用v-model指令来实现表单元素和数据的双向绑定。 案例的解析: 当我们在输入框输入内容时 因为input中的v-model绑定了message,所以会…

Vue-搭建Vuex开发环境

1 安装Vuex 安装之前需要了解一个版本问题,在vue2中,要用vuex的3版本,在vue3中,要用vuex的4版本,要严格遵循这个版本要求,不然就会出现各种意想不到的问题,例如下方安装报错,就算因…

ubuntu修改应用图表|任务栏收藏|快捷方式|收藏夹

需要知道应用程序对应的.desktop文件的位置,然后使用sudo gedit打开。修改对应位置的信息就可以了。 参考:Linux下Desktop文件入门 1.desktop文件位置 一般存放在/usr/share/applications这个位置里面。 以vscode为例,使用sudo gedit code…

POJ - 2287 Tian Ji -- The Horse Racing

题目来源 2287 -- Tian Ji -- The Horse Racing (poj.org) 题目描述 田忌赛马是中国历史上一个著名的故事。 这个故事发生在2300年前,田忌是齐国的一个大官,他喜欢和齐王以及其他公子赛马。 田忌和齐王都有三类马,分别是下等马&#xff0…

1750_使用gcc对嵌入式代码控制逻辑进行测试

全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com) 相信很多人的C语言学习是从printf开始的,为了验证我们的程序代码运行结果,我们通常会选择使用printf打印出我们计算的结果看一下是否与预期一致。到了嵌入式软件开发&#…

web前端工程师个人简历编写(附详细代码)

web前端工程师 h5css3完成简历编写,效果如下: 底部附有详细代码编写 编写Web前端工程师个人简历时,需要注意以下几点: 简洁明了:简历应该简洁明了,内容要点突出,避免冗长和废话。用简洁的语言…

Boost的介绍、安装与环境配置

文章目录 一、Boost库简介二、Boost的安装与编译(一)下载解压(二)编译静态库 三、配置VS环境四、其它环境的配置(vscode、DevC)(一)在DEVC中配置使用boost库的环境(二&am…

java: 程序包javax.servlet.http不存在

问题描述 当项目从2.7.x的springboot升级到3.0.x的时候,遇到一个问题“java: 程序包javax.servlet.http不存在” 。这可能是一些包的精简变化导致的。错误信息如下: 错误代码段 package com.softdev.system.generator.config;import com.softdev.system…

深度学习-ubuntu18.04+RTX3080+cuda11.2+cudnn8.1.0下安装polarstream全纪录

1、安装 创建一个python3.7的虚拟环境 conda create --name polarstream python3.7 激活虚拟环境 source activate polarstream以下操作均在虚拟环境中进行 安装与cuda和python版本对应的torch版本,参考https://blog.csdn.net/didadifish/article/details/12748…

【软件设计师暴击考点】操作系统知识高频考点暴击系列【二】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

栈的应用——括号匹配、表达式求值、递归

目录 一、栈在括号匹配中的应用逻辑实现代码实现 二、栈在表达式求值中的应用手算实现代码实现 三、栈在递归中的应用逻辑实现代码实现 一、栈在括号匹配中的应用 括号匹配,顾名思义。若括号按照正确的格式嵌套,则可正确匹配,例如([])&#…

scratch lenet(12): LeNet-5输出层和损失函数的计算

文章目录 1. 目的2. 输出层结构2.1 Gaussian Connection2.2 Gaussian Connection 的 weight 可视化 3. Loss Function3.1 当前类别判断错误时,loss function 中的项(基本项)3.2 判断为其他类别时, loss function 中的项&#xff0…

Spring发展历程及其体系结构

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Spring 目录 发展历程体系结构 发展历程 体系结构 Spring框架的体系结构的主要组成部分: 核心容器…

idea如何集成Tomcat

(1)、这里应该找Add Configuration点击这里:如果没有标志,点击Exit (2)、这里可以配置一个配置项: (3)、loacl是本地,那个是远程:这里我选择本地 (4&#xff…

代码随想录算法训练营第四十二天 | 01背包理论基础,01背包理论基础(滚动数组),416. 分割等和子集

代码随想录算法训练营第四十二天 | 01背包理论基础,01背包理论基础(滚动数组),416. 分割等和子集 1.1 01背包理论基础 01背包 回溯法:暴力的解法是o(2^n)指数级别的时间复杂度,需要动态规划的解法来进行优…

如果你曾经拥有python,那么现在你应该拥抱Julia吗?

看完本文,您就会有较成熟的想法。 Julia和Python的区别是什么?为什么Julia适合用于大规模计算和超级计算机模拟? 你一定听说过Julia和Python这两个编程语言。虽然它们都可以用于从简单的机器学习应用程序到巨大的超级计算机模拟的所有方面&am…

Gradio的Audio组件介绍

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

ImGUI项目建立(cmake+MinGW64)

Dear ImGUI ImGui是一个轻量级的C图形界面库,它可以用于创建各种交互式的工具和编辑器。具有跨平台、高性能的特点。 ImGUI自身不能创建窗口,需要使用Win32API或glfw或SDL等工具来创建窗口,另外需要使用OpenGL或DirectX、vulkan用于渲染图形…