ShardingSphere-proxy 部署

ShardingSphere-proxy 部署

ShardingSphere-proxy 是一个开源的数据库代理中间件,定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端。

官网配置示例:

shardingsphere/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf at aac0d3026e00575114701be603ec189a02a45747 · apache/shardingsphere · GitHub

官方手册:

Overview :: ShardingSphere (apache.org)

疑问解答:

Issues · apache/shardingsphere · GitHub

一、ShardingSphere-proxy 配置分布式事务

对于一个中小型项目,一般采取分布式结构。ShardingSphere-proxy作为中间代理,用户可以通过访问它来访问多个数据库。

1.1、环境准备

  • ShardingSphere-proxy :5.1.0

  • Mysql :5.7.22

  • 192.168.10.123服务器上部署ShardingSphere-Proxy代理

  • 192.168.10.123服务器,192.168.10.128服务器

1.2、MySQL驱动jar包

ShardingSphere-proxy 没有引入连接驱动jar包,所以用户需下载jar包并引入到/lib文件夹中。

mysql-connector-java-5.1.26-bin.jar

下载:链接:百度网盘 请输入提取码

1.3、修改配置文件

  • server.yaml

     rules:
       - !AUTHORITY
         users:
           - root@:ayok
         provider:
           type: ALL_PRIVILEGES_PERMITTED
     ​
     props:
       check-duplicate-table-enabled: false
       check-table-metadata-enabled: false
       proxy-backend-driver-type: JDBC
       proxy-backend-executor-suitable: OLAP
       proxy-backend-query-fetch-size: -1
       proxy-hint-enabled: false
       proxy-opentracing-enabled: false
       show-process-list-enabled: false
       sql-federation-enabled: true
       sql-show: true

  • config-sharding.yaml

     schemaName: person
     dataSources:
       student:
         url: jdbc:mysql://192.168.10.123:3306/student?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&allowMultiQueries=true
         username: root
         password: ayok
         connectionTimeoutMilliseconds: 30000
         idleTimeoutMilliseconds: 60000
         maxLifetimeMilliseconds: 1800000
         maxPoolSize: 50
     ​
       teacher:
         url:  jdbc:mysql://192.168.10.128:3306/teacher?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&allowMultiQueries=true
         username: root
         password: ayok
         connectionTimeoutMilliseconds: 30000
         idleTimeoutMilliseconds: 60000
         maxLifetimeMilliseconds: 1800000
         maxPoolSize: 50
     ​
     #ShardingSphere 提供了三种模式的分布式事务 LOCAL, XA, BASE
     #rules:
     #  - !TRANSACTION
     #    defaultType: LOCAL

二、ShardingSphere-proxy 配置分布式事务同时设定主从

2.1、环境准备

同上

192.168.10.123主库服务器,192.168.10.128从库服务器

2.2、设定MySQL的主从同步

简单介绍一下主从同步的原理:

  1. master(主库)在每个事务跟新数据完成之前,会在binlog日志文件中记录事务;

  2. salve(从库)会开启一个I/O Thread,该线程在master打开一个普通连接,主要工作是 binlog dump process。当读取进度与master一致时,线程休眠并等待master的下一次事务跟新。I/O线程最终的目的是将这些事件写入到中继日志中(从库)。

  3. SQL Thread会读取中继日志,并顺序执行该日志中的SQL事件,从而与主数据库中的数据保持一致(从库)。

下面介绍配置实操:

  1. 修改服务器的MySQL配置,并重启服务。Linux下为/etc/my.cnf。也可以通过指令查看my.cnf目录,顺序排前优先。

     mysql --help|grep 'my.cnf'

    修改内容:

    msater:

     [mysqld]
     #设置主服务器id,在主从关系中保持唯一
     server-id=1
     #设置同步哪个数据库,此数据库变更将操作写入二进制日志Binary log
     binlog-do-db=bds-oneaccept
     #要生成的二进制日志文件名称前缀,例如:mysql-bin.000001
     log-bin=mysql-bin

    slave:

     [mysqld]
     #设置从服务器id,在主从关系中保持唯一
     server-id=2
     #要复制的数据库名称,与主Mysql配置保持一致
     replicate-do-db=bds-oneaccept
     #要生成的二进制日志文件名称前缀,例如:mysql-bin.000001
     log-bin=mysql-bin

    修改后重启服务:service mysqld restart

  2. 创建用于复制的专门用户,并授权

     CREATE USER 'rep1'@'192.168.10.128' IDENTIFIED BY 'ayok';

    然后给用户授权

     GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'192.168.10.128' IDENTIFIED BY 'ayok';

    成功后刷新权限

     flush privileges;
    
  3. 获取主数据库此刻的数据坐标,用于主从启动后,复制数据的起始位置,获取到这个值后,主数据库就不能再有数据的修改操作。

     show master status;
    
  4. 在从数据库中设置复制数据的用户、坐标等信息(主数据库的信息),执行此操作之前需保证主从数据库现时刻数据一致,因为是从设置的坐标处开始复制。

     #主数据库的地址、端口、用户、密码
     mysql> change master to master_host='192.168.10.123',
         -> master_port=3306,    
         -> master_user='root',    
         -> master_password='ayok',
         -> master_log_file='mysql-bin.0000041',   
         -> master_log_pos=1100;

    如果出现报错,需先执行 stop slave

  5. 启动复制

     start slave

    然后查看复制状态

     show salve status|G;
    
  6. 在进行简单的测试,创建表并插入一条数据(主),然后搜索数据(从)。 并在两边分别查看文件坐标 show master status;(主) show slave status\G;(从)

2.3、修改ShardingSphere-proxy 配置文件

  • server.yaml 同上

  • config-sharding.yaml

     schemaName: person
     dataSources:
       user:
         url: jdbc:mysql://192.168.10.121:3306/user?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&allowMultiQueries=true
         username: root
         password: ayok
         connectionTimeoutMilliseconds: 30000
         idleTimeoutMilliseconds: 60000
         maxLifetimeMilliseconds: 1800000
         maxPoolSize: 50
     ​
       nouh_write:
         url: jdbc:mysql://192.168.10.123:3306/student?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&allowMultiQueries=true
         username: root
         password: ayok
         connectionTimeoutMilliseconds: 30000
         idleTimeoutMilliseconds: 60000
         maxLifetimeMilliseconds: 1800000
         maxPoolSize: 50
     ​
       nouh_read:
         url:  jdbc:mysql://192.168.10.128:3306/teacher?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&allowMultiQueries=true
         username: root
         password: ayok
         connectionTimeoutMilliseconds: 30000
         idleTimeoutMilliseconds: 60000
         maxLifetimeMilliseconds: 1800000
         maxPoolSize: 50
     ​
     rules:
     - !READWRITE_SPLITTING
      dataSources:
        readwrite_ds:
          type: Static
          props:
            write-data-source-name: nouh_write
            read-data-source-names: nouh_read
          loadBalancerName: random
      loadBalancers:
        random:
          type: RANDOM

    最后做一个测试代码,看/logs下的日志文件,插入数据是否使用的nouh_write,读取数据是否使用的nouh_read

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值