• Stars
    star
    1,553
  • Rank 30,130 (Top 0.6 %)
  • Language
    Erlang
  • License
    Apache License 2.0
  • Created over 12 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The LeoFS Storage System

LeoFS - A Storage System for a Data Lake and the Web

Join the chat at https://gitter.im/leo-project/leofs Release Build Status

LeoFS Logo

Overview

LeoFS is an Enterprise Open Source Storage, and it is a highly available, distributed, eventually consistent object/blob store. If you are seeking a storage system that can store huge amount and various kind of files such as photo, movie, log data and so on, LeoFS is suitable for that.

LeoFS is supporting the following features:

  • Multi Protocol
    • S3-API Support
      • LeoFS is an Amazon S3 compatible storage system.
      • Switch to LeoFS to decrease your cost from more expensive public-cloud solutions.
    • REST-API Support
    • NFS Support
      • NFS support was provided from LeoFS v1.1, the current status of which is beta.
  • Large Object Support
    • LeoFS covers handling large size objects.
  • Multi Data Center Replication
    • LeoFS is a highly scalable, fault-tolerant distributed file system without SPOF.
    • LeoFS's cluster can be viewed as a huge capacity storage. It consists of a set of loosely connected nodes.
    • We can build a global scale storage system with easy operations

Architecture

leofs-architecture-1

LeoFS consists of three core components - LeoStorage, LeoGateway and LeoManager which depend on Erlang.

LeoGateway handles http-request and http-response from any clients when using REST-API OR S3-API. Also, it is already built in the object-cache mechanism (memory and disk cache).

LeoStorage handles GET, PUT and DELETE objects as well as metadata. Also, it has replicator, recoverer and queueing mechanism in order to keep running a storage node and realise eventual consistency.

LeoManager always monitors LeoGateway and LeoStorage nodes. The main monitoring status are Node status and RING’s checksum in order to realise to keep high availability and keep data consistency.

You can access a LeoFS system using Amazon S3 clients and the SDK.

Slide

The presentation - Scaling and High Performance Storage System: LeoFS was given at Erlang User Conference 2014 in Stockholm on June 2014

GOALs

  • LeoFS has been aiming to provide high reliability, high scalability, and high cost performance ratio:
    • HIGH Reliability
      • Nine nines - Operating ratios is 99.9999999%
    • High Scalability
      • Build huge-cluster at low cost
    • HIGH Cost Performance
      • Fast - Over 10Gbps
      • A lower cost than other storage
      • Provide easy management and easy operation

Further Reference

Build LeoFS with LeoFS Packages

LeoFS packages have been already provided on the Web. You're able to easily install LeoFS on your environments.

Here is the installation manual.

Build LeoFS From Source (For Developers)

Here, we explain how to build LeoFS from source code. First, you have to install the following packages to build Erlang and LeoFS.

Build Dependencies

## [CentOS]
$ sudo yum install cmake check-devel gcc gcc-c++ make
## [Ubuntu]
$ sudo apt-get install gcc g++ cmake make check libtool
### For Docker
$ apt-get install lsb-release

Install Erlang

You can install Erlang with kerl.

$ curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
$ chmod a+x kerl
$ mkdir -p ~/bin
$ mv kerl ~/bin/
$ echo "export PATH=$PATH:~/bin" >> ~/.bashrc
$ source ~/.bashrc
  • Install Erlang (Erlang/OTP 19.3)
$ kerl build 19.3 19.3
$ kerl list builds
19.3,19.3

$ kerl install 19.3 /path/to/19.3
$  kerl list installations
19.3 /path/to/19.3

$ source /path/to/19.3/activate
$ kerl active
The current active installation is:
/path/to/19.3

Install LeoFS

Then, clone source of LeoFS and libraries from GitHub.

$ git clone https://github.com/leo-project/leofs.git
$ cd leofs
$ git checkout -b develop remotes/origin/develop
$ ./rebar get-deps
$ ./git_checkout.sh develop

Then, build LeoFS with the following commands.

$ make && make release_for_test

Now, you can find the LeoFS package as follow.

$ ls package/
leo_gateway/  leo_manager_0/  leo_manager_1/  leo_storage/  README.md

Then, we can start and access LeoFS with the following commands. Also, you're able to easily operate LeoFS with leofs-adm script.

$ package/leo_manager_0/bin/leo_manager start
$ package/leo_manager_1/bin/leo_manager start
$ package/leo_storage/bin/leo_storage start
$ package/leo_gateway/bin/leo_gateway start
$ ./leofs-adm status
 [System Confiuration]
-----------------------------------+----------
 Item                              | Value
-----------------------------------+----------
 Basic/Consistency level
-----------------------------------+----------
                    system version | 1.3.4
                        cluster Id | leofs_1
                             DC Id | dc_1
                    Total replicas | 1
          number of successes of R | 1
          number of successes of W | 1
          number of successes of D | 1
 number of rack-awareness replicas | 0
                         ring size | 2^128
-----------------------------------+----------
 Multi DC replication settings
-----------------------------------+----------
 [mdcr] max number of joinable DCs | 2
 [mdcr] total replicas per a DC    | 1
 [mdcr] number of successes of R   | 1
 [mdcr] number of successes of W   | 1
 [mdcr] number of successes of D   | 1
-----------------------------------+----------
 Manager RING hash
-----------------------------------+----------
                 current ring-hash |
                previous ring-hash |
-----------------------------------+----------

 [State of Node(s)]
-------+--------------------------+--------------+----------------+----------------+----------------------------
 type  |           node           |    state     |  current ring  |   prev ring    |          updated at
-------+--------------------------+--------------+----------------+----------------+----------------------------
  S    | [email protected]      | attached     |                |                | 2017-06-02 14:59:20 +0900
-------+--------------------------+--------------+----------------+----------------+----------------------------

$ ./leofs-adm start
OK

$ ./leofs-adm status
 [System Confiuration]
-----------------------------------+----------
 Item                              | Value
-----------------------------------+----------
 Basic/Consistency level
-----------------------------------+----------
                    system version | 1.3.4
                        cluster Id | leofs_1
                             DC Id | dc_1
                    Total replicas | 1
          number of successes of R | 1
          number of successes of W | 1
          number of successes of D | 1
 number of rack-awareness replicas | 0
                         ring size | 2^128
-----------------------------------+----------
 Multi DC replication settings
-----------------------------------+----------
 [mdcr] max number of joinable DCs | 2
 [mdcr] total replicas per a DC    | 1
 [mdcr] number of successes of R   | 1
 [mdcr] number of successes of W   | 1
 [mdcr] number of successes of D   | 1
-----------------------------------+----------
 Manager RING hash
-----------------------------------+----------
                 current ring-hash | 433fe365
                previous ring-hash | 433fe365
-----------------------------------+----------

 [State of Node(s)]
-------+--------------------------+--------------+----------------+----------------+----------------------------
 type  |           node           |    state     |  current ring  |   prev ring    |          updated at
-------+--------------------------+--------------+----------------+----------------+----------------------------
  S    | [email protected]      | running      | 433fe365       | 433fe365       | 2017-06-02 15:00:10 +0900
  G    | [email protected]      | running      | 433fe365       | 433fe365       | 2017-06-02 15:00:12 +0900
-------+--------------------------+--------------+----------------+----------------+----------------------------

Build a LeoFS Cluster

You can easily build a LeoFS cluster. See here.

Configure LeoFS

About the configuration of LeoFS, See here.

Benchmarking

You can benchmark LeoFS with Basho Bench, and here is a documentation to benchmark LeoFS.

Integration Test

You can test LeoFS with leofs_test whether LeoFS has issues or not before getting installed LeoFS in your dev/staging/production environment(s).

Milestones

Version 1

  • DONE - v1.0
    • Multi Data Center Replication
    • Increase compatibility S3-APIs#5
      • Other bucket operations
  • DONE - v1.1
    • NFS v3 Support (alpha)
    • Improve Web GUI Console (Option)
  • DONE - v1.2
    • NFS v3 Support (beta)
    • Watchdog
    • Automated data-compaction
  • DONE - v1.3
    • NFS v3 Support (stable)
    • Improve compatibility S3-APIs#6
  • DONE - v1.4
    • Improvement of the core features
    • Integration with distributed computing frameworks#1
      • Hadoop integration
      • Spark integration

Version 2

  • WIP - v2.0
    • Erasure Code
    • Improve Data Security for GDPR and Enterprise Storages
    • Improve compatibility S3-APIs#7
    • NFS v3 Support (stable)
      • Improve performance of the list objects, the ls command
    • Improvement of the Multi Data Center Replication
    • Searching objects by a custom-metadata
  • v2.1
    • Hinted Hand-off
    • Improve compatibility S3-APIs#8
      • Objects Expiration into a Bucket
      • Object Versioning
    • Kubernetes Persistent Volumes Support
    • Integration with distributed computing frameworks#2
      • Hadoop integration
      • Spark integration
    • Improve Web GUI console, LeoFS Center (option)
  • v2.2
    • Data Deduplication
    • Improve compatibility S3-APIs#9

Versioning Policy

LeoFS adheres to the versioning policy from v1.3.3.

Licensing

LeoFS is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

Sponsors

More Repositories

1

erocksdb

Erlang bindings to RocksDB datastore
C++
68
star
2

leo_storage

🚫 DEPRECATED: leo_storage was merged into leo-project/leofs
Erlang
15
star
3

leo_object_storage

leo_object_storage is a log-structured object/BLOB storage.
Erlang
15
star
4

leo_redundant_manager

leo_redundant_manager monitors Gateway-node(s) and Storage-node(s) to keep availability and consistency. leo_redundant_manager also manages and provides routing-table(RING).
Erlang
13
star
5

leo_gateway

🚫 DEPRECATED: leo_gateway was merged into leo-project/leofs
Erlang
12
star
6

leo_mq

leo_mq is a local message-queueing library.
Erlang
12
star
7

leo_erasure

Erasure code library for Erlang
C++
12
star
8

notes

The note of LeoFS' developers and LeoFS' benchmark report to developers and users
Makefile
11
star
9

leo_center

LeoFS-Console is web-console for LeoFS. It provide log-analyzer/searcher, node status monitor and so on.
JavaScript
11
star
10

simplenfs

NFS implementation by Erlang
Erlang
10
star
11

leo_backend_db

leo_backend_db is a wrapper library for Basho bitcask, Basho eleveldb and Erlang ETS. They are used as local KVS in LeoFS.
Erlang
10
star
12

leo_manager

🚫 DEPRECATED: leo_manager was merged into leo-project/leofs
Erlang
10
star
13

leo_rpc

An original RPC library written in Erlang whose interface is similar to Erlang's buildin RPC.
Erlang
9
star
14

leo_logger

leo_logger is a logging library for LeoFS and other Erlang applications. It has plugin-mechanism.
Erlang
8
star
15

leo_cache

leo_cache is an object caching server into RAM and Disc (SSD)
Erlang
7
star
16

leo_ordning_reda

leo_ordning_reda is a library to stack objects and send stacked objects with async.
Erlang
6
star
17

leo_pod

leo_pod - A Fast Erlang worker pool manager
Erlang
6
star
18

leo_statistics

leo_statistics collects Erlang VM’s statistics and application’s statistics.
Erlang
6
star
19

leo_commons

leo_commons include common modules for LeoFS and other Erlang applications.
Erlang
5
star
20

leofs_client_tests

LeoFS’ test cases for S3-clients
Java
5
star
21

libcutil

Utility for C-lang
C
4
star
22

leo_watchdog

leo_watchdog keep monitoring an application in order to realize high-availability.
Erlang
4
star
23

leofs_package

leofs_rpm is a LeoFS' configuration file for RPM and DEB
Ruby
4
star
24

leo_mcerl

leo_mcerl is a memory cache lib for Erlang
Erlang
4
star
25

nfs_rpc_server

NFS RPC Server for LeoFS NFS Protocol
Erlang
4
star
26

leo_manager_client

"leo_manager_client" is LeoFS-Manager's client lib for Ruby
Ruby
3
star
27

leo_dcerl

leo_dcerl is a disc cache lib for Erlang
Erlang
3
star
28

leofs_concourse

An integration tool for LeoFS
Shell
3
star
29

leo_s3_libs

leo_s3_libs are S3 related libraries for LeoFS and other Erlang applications.
Erlang
3
star
30

leofs_ansible

LeoFS' Ansible for deployment and operation of LeoFS
Shell
3
star
31

leofs_doctor

Quick investigation into OTP applications on remote nodes with less operations.
Erlang
3
star
32

leofs_utils

LeoFS maintenance tools
Erlang
2
star
33

leofs_test2

A LeoFS' continuous integration application
Erlang
2
star
34

leofs_chef_cookbook

A LeoFS' chef cookbook
Ruby
2
star
35

savanna_agent

An original agent of `SavannaDB', which is able to easily retrieve metrics and statistics for Erlang's apllications.
Erlang
2
star
36

leo_csv

CSV Parser for Erlang
Erlang
1
star
37

leo_libs_docs

Leo's libraries Documentation
CSS
1
star
38

isa-l

The Intel Intelligent Storage Acceleration Library (Intel ISA-L) Open Source Version. Original code: https://01.org/intel®-storage-acceleration-library-open-source-version/downloads
C
1
star
39

savanna_commons

An original statistics library to easily calculate statistics for count data and histograms.
Erlang
1
star
40

leo_tran

leo_tran is a library to handle a data-transaction. We can easily write programs that manager a data-transaction to avoid a conflicts and reduce unnecessary requests between nodes.
Erlang
1
star