(五)ShardingSphere-Proxy的应用

ShardingSphere-Proxy简介

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

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

说白了就是一个封装了各种分库分片规则的程序,客户端调用就像之前使用数据库一样无感知,本质数据的存储还是放在配置分片规则的真实数据库中。类似Mycat的功能

使用配置

  • 官网下载ShardingSphere-Proxy最新软件
    ShardingSphere-proxy下载

  • 下载之后解压,4.1.1的版本有坑在下载解压之后lib目录中有些文件的后缀丢失,需要将所有不是.jar结尾的文件更正成.jar文件,否则会报class Not Found

  • 修改Server.yaml文件 配置ShardingSphere服务器信息,其实很简单,将authentication节点之后的注释打开改改就好。这里没有配置编排治理相关,相关参考官方文档。

    
    authentication:
    # proxy的数据库连接账号 类似mysql的 账号功能
      users:
        root:
          password: admin
        sharding:
          password: admin 
          # 类似数据库 类似create dabase test_sharding_proxy
          authorizedSchemas: test_sharding_proxy
    # 其他可以使用默认
    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打印可以打开
      sql.show: true
      allow.range.query.with.inline.sharding: false
    
    
  • 配置config-sharding.yaml文件 配置分片策略

    有了前面的配置sharding这个文件几乎跟之前sharding-JDBC一模一样

    schemaName: test_sharding_proxy
    # 配置真实数据源
    dataSources:
      ds_0:
        url: jdbc:mysql://127.0.0.1:3306/ss1?serverTimezone=UTC&useSSL=false
        username: root
        password: admin
        connectionTimeoutMilliseconds: 30000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
      ds_1:
        url: jdbc:mysql://127.0.0.1:3306/ss2?serverTimezone=UTC&useSSL=false
        username: root
        password: admin
        connectionTimeoutMilliseconds: 30000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
    # 分片规则
    shardingRule:
      tables:
        user:
          actualDataNodes: ds_${0..1}.user_${0..1}
          # 分表规则
          tableStrategy:
            inline:
              shardingColumn: id
              algorithmExpression: user_${id % 2}
          keyGenerator:
            type: SNOWFLAKE
            column: id
      bindingTables:
        - user
      # 默认分库规则
      defaultDatabaseStrategy:
        inline:
          shardingColumn: id
          algorithmExpression: ds_${id % 2}
      defaultTableStrategy:
        none:
    
  • 启动ShardingSphere-proxy

    进入bin目录 window start.bat 如果是linux start.sh 如果需要传入端口则 start.sh ${proxy_port}即可 默认3307

    • 测试 现在就可以使用mysql cli 或者 navicat等其他客户端工具连接localhost:3307这个数据库

      根据上面的配置可以使用root@admin这个账号进入,这里navicat我数据库的展示有BUG展示的是之前数据库的信息,这里直接使用命令行show dabases;即可看到test_sharding_proxy数据库.

      SHOW DABASES;
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZun4iTM-1591759203445)(C:\Users\denglw\AppData\Roaming\Typora\typora-user-images\image-20200609174203521.png)]

      因为使用的之前用的user表在使用test_sharding_proxy之后即可查询到数据

      USE test_sharding_proxy;
      SELECT * FROM user;
      

      然后尝试插入会根据具体的分库分片策略进行插入真实的数据库

      比如下面这条记录id为666是偶数会插入ss1数据中的user_0这个表

      INSERT INTO user (`id`, `name`, `age`) VALUES (666, 'name111', 666);
      
  • 配置读写分离 修改config-master_slave.yaml 跟之前配置jdbc类似

    
    # 读写分离数据库名
    schemaName: test_read_write_sperator
    
    dataSources:
      master_ds:
        url: jdbc:mysql://127.0.0.1:3306/test_master?serverTimezone=UTC&useSSL=false
        username: root
        password: admin
        connectionTimeoutMilliseconds: 30000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
      slave_ds_0:
        url: jdbc:mysql://127.0.0.1:3306/test_slave?serverTimezone=UTC&useSSL=false
        username: root
        password: admin
        connectionTimeoutMilliseconds: 30000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
    
    
    masterSlaveRule:
      name: ms_ds
      masterDataSourceName: master_ds
      slaveDataSourceNames:
        - slave_ds_0
    
  • 测试读写分离

USE test_read_write_sperator;
-- 可以看到查询出来的所有数据都是在slave数据中的
SELECT * FROM USER;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 我很高兴为您介绍Shardingsphere-ProxyShardingsphere-Proxy是为数据库读写分离和数据库多集群而设计的代理中间件,它可以帮助您更轻松地实现数据库分片,提高数据库性能和可用性。 我了解Shardingsphere-Proxy,它是一个用于提供高性能和高可用性的分布式数据库中间件。ShardingSphere ProxyShardingSphere的一个子项目,它是一个基于MySQL协议实现的数据库代理,可以实现对数据库的读写分离、分片等功能。ShardingSphere Proxy支持MySQL、PostgreSQL、Oracle和SQLServer等多种数据库,并且可以和Spring、MyBatis等常见的Java框架无缝集成。使用ShardingSphere Proxy可以提升数据库的性能和可扩展性,同时也可以减少业务代码的复杂度。 ### 回答2: ShardingSphere-ProxyShardingSphere的子项目之一,它是一个轻量级、易扩展的数据库中间件,可以将多个数据库组织成逻辑上的一个单一数据库。ShardingSphere-Proxy的主要作用是在数据库集群上提供统一的访问点,并提供一些通用的功能,例如路由、负载均衡、语句解析、分片故障转移等。 ShardingSphere-Proxy主要的特点是高可用性、高性能、易扩展,它支持多种数据源类型,例如MySQL、Oracle、SQLServer等,可以进行水平扩展,以满足更高的并发处理能力要求。此外,ShardingSphere-Proxy还支持对SQL语句进行解析,并在其中动态注入表路由条件、分表算法、分库算法等,从而实现分布式数据库的规划和管理。 ShardingSphere-Proxy还支持读写分离、分片事务等高级特性,用户可以通过读写分离实现读写分离,并通过分片事务维护分布式事务的一致性。ShardingSphere-Proxy还支持对SQL语句进行监控和统计,可以对数据库进行一些性能调优和问题定位。 总之,ShardingSphere-Proxy是一个非常实用的数据库中间件,它可以帮助用户快速搭建分布式数据库,并提供了一些高级特性和管理功能,可以极大地简化分布式数据库的开发和维护工作。同时,ShardingSphere-Proxy还在不断地完善和优化中,未来有望成为分布式数据库领域的佼佼者。 ### 回答3: ShardingSphere Proxy是一种数据中间层的解决方案,可以帮助应用程序实现高性能、高可用和分布式数据库的访问和管理。它提供了一个统一的入口,用于处理对多个数据库的请求,并使应用程序可以无感知地访问多个不同类型的数据库,包括MySQL、Oracle、SQL Server和PostgreSQL等。ShardingSphere Proxy的核心功能包括: 1. 数据分片:可以将业务数据分散到多个数据库实例中,以便对大型数据进行水平划分和分散负载。 2. 读/写分离:以提高负载处理能力和性能为目的,将读操作负载均衡到多个从数据库实例中,而写操作则集中在主数据库实例上。 3. 透明的数据访问:ShardingSphere Proxy提供了一种透明的数据访问方式,应用程序可以采用常规方式访问多个底层数据库,而不必担心如何管理和协调数据库的访问。 4. 数据库路由:根据预定义的路由规则,将请求路由到相应的数据库实例上,并执行相应的操作。 5. 动态配置和管理:ShardingSphere Proxy提供了一组API和控制台,可让管理员动态地管理和配置它所监管的数据库实例。 总之,ShardingSphere Proxy是一个解决分布式数据库访问和管理的强大工具,它帮助企业提高了性能,可扩展性和可用性,同时还降低了复杂性和成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值