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
    评论
### 回答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是一个解决分布式数据库访问和管理的强大工具,它帮助企业提高了性能,可扩展性和可用性,同时还降低了复杂性和成本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值