{"id":36532343,"url":"https://github.com/tianrenz2/cherryfs","last_synced_at":"2026-01-12T03:02:34.639Z","repository":{"id":64306337,"uuid":"260935616","full_name":"tianrenz2/cherryfs","owner":"tianrenz2","description":"A distributed object storage -- Operate files in a cluster as key-value based objects","archived":false,"fork":false,"pushed_at":"2021-02-28T09:55:54.000Z","size":158,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T15:55:57.187Z","etag":null,"topics":["etcd","grpc","object-storage"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tianrenz2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-03T14:02:48.000Z","updated_at":"2024-06-20T15:55:57.188Z","dependencies_parsed_at":"2023-01-15T10:45:25.281Z","dependency_job_id":null,"html_url":"https://github.com/tianrenz2/cherryfs","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/tianrenz2/cherryfs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tianrenz2%2Fcherryfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tianrenz2%2Fcherryfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tianrenz2%2Fcherryfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tianrenz2%2Fcherryfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tianrenz2","download_url":"https://codeload.github.com/tianrenz2/cherryfs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tianrenz2%2Fcherryfs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28332845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"online","status_checked_at":"2026-01-12T02:00:08.677Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["etcd","grpc","object-storage"],"created_at":"2026-01-12T03:02:33.983Z","updated_at":"2026-01-12T03:02:34.626Z","avatar_url":"https://github.com/tianrenz2.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cherryfs: A Distributed Object Storage\n\n- [Cherryfs: A Distributed Object Storage](#cherryfs-a-distributed-object-storage)\n  - [Introduction](#introduction)\n  - [Prerequisite](#prerequisite)\n  - [Components](#components)\n    - [Meta Service](#meta-service)\n    - [Chunk Service](#chunk-service)\n  - [Tutorial](#tutorial)\n    - [Chunk Service Setup](#chunk-service-setup)\n    - [Meta Service Setup](#meta-service-setup)\n    - [Client](#client)\n\n## Introduction\n\nCherryfs is a file system, or also called object storage, it is designed to distributed environment to keep files safe and tolerate bad situations such as server failure. It implements some important features such as GET\u0026PUT for file via gRPC, failover, data redundancy via replication, fault-tolerance.\n\n## Prerequisite\n\nCherryfs uses [etcd](https://github.com/etcd-io/etcd) as the metadata storage in order to keep the cluster metadata safe. So before running the meta service, etcd cluster needs to\nbe deployed in the first place (maybe using goreman), for the instruction of doing this, checkout its official [documentation](https://etcd.io/docs/v3.1.12/dev-guide/local_cluster/).\n\n## Components\n\nThere are two primary services of the cherryfs, meta service and chunk service.\n\n### Meta Service\n\nIt is responsible for managing the meta data, such as host space info and object locations, of the whole cluster.\n\n### Chunk Service\n\nIt is the local data plane, which is responsible for managing local file operations and gets requests from its peers.\n\n## Tutorial\n\nAs it is stated above, there are two services that needs to be launched to form the whole file system in the cluster.\n\n### Chunk Service Setup\n\nChunk service has to be run on all the nodes in order to provide the storage capability, also chunk service has to be started before the meta service.\n\nThere are some editable environment variables for the chunk service:\n\n``` bash\n# since the whole system is built upon etcd, the running etcd service addresses need \n# to be specified.\nETCDADDR=127.0.0.1:12380,127.0.0.1:22380,127.0.0.1:32380 \n\n# each host has its own id, there needs to be a local path to store the host's id\nHOST_ID_PATH=/etc/cherryfs/hostid\n\n# this is the path of chunk's configuration file, a sample file is located in config/chunk1.json\nCHUNK_CONFIG=/etc/chunk1.json\n\n# sample launch command\nETCDADDR=127.0.0.1:12380,127.0.0.1:22380,127.0.0.1:32380 HOST_ID_PATH=/etc/cherryfs/hostid CHUNK_CONFIG=/etc/cherryfs/chunk1.json ./cherryfs-chunk\n```\n\n### Meta Service Setup\n\nMeta service is like the conductor of the whole file system. This service is not required on all the nodes of the cluster, instead, at any moment, there is only one node that is taking this responsibility, so the number of nodes that needs to be running the meta serice should be at least 1. Keep in mind that if you run meta service only on 1 node, there would be no guarentee of the fault tolerance, the failure of this node could cause to the loss of metadata and thus the whole system will be unavailable.\n\nAnother important thing is that meta service depends on the etcd, be sure that meta service is running on the node which has been deployed in the etcd cluster.\n\nThere are some editable environment variables for the meta service:\n\n``` bash\n# since the whole system is built upon etcd, the running etcd service addresses need \n# to be specified.\nETCDADDR=127.0.0.1:12380,127.0.0.1:22380,127.0.0.1:32380 \n\n# this is the path of chunk's configuration file, a sample file is located in config/cluster_config.json\nMETA_CONFIG=/etc/cluster_config.json\n\n# sample launch command\nETCDADDR=127.0.0.1:12380,127.0.0.1:22380,127.0.0.1:32380 META_CONFIG=/etc/cherryfs/cluster_config.json ./cherryfs-meta\n```\n\n### Client\n\nTo be updated...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftianrenz2%2Fcherryfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftianrenz2%2Fcherryfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftianrenz2%2Fcherryfs/lists"}