首页 > 其他分享 >十五张图带你快速入门 shardingsphere-proxy

十五张图带你快速入门 shardingsphere-proxy

时间:2024-08-25 12:38:13浏览次数:9  
标签:JDBC 十五张 shardingsphere 分片 ShardingSphere Proxy MySQL proxy

Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品:

  • ShardingSphere-Proxy
  • ShardingSphere-JDBC

很多同学对于 ShardingSphere-JDBC 已经能非常熟悉的使用了,但关于网上关于 ShardingSphere-Proxy 5.5 的使用教程却非常少。

所以这篇文章,笔者尝试带大家快速入门 ShardingSphere-Proxy 5.5 ,理解它的基本原理以及实战流程。

1 理解 Proxy 模式

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

  • 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用;
  • 兼容 MariaDB 等基于 MySQL 协议的数据库,以及 openGauss 等基于 PostgreSQL 协议的数据库;
  • 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat 等。

代理层介于应用程序与数据库间,每次请求都需要做一次转发,请求会存在额外的时延。

这种方式对于应用非常友好,应用基本零改动,和语言无关,可以通过连接共享减少连接数消耗。

2 Proxy 模式 VS JDBC 模式

当我们在 Proxy 和 JDBC 两种模式选择时,可以参考下表对照:

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

ShardingSphere-Proxy 提供静态入口以及异构语言的支持,独立于应用程序部署,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

ShardingSphere-JDBC 采用无中心化架构,与应用程序共享资源,适用于 Java 开发的高性能的轻量级 OLTP 应用;

在业务相对复杂的场景里,可以采用混合部署的模式。

通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合于当前业务的最佳系统架构。

3 快速启动

ShardingSphere-Proxy 的启动方式有三种:二进制包、Docker 和 Helm,可以选择单机部署集群部署

本文将介绍如何通过单机二进制包方式启动 ShardingSphere-Proxy 版本号:v 5.5.0 。

1、下载

访问 下载页面,获取 ShardingSphere-Proxy 二进制安装包, 解压缩的文件目录如下:

2、将 MySQL 的 JDBC 驱动复制到 ext-lib 目录

下载驱动 mysql-connector-java-5.1.49.jar 或者 mysql-connector-java-8.0.11.jar 放入 lib 包。

3、进入 conf 目录 , 内容如下图:

4、模式配置 global.yaml

因为默认文件内容被注释掉了,所以去掉注释,如下图:

5、验证启动 proxy 服务

在 Linux 操作系统上,运行 bin/start.sh;在 Windows 操作系统上,运行 bin/start.bat,以启动 ShardingSphere-Proxy。

然后使用 MySQL 终端命令连接 ShardingSphere-Proxy 服务端:

# 将 {xx} 替换为实际参数
mysql -h {ip} -u {username} -p{password} -P 3307
# 示例命令
mysql -h 127.0.0.1 -u root -proot -P 3307

4 配置订单分片策略

现在我们需要展示新的订单库(8个分片),需要修改分片策略 。

ShardingSphere-Proxy 支持配置多个逻辑数据源,每个以database- 前缀命名的 YAML 配置文件,即为一个逻辑数据源。

因为我们是自定义分片算法,shardingsphere 内置算法并不满足,所以我们必须先编写自定义算法类。

1、 实现 ShardingAlgorithm 接口定义的算法实现类 HashSlotAlgorithm ;

2、在项目 resources 目录下创建 META-INF/services 目录 ;

3、在 META-INF/services 目录下新建文件 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm

4、 将实现类的全限定类名写入至文件 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm

5、将上述 Java 文件打包成 jar 包, 将上述 jar 包拷贝至 ext-lib 目录;

6、配置分片文件 database-myorder.yaml , 该文件用来定义订单的 4 个分片的路由策略;

最后,我们启动 Proxy 服务 , 我们发现通过 MySQL Client 查询数据库时,出现了我们配置的订单库 : myorder ,以及订单库里的三个逻辑表 。如下图:

4 Navicat 连接 shardingsphere proxy

通过 shardingjdbc5-spring 模块,插入多条记录到 4 个分片里,可以通过 navicat 连接 proxy 查看效果:

然后我们模拟在 myorder 逻辑数据库中新增一条订单记录,执行成功并且查询页正常的情况下,发现分片 ds0 中存储了刚插入的那条数据。


笔者将 proxy 算法模块也添加到了分库分表实战项目 shardingsphere-jdbc-demo 里,有兴趣的同学,可以看看这个项目。

Github 地址:https://github.com/makemyownlife/shardingsphere-jdbc-demo


标签:JDBC,十五张,shardingsphere,分片,ShardingSphere,Proxy,MySQL,proxy
From: https://www.cnblogs.com/makemylife/p/18378826

相关文章

  • awk打印除某数据项/某列数/某些列数之外其它列数据的实现以及Twemproxy(redis集群方案
    一、awk打印除某数据项/某列数/某些列数之外其它列数据的实现        偶尔碰到一个需求,我需要使用awk打印数据,但是只需要打印某列之后的其它列,比如我只要第2列及之后的所有数据,如何实现呢?实际很简单:#将$1置成空,然后打印即可awk'{$1="";print}'filepathawk'{$1......
  • proxychains4 终端代理
    一、安装sudoaptinstallproxychains4二、配置vim/etc/proxychains4.conf[ProxyList]#addproxyhere...#meanwile#defaultssetto"tor"#socks4127.0.0.19050socks5[子网IP][socket端口]#代理类型socks4:使用SOCKS4协议的代理s......
  • 在K8S中,Kube-proxy有什么功能?
    Kube-proxy是Kubernetes中的一个核心组件,它运行在每个节点上,负责实现Kubernetes服务(Services)的概念。Kube-proxy主要有以下功能:1.主要功能服务发现:Kube-proxy实现了服务发现机制,使得Pod能够通过服务名找到对应的服务端点(Endpoints)。负载均衡:当Pod需要访问......
  • lvs+keepalive大战haproxy+keepalive实现高可用集群
    华子目录lvs+keepalive实验架构实验前的准备工作1.主机准备2.KA1和KA2上安装`lvs+keepalive`3.webserver1和webserver2上安装httpd4.制作测试效果网页内容5.所有主机关闭`firewalld`和`selinux`6.开启httpd服务实验步骤1.webserver1和webserver2上配置vip2.webserver1和......
  • SNRS Day 2-1 (CBAC&Auth-Proxy)
    cbac基于内容的访问控制authenticationproxy认证代理,对穿越路由器的流量做认证审计授权.intrusionpreventionsystem(ips)cbac对数据包监控动态放行某些流量,要结合访问列表,对穿越路由器的tcp,udp进行一个监控.从而形成一个状态化的表项,基于表项动态的建立访问列表,当超......
  • haproxy
    Haproxy:官网地址:https://www.haproxy.org/介绍Haproxy是一个支持TCP,HTTP的负载均衡服务器,可以实现读写分离,session黏性等。目前主要结合脚本用于DB的主备切换使用注意:通过yumlisthaproxy可查看当前可用版本,都比较低选择LTS版本下载tar,haproxy当前仅支持linux版本。......
  • 在K8S中,Kube-Proxy为什么使用ipvs,而不使用iptables?
    Kubernetes中的kube-proxy是负责实现服务(Services)负载均衡的核心组件之一。它支持两种主要的代理模式:iptables模式和ipvs模式。这两种模式都可以用来实现服务的网络流量转发,但它们之间存在一些关键的区别。1.为什么使用ipvs而不是iptables?性能优势:连接跟踪:ipvs直......
  • 云计算实训28——haproxy(七层代理)、python代码的读写分离
    一、haproxy----高可用、负载均衡1.安装安装ntpdate[root@haproxy~]#yum-yinstallntpdate.x86_64安装ntp[root@haproxy~]#yum-yinstallntp同步时间[root@haproxy~]#ntpdatecn.ntp.org.cn启动ntp服务[root@haproxy~]#systemctlstartntpd设置开机自......
  • 云计算28-----haproxy
    一、haproxy官网https://www.haproxy.com/自由及开放源代码软件HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负我均衡,以及基TCP和HTTP的应用程序代理。HAProxy特别适用于那些负载特大的veb站点,这些站点通常又需要会活保或七层处理。HAProxy运行在......
  • 中微子代理 NeutrinoProxy-内网穿透
    一、场景描述假设有两台已经联网的电脑A和B,想通过B去访问A的WEB服务。二、NeutrinoProxy-内网穿透NeutrinoProxy 是一个基于Java和Netty技术栈开发的开源项目,其核心功能就是内网穿透。内网穿透技术可以让外部网络访问到内部网络的资源。该项目提供了丰富的功能以支持多种应用......