Giter Club home page Giter Club logo

cubefs's Introduction

CubeFS

CNCF Status Build Status LICENSE Language Go Report Card Docs CII Best Practices OpenSSF Scorecard Codecov Artifact HUB CLOMonitor FOSSA Status Release Tag

 Community Meeting
The CubeFS Project holds bi-weekly community online meeting. To join or watch previous meeting notes and recordings, please see meeting schedule and meeting minutes.
CubeFS

Overview

CubeFS ("储宝" in Chinese) is an open-source cloud-native file storage system, hosted by the Cloud Native Computing Foundation (CNCF) as an incubating project.

What can you build with CubeFS

As an open-source distributed storage, CubeFS can serve as your datacenter filesystem, data lake storage infra, and private or hybrid cloud storage. In particular, CubeFS enables the separation of storage/compute architecture for databases and AI/ML applications.

Some key features of CubeFS include:

  • Multiple access protocols such as POSIX, HDFS, S3, and its own REST API
  • Highly scalable metadata service with strong consistency
  • Performance optimization of large/small files and sequential/random writes
  • Multi-tenancy support with better resource utilization and tenant isolation
  • Hybrid cloud I/O acceleration through multi-level caching
  • Flexible storage policies, high-performance replication or low-cost erasure coding
CubeFS Architecture

Documents

Community

Partners and Users

There is the list of users and success stories ADOPTERS.md.

Reference

Haifeng Liu, et al., CFS: A Distributed File System for Large Scale Container Platforms. SIGMOD‘19, June 30-July 5, 2019, Amsterdam, Netherlands.

For more information, please refer to https://dl.acm.org/citation.cfm?doid=3299869.3314046 and https://arxiv.org/abs/1911.03001

License

CubeFS is licensed under the Apache License, Version 2.0. For detail see LICENSE and NOTICE.

Note

The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order to get a stable set of binaries.

Star History

Star History Chart

cubefs's People

Contributors

ansjsun avatar awzhgw avatar baijiaruo1 avatar bladehliu avatar jasonhu520 avatar leeyubo avatar leonrayang avatar liubingxing avatar mervinkid avatar naturalselect avatar pengtianyue025 avatar sejust avatar setcy avatar shuoranliu avatar shuqiang-zheng avatar shyodx avatar tangdeyi avatar tomscut avatar true1064 avatar victor1319 avatar wenjia322 avatar wuchunhuan avatar xiangcai1215 avatar xrefft avatar xuxihao1 avatar yhjiango avatar yinlei-github avatar zhangtianjiong avatar zhuhyc avatar zhuzhengyi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cubefs's Issues

cd cmd;sh build.sh --- go:error loading module requirements

[ root@A01-R02-I182-64-CX5PD92 cmd]# sh build. shgo: finding github. com/kylelemons/godebug v1.1.0
go: finding github. com/facebookgo/stack v0.0.0-20160209184415-751773369052
go: finding github. com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a go: finding github. com/parnurzeal/gorequest vo.2.15
go: finding github. com/google/btree v1.0.0
go: finding github. com/jacobsa/fuse v0.0.0-20180417054321-cd3959611bcb go: finding github. com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f go: finding github. com/tecbot/gorocksdb v0.0.0-20190519120508-025c3cf4ffb4
go: finding bazil. org/fuse v0.0.0-20180421153158-65cc252bf669
go: golang. org/x/[email protected]: unrecognized import path "golang. org/x/net"(https fetch: Get https://golang. org/x/net? go-get=1: dial tcp 216.239.37.1:443: connect: connection timed out)
go: finding github. com/tiglabs/raft v0.0.0-20190131082128-45667fcdb8b8
go: finding github. com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f go: finding github. com/prometheus/client_golang v1.0.0
go: finding github. com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870
go: finding github. com/moul/http2curl v1.0.0
go: finding github. com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51
go: error loading module requirements

what is datanode REST_SIZE?

There is no description of REST_SIZE in the datanode config json file.
Is this the maximum usable filesystem size for chubaofs? Measured in bytes?

build.sh in cmd must change

[root@A01-R02-I182-64-CX5PD92 cmd]# sh build.sh

github.com/chubaofs/chubaofs/vendor/github.com/tecbot/gorocksdb

/usr/local/lib/librocksdb.a(db_impl.o): In function ZSTD_Supported': /export/servers/temp/rocksdb/./util/compression.h:88: undefined reference to ZSTD_versionNumber'
/usr/local/lib/librocksdb.a(options_helper.o): In function ZSTD_Supported': /export/servers/temp/rocksdb/./util/compression.h:88: undefined reference to ZSTD_versionNumber'
/usr/local/lib/librocksdb.a(format.o): In function ZSTD_Uncompress': /export/servers/temp/rocksdb/./util/compression.h:783: undefined reference to ZSTD_createDCtx'
/export/servers/temp/rocksdb/./util/compression.h:786: undefined reference to ZSTD_decompress_usingDict' /export/servers/temp/rocksdb/./util/compression.h:787: undefined reference to ZSTD_freeDCtx'
/usr/local/lib/librocksdb.a(format.o): In function LZ4_Uncompress': /export/servers/temp/rocksdb/./util/compression.h:617: undefined reference to LZ4_createStreamDecode'
/export/servers/temp/rocksdb/./util/compression.h:624: undefined reference to LZ4_decompress_safe_continue' /export/servers/temp/rocksdb/./util/compression.h:625: undefined reference to LZ4_freeStreamDecode'
/export/servers/temp/rocksdb/./util/compression.h:617: undefined reference to LZ4_createStreamDecode' /export/servers/temp/rocksdb/./util/compression.h:624: undefined reference to LZ4_decompress_safe_continue'
/export/servers/temp/rocksdb/./util/compression.h:625: undefined reference to LZ4_freeStreamDecode' /export/servers/temp/rocksdb/./util/compression.h:620: undefined reference to LZ4_setStreamDecode'
/export/servers/temp/rocksdb/./util/compression.h:620: undefined reference to LZ4_setStreamDecode' /usr/local/lib/librocksdb.a(column_family.o): In function ZSTD_Supported':
/export/servers/temp/rocksdb/./util/compression.h:88: undefined reference to ZSTD_versionNumber' /export/servers/temp/rocksdb/./util/compression.h:88: undefined reference to ZSTD_versionNumber'
/usr/local/lib/librocksdb.a(block_based_table_builder.o): In function ZSTD_Compress': /export/servers/temp/rocksdb/./util/compression.h:746: undefined reference to ZSTD_compressBound'
/export/servers/temp/rocksdb/./util/compression.h:750: undefined reference to ZSTD_createCCtx' /export/servers/temp/rocksdb/./util/compression.h:753: undefined reference to ZSTD_compress_usingDict'
/export/servers/temp/rocksdb/./util/compression.h:754: undefined reference to ZSTD_freeCCtx' /usr/local/lib/librocksdb.a(block_based_table_builder.o): In function LZ4_Compress':
/export/servers/temp/rocksdb/./util/compression.h:552: undefined reference to LZ4_compressBound' /export/servers/temp/rocksdb/./util/compression.h:557: undefined reference to LZ4_createStream'
/export/servers/temp/rocksdb/./util/compression.h:565: undefined reference to LZ4_compress_fast_continue' /export/servers/temp/rocksdb/./util/compression.h:571: undefined reference to LZ4_freeStream'
/usr/local/lib/librocksdb.a(block_based_table_builder.o): In function LZ4HC_Compress': /export/servers/temp/rocksdb/./util/compression.h:671: undefined reference to LZ4_compressBound'
/export/servers/temp/rocksdb/./util/compression.h:676: undefined reference to LZ4_createStreamHC' /export/servers/temp/rocksdb/./util/compression.h:677: undefined reference to LZ4_resetStreamHC'
/export/servers/temp/rocksdb/./util/compression.h:682: undefined reference to LZ4_loadDictHC' /export/servers/temp/rocksdb/./util/compression.h:687: undefined reference to LZ4_compress_HC_continue'
/export/servers/temp/rocksdb/./util/compression.h:693: undefined reference to LZ4_freeStreamHC' /usr/local/lib/librocksdb.a(block_based_table_builder.o): In function LZ4_Compress':
/export/servers/temp/rocksdb/./util/compression.h:560: undefined reference to `LZ4_loadDict'
collect2: error: ld returned 1 exit status


change build.sh
CGO_CFLAGS="-I/usr/local/include" CGO_LDFLAGS="-L/usr/local/lib -lrocksdb -lstdc++ -lm -lz -lbz2 -lzstd -llz4" go build -ldflags "-X main.CommitID=${CommitID} -X main.BranchName=${BranchName} -X 'main.BuildTime=${BuildTime}'" -o cfs-server
it can work

Ump folder under util

  1. We should not have any items related to UMP in our open source release
  2. We should rename the "util" folder to "utils"

Add CONTRIBUTING.md

Provide information on how to:

  • obtain, provide feedback (as bug reports or enhancements), and contribute to the software
  • explain the contribution process (e.g., are pull requests used?)
  • the requirements for acceptable contributions (e.g., a reference to any required coding standard).

as is indicated in CII Best Practices.

erasure coding of cold extents

Erasure coding of the cold extents of append-only large files can make storage space more efficient. Leveraging temporal locality to predict files and extents to be coded.

meta node is unresponsive when no master available

./cmd -c meta.json

If no master in "masterAddrs" can be reached, cmd becomes unreponsive (no ctrl-c) and can only be killed with kill -9

In addition metaNode_error.log and metaNode_debug.log rapidly fill up until no more disk space is left.

maybe cmd can just quit if no master is available or try to reach a master for a certain time before it quits

create data partition fails when only one datanode available run_test.sh does not catch the error

  • I could not find any documentation on how many datanodes(or disks?) need to be available.
  • using the configuration files from chubaofs/docker/conf/ with different ips
  • creating 2 masters, 3 metaservers, one datanode
  • then running run_test.sh
  • it shows create datapartition ok, but the partition is not created.

curl -v "http://192.168.0.131:17010/dataPartition/create?count=400&name=ltptest"

{"code":0,"msg":"success","data":" createDataPartition succeeeds. clusterLastTotalDataPartitions[0],vol[ltptest] has 0 data partitions previously and 0 data partitions now \n err[action[createDataPartition],clusterID[ltptest] vol[ltptest] Err:[cluster.go 550] no node set available for creating a data partition ]"}

log:
[ERROR] cluster.go:495: action[createDataPartition],clusterID[ltptest] vol[ltptest] Err:[cluster.go 550] no node set available for creating a data partition

curl -v "http://192.168.0.131:17010/admin/getCluster" | python -m json.tool

{
    "code": 0,
    "data": {
        "Applied": 23,
        "BadPartitionIDs": [],
        "DataNodeStatInfo": {
            "IncreasedGB": 0,
            "TotalGB": 7373,
            "UsedGB": 1949,
            "UsedRatio": "0.264"
        },
        "DataNodes": [
            {
                "Addr": "192.168.0.102:17310",
                "ID": 3,
                "IsWritable": true,
                "Status": true
            }
        ],
        "DisableAutoAlloc": false,
        "LeaderAddr": "192.168.0.131:17010",
        "MaxDataPartitionID": 0,
        "MaxMetaNodeID": 6,
        "MaxMetaPartitionID": 3,
        "MetaNodeStatInfo": {
            "IncreasedGB": 0,
            "TotalGB": 23,
            "UsedGB": 0,
            "UsedRatio": "0.004"
        },
        "MetaNodeThreshold": 0.75,
        "MetaNodes": [
            {
                "Addr": "192.168.0.119:17210",
                "ID": 4,
                "IsWritable": true,
                "Status": true
            },
            {
                "Addr": "192.168.0.127:17210",
                "ID": 2,
                "IsWritable": true,
                "Status": true
            },
            {
                "Addr": "192.168.0.137:17210",
                "ID": 5,
                "IsWritable": true,
                "Status": true
            }
        ],
        "Name": "ltptest",
        "VolStatInfo": [
            {
                "Name": "ltptest",
                "TotalGB": 30,
                "UsedGB": 0,
                "UsedRatio": "0.000"
            }
        ]
    },
    "msg": "success"
}

We strongly need a solution to address the edge computing direction for middleware, distributed file requirements

There is no distributed file system declared to be suitable for edge computing. In the field of edge computing, although resources are limited, business systems still have strong demand for middleware and databases. There are several factors that are considered in the field of edge computing:

  • A single edge computing machine is less than 10 units.
  • There are thousands of edge unit clusters, and it is difficult to maintain stable operation of these systems.

Possible solution

Strongly embrace the Cloud-Native
Specifically use the operator mode to run the distributed file system on the edge of self-maintenance

It may be possible to build and publish edge computing middleware and edge computing distributed file systems that solve edge computing scenarios.

Hope that chubaofs can do this work and incorporate the edge computing distributed file system requirements into chebaofs‘ Roadmap.

build fails 'undefined reference to `dlopen''

I am trying to build it on ubuntu 16.04
git clone https://github.com/facebook/rocksdb.git
apt install libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev libzstd1-dev liblz4-dev
cd rocksdb && make clean && ROCKSDB_NO_FBCODE=1 make static_lib -j12 && make install

cd && export GOPATH=$HOME/go
go get github.com/chubaofs/chubaofs
cd ~/go/src/github.com/chubaofs/chubaofs/cmd && sh build.sh

github.com/chubaofs/chubaofs/vendor/github.com/tiglabs/raft/proto
../vendor/github.com/tiglabs/raft/proto/codec.go:275: undefined: sort.Slice
github.com/chubaofs/chubaofs/vendor/github.com/prometheus/common/expfmt
../vendor/github.com/prometheus/common/expfmt/text_create.go:456: undefined: bytes.ContainsAny
github.com/chubaofs/chubaofs/vendor/github.com/tecbot/gorocksdb

//usr/local/lib/librocksdb.so: undefined reference to dlopen'
//usr/local/lib/librocksdb.so: undefined reference to dlclose'
//usr/local/lib/librocksdb.so: undefined reference to dlerror'
//usr/local/lib/librocksdb.so: undefined reference to dlsym'
collect2: error: ld returned 1 exit status

Requries authentication mechanism in a safe network environment

We need an authentication mechanism to address the following issues:

  • Sometimes there are tens of thousands of clients accessing the same volume, and some STALE mounted clients are a potential threat to data safety.
  • Some admin requests to master nodes are dangerous which requires authentication.

Therefore, we would like to introduce a new role called authnode to provide authentication capability.

It is important to clearify that assume we are in a safe network environment. So issues from an unsafe network environment such as hacking are out of the scope of this issue, and might be tracked by a new issue if needed.

build rocksdb must know that

1、version 5.9.2
2、install rocksdb dependency;
3、make static_lib -j 'nproc' --can build faster
4、make install

cmd creates ump folder with wrong permissions

panic: init UMP Monitor failed open /cha/warn/ump_metanode_tp.log: permission denied [recovered]
panic: init UMP Monitor failed open /cha/warn/ump_metanode_tp.log: permission denied

goroutine 1 [running]:
main.main.func1()
/root/go/src/github.com/chubaofs/chubaofs/cmd/cmd.go:112 +0xc7
panic(0x9c49c0, 0xc0006e4a40)
/usr/local/go/src/runtime/panic.go:522 +0x1b5
github.com/chubaofs/chubaofs/util/ump.InitUmp(0xc00053c060, 0x8, 0xc00053c0d0, 0xa)
/root/go/src/github.com/chubaofs/chubaofs/util/ump/ump.go:62 +0xee
main.main()
/root/go/src/github.com/chubaofs/chubaofs/cmd/cmd.go:139 +0x5ea

also :

panic: Failed to Open rocksDB! err:action[openRocksDB],err:IO error: No such file or directoryWhile mkdir if missing: /cha/Data/master/rocksdbstore: No such file or directory [recovered]
	panic: Failed to Open rocksDB! err:action[openRocksDB],err:IO error: No such file or directoryWhile mkdir if missing: /cha/Data/master/rocksdbstore: No such file or directory

the /cha/warn /cha/log /cha/Data directories do not exist when starting cmd.

ls -l
drw-r--r-- 2 owner owner 4096 Jun 20 11:57 warn/

some more friendly permissions
chmod a+x {warn,log}
mkdir -p /cha/Data/master
and
./cmd -c master.json seems to work

I think the directory structure must be created before starting cmd or the directories must be checked and created correctly when starting cmd

master.json

{
  "role": "master",
  ...
"logDir": "/cha/log/master",
"warnLogDir":"/cha/warn/",
...
}

Come up with a version/release strategy

At the moment, there are no releases (i.e., git-tags)

How will CFS release new versions and tag them? Also how will they distribute them? (e.g, dockerhub, artifactory etc)

high cpu utilisation for cfs-server

Running 3 masters on 3 different computers.
on each computer the cpu utilisation for cfs-server is around 50-70%
Is this normal?

top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
28946 root       20   0 1746172  62144  16792 S  71.5  0.8  35:24.51 cfs-server

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.