(五)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;

猜你喜欢

转载自blog.csdn.net/woshiwjma956/article/details/106661771
今日推荐