ShardingSphere-sharding-proxy

本文详细介绍了Sharding-Proxy的安装、配置及使用,包括如何实现分表、分库和读写分离。Sharding-Proxy作为数据库代理,对应用透明,支持多种数据库客户端,并提供了分片策略配置,实现数据的水平扩展。
摘要由CSDN通过智能技术生成

3、sharding-proxy教程

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

  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
  • 适用于任何兼容MySQL/PostgreSQL协议的的客户端。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kGTmtq7D-1655362566178)(image/sharding-proxy.png)]对比

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

1、sharding-proxy安装

1、下载sharding-proxy的安装包

https://shardingsphere.apache.org/document/legacy/4.x/document/cn/downloads/

2、解压到linux的指定目录

2、sharding-proxy实现分表

1、进入到conf目录,修改配置文件server.yaml,修改相关的系统配置
authentication:
  users:
    root:
      password: root
    sharding:
      password: 123456 
      authorizedSchemas: sharding_db

props:
  max.connections.size.per.query: 1
  acceptor.size: 16  # The default value is available processors count * 2.
  executor.size: 16  # Infinite by default.
  proxy.frontend.flush.threshold: 128  # The default value is 128.
    # LOCAL: Proxy will run with LOCAL transaction.
    # XA: Proxy will run with XA transaction.
    # BASE: Proxy will run with B.A.S.E transaction.
  proxy.transaction.type: LOCAL
  proxy.opentracing.enabled: false
  proxy.hint.enabled: false
  query.with.cipher.column: true
  sql.show: true
  allow.range.query.with.inline.sharding: true

2、复制mysql的驱动包到lib目录下
3、配置分库分表的规则

config-sharding.yaml

schemaName: sharding_db

dataSources:
  ds_0:
    url: jdbc:mysql://192.168.85.111:3306/sharding_haha?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50

shardingRule:
  tables:
    t_order:
      actualDataNodes: ds_0.t_order_${0..1}
      tableStrategy:
        inline:
          shardingColumn: order_id
          algorithmExpression: t_order_${order_id % 2}
      keyGenerator:
        type: SNOWFLAKE
        column: order_id
  bindingTables:
    - t_order
  defaultDatabaseStrategy:
    inline:
      shardingColumn: user_id
      algorithmExpression: ds_0
  defaultTableStrategy:
    none:

4、执行相关的命令
--查看数据库,只有一个
show databases;
--切换库
use sharding_db;
--创建表,插入完成之后,在代理的连接中还是只有一个表,但是实际的物理节点有两个表
create table if not exists ds_0.t_order(order_id bigint not null,user_id int not null,status varchar(50),primary key(order_id));
--插入数据,会看到根据分片规则插入到具体的表中
insert into t_order(order_id,user_id,status) values(1,1,'proxy');

3、sharding-proxy实现分库

1、修改config-sharding.yaml配置文件
schemaName: sharding_db

dataSources:
  ds_0:
    url: jdbc:mysql://192.168.85.111:3306/sharding_haha?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
  ds_1:
    url: jdbc:mysql://192.168.85.111:3306/sharding_haha2?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50

shardingRule:
  tables:
    t_order:
      actualDataNodes: ds_$->{0..1}.t_order_${0..1}
      tableStrategy:
        inline:
          shardingColumn: order_id
          algorithmExpression: t_order_${order_id % 2}
      keyGenerator:
        type: SNOWFLAKE
        column: order_id
  bindingTables:
    - t_order
  defaultDatabaseStrategy:
    inline:
      shardingColumn: user_id
      algorithmExpression: ds_$->{user_id % 2}
  defaultTableStrategy:
    none:

2、重新启动服务并测试
create table if not exists t_order(order_id bigint not null,user_id int not null,status varchar(50),primary key(order_id));
insert into t_order(order_id,user_id,status) values(1,1,'proxy');

4、sharding-proxy实现读写分离

1、修改配置文件
schemaName:master_slave_db
  dataSource:
    master_ds:
      url: jdbc:mysql://192.168.85.111:3306/master?serverTimezone=UTC&useSSL=false
      username: root
      password: 123456
      connectionTimeoutMilliseconds: 30000
      idleTimeoutMilliseconds: 60000
      maxLifetimeMilliseconds: 1800000
      maxPoolSize: 50
    slave_ds_0:
      url: jdbc:mysql://192.168.85.111:3306/slave1?serverTimezone=UTC&useSSL=false
      username: root
      password: 123456
      connectionTimeoutMilliseconds: 30000
      idleTimeoutMilliseconds: 60000
      maxLifetimeMilliseconds: 1800000
      maxPoolSize: 50
    slave_ds_1:
      url: jdbc:mysql://192.168.85.111:3306/slave2?serverTimezone=UTC&useSSL=false
      username: root
      password: 123456
      connectionTimeoutMilliseconds: 30000
      idleTimeoutMilliseconds: 60000
      maxLifetimeMilliseconds: 1800000
      maxPoolSize: 50
masterSlaveRule:
  name:ms_ds
  masterDataSourceName:master_ds
  slaveDataSourceNames:
    - slave_ds_0
    - slave_ds_1

2、测试
--创建表
create table if not exists master.t_order(order_id bigint not null,user_id int not null,status varchar(50),primary key(order_id));
create table if not exists slave1.t_order(order_id bigint not null,user_id int not null,status varchar(50),primary key(order_id));
create table if not exists slave2.t_order(order_id bigint not null,user_id int not null,status varchar(50),primary key(order_id));
--插入数据
insert into t_order(order_id,user_id,status) values(1,1,'proxy');
--此时可以看到效果,只在master中有数据,slave中没有数据,查询不到对应的结果

--向slave中插入不同的数据
insert into slave1.t_order(order_id,user_id,status) values(2,2,'proxy2');
insert into slave2.t_order(order_id,user_id,status) values(3,3,'proxy3');
--再次执行查询可以看到对应的结果
ShardingSphere 是一个开源的分布式数据库解决方案,提供了分库分表、读写分离、弹性伸缩等功能。ShardingSphere 包含了多个组件,其中 ShardingSphere-Proxy 是为数据库访问提供了标准的 SQL 接口,而 ShardingSphere-UI 提供了可视化的界面来管理和操作 ShardingSphere 配置。 要通过 Docker 安装 ShardingSphere-ProxyShardingSphere-UI,你需要按照以下步骤操作: 1. 首先,确保你的系统中已经安装了 Docker。 2. 创建一个 Docker 网络,以确保容器之间可以互相通信。可以在终端中执行以下命令: ``` docker network create --driver bridge shardingSphereNet ``` 3. 从 Docker Hub 拉取 ShardingSphere-ProxyShardingSphere-UI 的官方镜像。可以通过以下命令完成: ``` docker pull shardingsphere/sharding-proxy docker pull shardingsphere/sharding-ui ``` 4. 运行 ShardingSphere-Proxy 容器。你需要提供数据库的配置文件(如 `server.yaml` 和 `config-xxx.yaml`),并且将其映射到容器内部的相应路径。以下是一个示例命令: ``` docker run -d --name sharding-proxy \ --network shardingSphereNet \ -v /path/to/your/proxy/configs:/opt/shardingsphere-proxy/conf \ -p 3307:3307 \ shardingsphere/sharding-proxy ``` 注意:`/path/to/your/proxy/configs` 是宿主机上存放配置文件的目录,`3307` 是容器暴露的端口,`/opt/shardingsphere-proxy/conf` 是容器中配置文件的路径。 5. 运行 ShardingSphere-UI 容器,并将其映射到宿主机的端口以便可以访问 UI。命令如下: ``` docker run -d --name sharding-ui \ --network shardingSphereNet \ -p 5000:8080 \ shardingsphere/sharding-ui ``` 这里 `5000` 是宿主机上用于访问 ShardingSphere-UI 的端口,而 `8080` 是容器内部 ShardingSphere-UI 服务的端口。 6. 配置完成后,你可以在浏览器中访问 `http://localhost:5000` 来打开 ShardingSphere-UI 的 Web 界面。 7. 使用 ShardingSphere-UI 连接到 ShardingSphere-Proxy,进行配置和管理。 请注意,具体的配置文件和启动参数可能需要根据你的实际需求和环境进行相应的调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值