LeoFS is an
unstructured object/data storage for the Web and a highly available,
distributed, eventually consistent storage system.
https://leo-project.net/leofs
LeoFS is supporting the following features:
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.
Then, install Erlang.
Then, clone source of LeoFS and libraries from GitHub.
Then, build LeoFS with the following commands.
Now, you can find the LeoFS package as follow.
Then, we can start and access LeoFS with the following commands. Also, you're able to easily operate LeoFS with leofs-adm script.
A Storage System for a Data Lake and the Web
Overview
LeoFS is a highly available, distributed, eventually consistent object/blob store. If you are searching a storage system that is able to 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
- To easily access LeoFS with REST-API
- NFS Support
- NFS support was provided from LeoFS v1.1, the current status of which is beta.
- S3-API Support
- 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 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 2014GOALs
- 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
- HIGH Reliability
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.- LeoProject
- Community
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.## [CentOS]
$ sudo yum install libuuid-devel cmake check check-devel
## [Ubuntu]
$ sudo apt-get install build-essential libtool libncurses5-dev libssl-dev cmake check
##
## 1. Install libatomic
##
$ wget http://www.ivmaisoft.com/_bin/atomic_ops/libatomic_ops-7.4.4.tar.gz
$ tar xzvf libatomic_ops-7.4.4.tar.gz
$ cd libatomic_ops-7.4.4
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
##
## 2. Install Erlang (18.3)
##
$ wget http://erlang.org/download/otp_src_18.3.tar.gz
$ tar xzf otp_src_18.3.tar.gz
$ cd otp_src_18.3
$ ./configure --prefix=/usr/local/erlang/18.3 \
--enable-smp-support \
--enable-m64-build \
--enable-halfword-emulator \
--enable-kernel-poll \
--without-javac \
--disable-native-libs \
--disable-hipe \
--disable-sctp \
--enable-threads \
--with-libatomic_ops=/usr/local
$ make
$ sudo make install
##
## 3. Set PATH
##
$ vi ~/.profile
## append the follows:
export ERL_HOME=/usr/local/erlang/18.3
export PATH=$PATH:$ERL_HOME/bin
$ source ~/.profile
$ 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
$ make && make release_for_test
$ ls package/
leo_gateway/ leo_manager_0/ leo_manager_1/ leo_storage/ README.md
$ 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 | storage_0@127.0.0.1 | 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 | storage_0@127.0.0.1 | running | 433fe365 | 433fe365 | 2017-06-02 15:00:10 +0900
G | gateway_0@127.0.0.1 | 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
- AWS Signature v4 support (v1.3.0)
- Custom Metadata Support (v1.3.1)
- WIP - v1.4
- Erasure Code
- Improve compatibility S3-APIs#7
- v1.5
- Hinted Hand-off
- LeoManager's cluster replaces from Erlang's mnesia dependensy to another implementation
- Integration with distributed computing frameworks
- Hadoop integration
- Spark integration
Version 2
- v2.0
- NFS v3 Support (stable)
- Improve performance of the list objects,
the ls command
- Improve performance of the list objects,
- Improvement of the Multi Data Center Replication
- Searching objects by a custom-metadata
- Improve compatibility S3-APIs#8
- Objects Expiration into a Bucket
- Object Versioning
- Improve Web GUI console, LeoFS Center (option)
- NFS v3 Support (stable)
- v2.2
- NFS v4 Support
- Data Deduplication
- Improve compatibility S3-APIs#8
No comments:
Post a Comment