All Projects → chubaofs → Chubaofs

chubaofs / Chubaofs

Licence: apache-2.0
ChubaoFS (abbrev. CBFS) is a cloud native distributed file system and object store.

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Chubaofs

cubefs
CubeFS is a cloud native distributed storage platform.
Stars: ✭ 3,062 (+23.37%)
Mutual labels:  filesystem, s3, cncf, posix, object-store, cloud-native, distributed-storage, data-lake-store
Juicefs
JuiceFS is a distributed POSIX file system built on top of Redis and S3.
Stars: ✭ 4,262 (+71.72%)
Mutual labels:  s3, cloud-native, filesystem, posix
Moosefs
MooseFS – Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System (Software-Defined Storage)
Stars: ✭ 1,025 (-58.7%)
Mutual labels:  distributed-storage, filesystem, posix
lustre-release
Mirror of official Lustre development repository http://git.whamcloud.com/
Stars: ✭ 35 (-98.59%)
Mutual labels:  filesystem, posix, distributed-storage
juicefs-csi-driver
JuiceFS CSI Driver
Stars: ✭ 117 (-95.29%)
Mutual labels:  filesystem, posix, cloud-native
Goofys
a high-performance, POSIX-ish Amazon S3 file system written in Go
Stars: ✭ 3,932 (+58.42%)
Mutual labels:  s3, filesystem, posix
Seaweedfs
SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding.
Stars: ✭ 13,380 (+439.08%)
Mutual labels:  s3, distributed-storage, posix
Kubernetes Handbook
Kubernetes中文指南/云原生应用架构实践手册 - https://jimmysong.io/kubernetes-handbook
Stars: ✭ 9,420 (+279.53%)
Mutual labels:  cloud-native, cncf
Siddhi
Stream Processing and Complex Event Processing Engine
Stars: ✭ 1,185 (-52.26%)
Mutual labels:  cloud-native, cncf
Policy Hub Cli
CLI for searching Rego policies
Stars: ✭ 88 (-96.45%)
Mutual labels:  cloud-native, cncf
S3fs
Amazon S3 filesystem for PyFilesystem2
Stars: ✭ 111 (-95.53%)
Mutual labels:  s3, filesystem
Thanos
Highly available Prometheus setup with long term storage capabilities. A CNCF Incubating project.
Stars: ✭ 9,820 (+295.65%)
Mutual labels:  s3, cncf
Cords
File-system fault injection framework for distributed storage systems
Stars: ✭ 55 (-97.78%)
Mutual labels:  distributed-storage, filesystem
Rook
Storage Orchestration for Kubernetes
Stars: ✭ 9,369 (+277.48%)
Mutual labels:  cloud-native, cncf
Kubernetes With Cri O
📦 🚀 📦 - Kubernetes Cluster setup using CRI-O Runtime
Stars: ✭ 51 (-97.95%)
Mutual labels:  cloud-native, cncf
Leofs
The LeoFS Storage System
Stars: ✭ 1,439 (-42.02%)
Mutual labels:  s3, distributed-storage
Argo Workflows
Workflow engine for Kubernetes
Stars: ✭ 10,024 (+303.87%)
Mutual labels:  cncf, cloud-native
Aws Workflows On Github
Workflows for automation of AWS services setup from Github CI/CD
Stars: ✭ 95 (-96.17%)
Mutual labels:  s3, cloud-native
Kuma
🐻 The Universal Service Mesh. CNCF Sandbox Project.
Stars: ✭ 2,516 (+1.37%)
Mutual labels:  cloud-native, cncf
Curiefense
Curiefense is a unified, open source platform protecting cloud native applications.
Stars: ✭ 136 (-94.52%)
Mutual labels:  cloud-native, cncf

ChubaoFS

CNCF Status Build Status LICENSE Language Go Report Card Docs FOSSA Status CII Best Practices

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

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.

ChubaoFS

Contents

Overview

ChubaoFS (储宝文件系统 in Chinese) is a cloud-native storage platform that provides both POSIX-compliant and S3-compatible interfaces. It is hosted by the Cloud Native Computing Foundation (CNCF) as a sandbox project.

ChubaoFS has been commonly used as the underlying storage infrastructure for online applications, database or data processing services and machine learning jobs orchestrated by Kubernetes. An advantage of doing so is to separate storage from compute - one can scale up or down based on the workload and independent of the other, providing total flexibility in matching resources to the actual storage and compute capacity required at any given time.

Some key features of ChubaoFS include:

  • Scale-out metadata management

  • Strong replication consistency

  • Specific performance optimizations for large/small files and sequential/random writes

  • Multi-tenancy

  • POSIX-compatible and mountable

  • S3-compatible object storage interface

We are committed to making ChubaoFS better and more mature. Please stay tuned.

Documents

English version: https://chubaofs.readthedocs.io/en/latest/

Chinese version: https://chubaofs.readthedocs.io/zh_CN/latest/

Benchmark

Small file operation performance and scalability benchmark test by mdtest.

File Size (KB) 1 2 4 8 16 32 64 128
Creation (TPS) 70383 70383 73738 74617 69479 67435 47540 27147
Read (TPS) 108600 118193 118346 122975 116374 110795 90462 62082
Removal (TPS) 87648 84651 83532 79279 85498 86523 80946 84441
Stat (TPS) 231961 263270 264207 252309 240244 244906 273576 242930

Refer to chubaofs.readthedocs.io for performance and scalability of IO and Metadata.

Build ChubaoFS

Build for x86

$ git clone http://github.com/chubaofs/chubaofs.git
$ cd chubaofs
$ make

Build for arm64

For example,the current chubaofs directory is /root/arm64/chubaofs,build.sh will auto download follow source codes to vendor/dep directory : bzip2-1.0.6 lz4-1.9.2 zlib-1.2.11 zstd-1.4.5 gcc version as v4 or v5: cd /root/arm64/chubaofs export CPUTYPE=arm64_gcc4 && bash ./build.sh

gcc version as v9 : export CPUTYPE=arm64_gcc9 && bash ./build.sh

Also support cross compiler with docker:

gcc version as v4, support Ububtu 14.04 and up version,CentOS7.6 and up version. Check libstdc++.so.6 version must more than `GLIBCXX_3.4.19',if fail please update libstdc++.

cd /root/arm64/chubaofs
docker build --rm --tag arm64_gcc4_golang1_13_ubuntu_14_04_chubaofs ./build/compile/arm64/gcc4

make dist-clean
docker run  -v /root/arm64/chubaofs:/root/chubaofs arm64_gcc4_golang1_13_ubuntu_14_04_chubaofs /root/buildcfs.sh

Remove image:

docker image remove -f  arm64_gcc4_golang1_13_ubuntu_14_04_chubaofs

Yum Tools to Run a ChubaoFS Cluster for CentOS 7+

The list of RPM packages dependencies can be installed with:

$ yum install http://storage.jd.com/chubaofsrpm/latest/cfs-install-latest-el7.x86_64.rpm
$ cd /cfs/install
$ tree -L 2
.
├── install_cfs.yml
├── install.sh
├── iplist
├── src
└── template
    ├── client.json.j2
    ├── create_vol.sh.j2
    ├── datanode.json.j2
    ├── grafana
    ├── master.json.j2
    └── metanode.json.j2

Set parameters of the ChubaoFS cluster in iplist.

  1. [master], [datanode], [metanode], [monitor], [client] modules define IP addresses of each role.

  2. #datanode config module defines parameters of DataNodes. datanode_disks defines path and reserved space separated by ":". The path is where the data store in, so make sure it exists and has at least 30GB of space; reserved space is the minimum free space(Bytes) reserved for the path.

  3. [cfs:vars] module defines parameters for SSH connection. So make sure the port, username and password for SSH connection is unified before start.

  4. #metanode config module defines parameters of MetaNodes. metanode_totalMem defines the maximum memory(Bytes) can be use by MetaNode process.

[master]
10.196.0.1
10.196.0.2
10.196.0.3
[datanode]
...
[cfs:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass="password"
...
#datanode config
...
datanode_disks =  '"/data0:10737418240","/data1:10737418240"'
...
#metanode config
...
metanode_totalMem = "28589934592"
...

For more configurations please refer to documentation.

Start the resources of ChubaoFS cluster with script install.sh. (make sure the Master is started first)

$ bash install.sh -h
Usage: install.sh -r | --role [datanode | metanode | master | objectnode | console | monitor | client | all | createvol ] [2.1.0 or latest]
$ bash install.sh -r master
$ bash install.sh -r metanode
$ bash install.sh -r datanode
$ bash install.sh -r monitor
$ bash install.sh -r client
$ bash install.sh -r console

Check mount point at /cfs/mountpoint on client node defined in iplist.

Open http://[the IP of console system] through a browser for web console system(the IP of console system is defined in iplist). In console default user is root, password is ChubaoFSRoot. In monitor default user is admin,password is 123456.

Run a ChubaoFS Cluster within Docker

A helper tool called run_docker.sh (under the docker directory) has been provided to run ChubaoFS with docker-compose.

$ docker/run_docker.sh -r -d /data/disk

Note that /data/disk can be any directory but please make sure it has at least 10G available space.

To check the mount status, use the mount command in the client docker shell:

$ mount | grep chubaofs

To view grafana monitor metrics, open http://127.0.0.1:3000 in browser and login with admin/123456.

To run server and client separately, use the following commands:

$ docker/run_docker.sh -b
$ docker/run_docker.sh -s -d /data/disk
$ docker/run_docker.sh -c
$ docker/run_docker.sh -m

For more usage:

$ docker/run_docker.sh -h

Helm chart to Run a ChubaoFS Cluster in Kubernetes

The chubaofs-helm repository can help you deploy ChubaoFS cluster quickly in containers orchestrated by kubernetes. Kubernetes 1.12+ and Helm 3 are required. chubaofs-helm has already integrated ChubaoFS CSI plugin

Download chubaofs-helm

$ git clone https://github.com/chubaofs/chubaofs-helm
$ cd chubaofs-helm

Copy kubeconfig file

ChubaoFS CSI driver will use client-go to connect the Kubernetes API Server. First you need to copy the kubeconfig file to chubaofs-helm/chubaofs/config/ directory, and rename to kubeconfig

$ cp ~/.kube/config chubaofs/config/kubeconfig

Create configuration yaml file

Create a chubaofs.yaml file, and put it in a user-defined path. Suppose this is where we put it.

$ cat ~/chubaofs.yaml 
path:
  data: /chubaofs/data
  log: /chubaofs/log

datanode:
  disks:
    - /data0:21474836480
    - /data1:21474836480 

metanode:
  total_mem: "26843545600"

provisioner:
  kubelet_path: /var/lib/kubelet

Note that chubaofs-helm/chubaofs/values.yaml shows all the config parameters of ChubaoFS. The parameters path.data and path.log are used to store server data and logs, respectively.

Add labels to Kubernetes node

You should tag each Kubernetes node with the appropriate labels accorindly for server node and CSI node of ChubaoFS.

kubectl label node <nodename> chuabaofs-master=enabled
kubectl label node <nodename> chuabaofs-metanode=enabled
kubectl label node <nodename> chuabaofs-datanode=enabled
kubectl label node <nodename> chubaofs-csi-node=enabled

Deploy ChubaoFS cluster

$ helm install chubaofs ./chubaofs -f ~/chubaofs.yaml

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

Contributing

Recommend the standard GitHub flow based on forking and pull requests.
See CONTRIBUTING.md for detail.

Reporting a security vulnerability

See security disclosure process for detail.

Community

Partners and Users

For a list of users and success stories see ADOPTERS.md.

License

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

FOSSA Status

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].