Community Version (v1.0)
nCloud is a multi-cloud storage system that employs erasure coding for data protection. It applies a network-coding-inspired repair technique on erasure coding for improved repair performance and supports multiple cloud storage as storage destinations. By interconnecting multiple cloud storage, nCloud enables applications to seamlessly utilize multiple cloud storage as a reliable and storage-efficient storage.
The system consists of two key entities: proxy and agent.
A proxy handles user requests and access data in storage destinations via remote Agents. It transparently distributes/reassembles data in storage destinations via coding operations. It persists file metadata and system states to a metadata store.
An agent handles data access at storage destinations within the same data center or cloud, and assists data repair by encoding data within the same data center or cloud. nCloud abstracts each storage destination as a storage container. An agent can manages multiple storage containers, while each storage container is associated with one agent.
nCloud provides file storage to applications using the SMB storage protocol. Specifically, we extended the open-source Samba framework by adding a virtual file system (VFS) module which communicates with an nCloud proxy for data storage.
nCloud proxies and agents communicates over TCP/IP connections.
nCloud adopts a modular design to enable further system expansion, e.g., addition of new features and customization.
Modules in a proxy and their functions:
- Chunk Manager: Perform data transformation between file data and chunk data to support fault tolerated data storage.
- IO: Transfer chunk data between a proxy and an agent
- Coordinator: Monitor agents' status.
- Metastore: Persist and manage file metadata and system states in the metadata store.
Modules in an agent and their functions:
- Container Manager: Execute requests on chunk data in storage destinations.
- IO: Handle requests and transfers of chunk data between a proxy and an agent
- Coordinator: Notify a proxy coordinator of its status changes and reply to requests
nCloud supports the following basic file operations:
- File create (new write)
- File read
- File overwrite (full-file)
- File copying
- File repair (recover lost chunks)
- File deletion
nCloud supports the following coding schemes for data redundancy:
nCloud realizes the repair method for RS codes for reduced repair traffic in a multi-cloud storage.
nCloud exports a file-based interface using the SMB protocol.
nCloud exports a SMB interface by extending VFS of Samba.
The SMB interface communicates with nCloud via sockets.
See the build and installation guide for the installation instructions.
Reporter (ncloud-reporter
) is a tool which communicates with a proxy to generate reports on agents' status and storage usage.
Admin portal is a user-friendly web-based portal for monitoring the nCloud system. It visualizes the status and statistics which a reporter periodically collects from a proxy.
The portal is available in the release section.
See the build and installation guide for details.
We provide example configuration files in the directory sample/
for running standalone test.
See the configuration guide for details on the available configuration options.
This example describes a setup with a Samba service, one proxy, and five agents. We assume the following
-
A Redis instance run on the same machine with the proxy as the metadata store (see the installation guide for details).
-
Samba service run on the same machine as the proxy.
-
Each machine either run a proxy or an agent.
nCloud listens on the following ports by default for entity communications.
-
Proxy: 57002, 59001
-
Agent: 57003-57004
Samba listens on port 445 by default.
-
On all machines, copy all the sample configuration files from the directory
sample/
to the working directory, e.g., thebuild
folder.cp <ncloud source root directory>/sample/*.ini .
-
On each of the agent machines, update the following fields in the configuration file
agent.ini
agent
>ip
: IP address or domain name of the respective agent machine (reachable/resolvable by the proxy machine)agent
>num_containers
: number of containers, set it to1
for 1 container over each of the four agentscontainer01
>id
: ID of the container, must be UNIQUE among all containers of all agents
-
On each of the agent machines and the proxy machine, update the following fields in the configuration file
general.ini
.proxy01
>ip
: IP address or domain name of the proxy machine
-
On the proxy machine, run the proxy, e.g., under the
build
folder../bin/proxy
-
On each agent machine, run an agent, e.g., under the
build
folder../bin/agent
-
On the proxy machine, run the reporter to check the system status, e.g., under the
build
folders../bin/ncloud-reporter
-
Make the communication library visible on the system. (Note: the paths must be absolute.)
sudo ln -s <ncloud source root directory>/build/lib/libncloud_zmq.so /usr/local/lib/
-
On the proxy machine, install the Samba service according to the installation guide and start the Samba server.
sudo service ncloud-cifs start
-
Install a Samba client, e.g.,
smbclient
on the proxy machine.sudo apt install -y smbclient
-
Upload a file using the Samba client.
smbclient -U <user> --password <password> //127.0.0.1/ncloud -c "put <path to file>"
-
Download a file using the Samba client.
smbclient -U <user> --password <password> //127.0.0.1/ncloud -c "get <filename> <download filename>"
-
Stop the Samba server.
sudo service ncloud-cifs stop
-
Terminate the proxy, by pressing "Ctrl+C", or sending a "SIGTERM" signal to it.
-
Terminate all agents, by pressing "Ctrl+C", or sending a "SIGTERM" signal to them.
Install Doxygen,
sudo apt install doxygen graphviz
Compile the documentation under the source code root directory,
doxygen
See the code contribution guidelines for details.
See the testing guide for details.
See the list of libraries for details.