Nexoedge is a multi-cloud storage system that employs erasure coding for data protection. It applies a network-coding-inspired data repair technique on erasure coding for improved repair performance and supports major cloud storage providers as storage destinations. Nexoedge enables applications to seamlessly utilize storage services by major cloud storage providers as a unified reliable and storage-efficient storage pool.
The system consists of two key entities: proxy and agent.
A proxy handles user requests and accesses data via remote agents. It transparently distributes (or reassembles) data to (or from) 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. It also assists data repair by encoding data within the same data center or cloud and transferring it across clouds. Nexoedge abstracts each storage destination as a storage container. An agent can manage one or multiple storage containers, while each storage container is always associated with one agent.
Nexoedge provides file storage access to applications via the Server Message Block (SMB) storage protocol. Specifically, we extended the open-source Samba framework by adding a virtual file system (VFS) module which communicates with an Nexoedge proxy for data storage.
In a general deployment, we assume each Nexoedge entity is hosted on a separate node (e.g., physical server or virtual machine). Agent nodes run in the cloud, whilst the proxy node runs at the edge (hosting both the proxy and the SMB server).
Nexoedge proxies and agents communicate over TCP/IP connections.
Nexoedge adopts a modular design to enable future system extension, e.g., addition of new features and customization.
Key modules in a proxy and their functions:
- Chunk Manager: Perform data transformation between file data and chunk data to achieve fault tolerance.
- I/O: 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.
Key modules in an agent and their functions:
- Container Manager: Execute requests on chunk data at storage destinations.
- I/O: Handle requests and transfers of chunk data between a proxy and an agent.
- Coordinator: Notify a proxy coordinator of agent status changes and reply to requests from proxies.
Nexoedge 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
Nexoedge supports the following coding schemes for data redundancy:
Nexoedge realizes the repair method upon RS codes for reduced repair traffic across data centers and clouds.
Nexoedge exports a file-based interface using the Server Message Block (SMB) protocol.
Nexoedge exports an SMB interface by extending Samba.
The Samba server communicates with Nexoedge via TCP/IP 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 system status (e.g., agents' status) and storage usage.
Admin portal is a user-friendly web-based portal for monitoring the Nexoedge system. It visualizes the system status and operation 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 the example configuration files in the directory sample/
for running a standalone test.
See the configuration guide for details on the available configuration options.
This example describes a setup with a Samba server, one proxy, and five agents. We assume the following
-
A Redis instance runs on the same node with the proxy as the metadata store (see the installation guide for details).
-
A Samba server runs on the same node as the proxy.
-
Each node either runs a proxy or an agent.
Nexoedge listens on the following ports by default for entity communications.
-
Proxy: 57002, 59001
-
Agent: 57003-57004
The Samba server listens on port 445 by default.
-
Follow the installation guide to build Nexoedge.
-
On all node, copy all the sample configuration files from the directory
sample/
to the working directory, e.g., under thebuild
folder.cp <nexoedge source root directory>/sample/*.ini .
-
On each agent node, update the following fields in the configuration file
agent.ini
agent
>ip
: IP address or domain name of the respective agent node (reachable/resolvable by the proxy node)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 agent node and the proxy node, update the following fields in the configuration file
general.ini
.proxy01
>ip
: IP address or domain name of the proxy node
-
On the proxy node, run the proxy, e.g., under the
build
folder../bin/proxy
-
On each agent node, run an agent, e.g., under the
build
folder../bin/agent
-
On the proxy node, run the reporter to check the system status, e.g., under the
build
folder../bin/ncloud-reporter
-
Make the communication library visible on the system. (Note: the paths must be absolute.)
sudo ln -s <nexoedge source root directory>/build/lib/libncloud_zmq.so /usr/local/lib/
-
On the proxy node, 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 node.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.
The project source code is released under the Apache License, version 2.0 (see also the license file).
The project documentation is released under the Creative Commons Attribution 4.0 International License.