ShardingSphere-Proxy 安装和同库分表

安装与配置:

 
  • 解压安装,安装目录自定义。本文路径:/wwwroot/service
  • 由于解压后的目录名称太长了,我把他改成了“apache-shardingsphere-5.1.1”,所以完整路径为“/wwwroot/service/apache-shardingsphere-5.1.1”
 
 
  • 进入conf目录修改配置
  • 主要的配置文件是“config-sharding.yaml”和“server.yaml”。为了防止改错,我备份了这个两个文件。
 
  • vim config-sharding.yaml 打开配置文件,找到图中的内容进行修改。
  • 修改内容如下:
schemaName: php1    #虚拟数据库名称,在链接shardingsphere-proxy后出现的数据库名称

dataSources:
  ds_0: #虚拟数据库,我是单库分表,所以就配置这一个
    url: jdbc:mysql://127.0.0.1:3306/php?serverTimezone=UTC&useSSL=false #链接真实数据库的地址,mysql和shardingsphere-proxy都是安装在一个服务器,所以地址是127.0.0.1。“demo_ds_0”改成“php”,“php”是我真实数据库的名称
    username: root      #真实数据库的帐号
    password: root      #真实数据库的密码
    connectionTimeoutMilliseconds: 30000    #连接超时控制,毫秒
    idleTimeoutMilliseconds: 60000    #连接空闲时间设置,毫秒
    maxLifetimeMilliseconds: 1800000    #连接的最大持有时间,0 为无限制
    maxPoolSize: 50     #最大链接池的数量
    minPoolSize: 1      #最小链接池的数量
#  ds_1:
#    url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
#    username: root
#    password:
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#    minPoolSize: 1
#
rules:
- !SHARDING
  tables:
    test:    #对应真实数据库中要分表的表名(包括表前缀)
      actualDataNodes: ds_0.test_${0..2}    #ds_0是dataSources下配置的虚拟数据库名称,test_${1..3}表示真实表(包含表前缀),分表分成了三个test_0,test_1,test_2
      tableStrategy:        #分表策略
        standard:        #用于单分片键的标准分片场景
          shardingColumn: id    #分片列名称,真实test表中用于分表的字段
          shardingAlgorithmName: test_inline    #分片算法名称,与shardingAlgorithms下的test_inline对应
      keyGenerateStrategy:    # 分布式序列策略
        column: id    # 自增列名称,缺省表示不使用自增主键生成器
        keyGeneratorName: snowflake    # 分布式序列算法名称

  shardingAlgorithms:    #分片算法配置
    test_inline:        #分片算法名称
      type: INLINE        #分片算法类型
      props:            #分片算法属性配置
        algorithm-expression: test_${id % 3}
  
  keyGenerators:    # 分布式序列算法配置
    snowflake:    # 分布式序列算法名称,与keyGeneratorName对应
      type: SNOWFLAKE    # 分布式序列算法类型,当前是雪花算法
 
 
 
  • vim server.yaml 打开配置文件,找到图中的内容进行修改。
  • 修改内容如下:
rules:
  - !AUTHORITY
    users:
      - root@%:root    #真是数据库的帐号:密码
    provider:
      type: ALL_PRIVILEGES_PERMITTED
 
 
  • 修改完配置后到安装目录(本文:/wwwroot/service/apache-shardingsphere-5.1.1)下的bin目录去启动服务
  • bin目录中有三个文件,内容如下:
start.bat    #window下启动文件
start.sh    #linux下启动文件
stop.sh    #linux下停止文件
  • 在bin目录中执行“./start.sh 3307”就可以启动文件(3307表示使用的端口号),执行结果如下:
  • 想知道是否启动成功,可以看启动日志,上图已经告诉了日志的路径。
  • “vim /wwwroot/service/apache-shardingsphere-5.1.1/logs/stdout.log”就可以查看日志内容,看到图中内容表示启动成功:
 
 

测试:

  • 连接ShardingSphere-Proxy,执行命令:
mysql -uroot -p -P3307 -h192.168.25.150
 
#-u  server.yaml配置中的帐号
#-p    server.yaml配置中的密码
#-P    启动服务时的端口号
#-h    ShardingSphere-Proxy服务所在的服务器地址
  • 结果如下,表示连接成功:
 
  • “show databases;” 可以查看所有的数据库,结果如下图。“php1”就是我们配置中的虚拟数据库名称。
 
  • 执行“use php1;”选择数据库
  • 执行“show tables;”查看数据库中的所有表,结果如下图:
 
  • 查看三张表中的现有数据,如下图,三张表都是空数据:
 
  • 执行“insert into test (title) values ('zhangsan');”插入一条数据,在查看结果:
 
  • 执行“insert into test (title) values ('lisi');”插入一条数据,在查看结果:
 
  • 执行“insert into test (title) values ('wangwu');”插入一条数据,在查看结果:
 
  • 执行“insert into test (title) values ('zhaoliu');”插入一条数据,在查看结果:
 
  • 到此测试完成,都能存入各个表中。
 

问题:

  • 途中遇到的问题,在插入数据的时候出现下图的错误:
 
 
  • 解决问题:
  • 在配置“config-sharding.yaml”时少写了些配置项,补上后重新启动ShardingSphere-Proxy后即可
#出现问题的配置:
rules:
- !SHARDING
  tables:
    test:    #对应真实数据库中要分表的表名(包括表前缀)
      actualDataNodes: ds_0.test_${0..2}    #ds_0是dataSources下配置的虚拟数据库名称,test_${1..3}表示真实表(包含表前缀),分表分成了三个test_0,test_1,test_2
      tableStrategy:        #分表策略
        standard:        #用于单分片键的标准分片场景
          shardingColumn: id    #分片列名称,真实test表中用于分表的字段
          shardingAlgorithmName: test_inline    #分片算法名称,与shardingAlgorithms下的test_inline对应
 
  shardingAlgorithms:    #分片算法配置
    test_inline:        #分片算法名称
      type: INLINE        #分片算法类型
      props:            #分片算法属性配置
        algorithm-expression: test_${id % 3}
 
 
#修改后的配置:
rules:
- !SHARDING
  tables:
    test:    #对应真实数据库中要分表的表名(包括表前缀)
      actualDataNodes: ds_0.test_${0..2}    #ds_0是dataSources下配置的虚拟数据库名称,test_${1..3}表示真实表(包含表前缀),分表分成了三个test_0,test_1,test_2
      tableStrategy:        #分表策略
        standard:        #用于单分片键的标准分片场景
          shardingColumn: id    #分片列名称,真实test表中用于分表的字段
          shardingAlgorithmName: test_inline    #分片算法名称,与shardingAlgorithms下的test_inline对应
      keyGenerateStrategy:
        column: id
        keyGeneratorName: snowflake
 
  shardingAlgorithms:    #分片算法配置
    test_inline:        #分片算法名称
      type: INLINE        #分片算法类型
      props:            #分片算法属性配置
        algorithm-expression: test_${id % 3}
  
  keyGenerators:
    snowflake:
      type: SNOWFLAKE    #雪花算法

 

 
 
 
 
 
 
 
posted @ 2022-05-19 17:28  疯子丶pony  阅读(1173)  评论(0编辑  收藏  举报