• 修改juicefs 源码使用oceanbase做为元数据存储


    以前有说明让juicefs 支持oceanbase 的方式,但是在测试之后发现并不是很好,所以直接基于源码进行修改是一种很不错的方法

    代码修改

    • 主要是meta 中sql.go
      具体需要的地方
      Init 地方, 删除对于mysql的特殊处理,NewSession 部分也需要
     
     // if m.db.DriverName() == "mysql" {
        //  m.updateCollate()
        // }

    还有就是NewSession 部分重新同步结构的问题, 这部分我也是禁用了

        func (m *dbMeta) NewSession() error {
        go m.refreshUsage()
        if m.conf.ReadOnly {
            return nil
        }
        if err := m.db.Sync2(new(session)); err != nil { // old client has no info field
            return err
        }
        // if m.db.DriverName() == "mysql" {
        //  m.updateCollate()
        // }
        // update the owner from uint64 to int64
        // if err := m.db.Sync2(new(flock), new(plock)); err != nil {
        //  logger.Fatalf("update table flock, plock: %s", err)
        // }

    构建

    • 构建
    make juicefs

    使用

    • docker-compose
    version: "3"
    services:
        ocenbase:
          image: oceanbase/obce-mini
          environment:
          - "OB_ROOT_PASSWORD=dalongrong"
          ports:
          - "2881:2881"
        s3:
          image: minio/minio
          environment:
          - "MINIO_ACCESS_KEY=minio"
          - "MINIO_SECRET_KEY=minio123"
          command: server /data --console-address ":9001"
          ports:
          - "9000:9000"
          - "9001:9001"
    • format
    ./juicefs format --storage minio \
        --bucket http://127.0.0.1:9000/jfs2 \
        --access-key minio \
        --secret-key minio123 \
        "mysql://root:dalongrong@(127.0.0.1:2881)/juicefs" \
        pics
    • mount
    sudo ./juicefs mount  "mysql://root:dalongrong@(127.0.0.1:2881)/juicefs"  apps

    一个参考延迟对比

    注意对比不能说明多大的问题,因为ob 面向的是分布式集群的,我部署的是mini 的性能上是不能直接和单机的mysql 比的

    • ob 的

    • mysql 的

    说明

    目前juicefs 对于mysql 处理部分是挺怪异的,后边看看官方的issue,找下为啥进行了那么多的处理,而且大家可能也会碰到


    解决方法, 但是目前此特性官方是没有直接开启的,所以还是慎重处理

     
    ALTER system set _ob_enable_prepared_statement =true; 

    参考资料

    https://juicefs.com/docs/zh/community/databases_for_metadata

  • 相关阅读:
    作为一名程序员应该具备哪些素质
    从100万个整数里找出100个最大的数
    数据库 SQL语句优化
    服务器上文件打包下载
    ThreadPoolExcutor
    几种序列化与get、set方法的关系
    idea没有错误出现红色波浪线怎么去掉?
    两个对象的属性赋值
    RandomStringUtils的使用
    IDEA中类似eclipse的workSpace的实现
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/15779969.html
Copyright © 2020-2023  润新知