Object Mount Fusion
Fusion Beta
Object Mount Fusion is currently in Beta.
Your feedback via our 🌐 Support Team will help us improve it!
Overview
Object Mount Fusion is designed to enhance local, LAN-based, high-performance, attached storage solutions (like Amazon’s Elastic File System, EFS) with the throughput of object storage.
It is a cheaper and faster solution when compared to using EFS alone.
Object Mount Fusion takes an attached storage filesystem and an (initially) empty object storage bucket/directory and exposes a single interface for both. Object Mount Fusion will migrate files between the object storage location and the local filesystem location depending on their best fit for both performance and cost.
How it Works
Object Mount Fusion combines both the local file storage and the cloud object storage into a single, virtual mount (a FUSE mount).
The files on object storage are represented as hidden links from the host filesystem to the object store.
Unlike other solutions, Object Mount enables cloud-based object storage to be used as a first-class, high-throughput tier, rather than a traditional slow archival tier.
Object Mount Fusion automatically and dynamically migrates files between the two locations according to your application behavior and usage. New files may be written into either location depending on predicted and observed access properties.
Object Mount Fusion supports multiple users, each simultaneously accessing files on multiple nodes, by combining and sharing the attached storage and mount locations.
Setting up Object Mount Fusion
Object Mount Fusion should be used within the same high-speed LAN as your object storage.
For example: If you use AWS S3, Object Mount Fusion should only be set up on EC2 nodes within the same AWS Region as the bucket to to be accessed.
If you are using an S3-compatible on-premises object storage solution, Object Mount Fusion should be set up on a computer on the same high-speed local area network (LAN).
Note: If you have already set up and are using an attached storage system (such as EFS), you may skip ahead to Mounting a Object Mount Fusion filesystem.
Otherwise, follow the steps below to configure Object Mount Fusion:
Setup an Empty Bucket on Object Storage
To use the object storage location when running Object Mount Fusion mount, you will need a location on object storage that is empty.
This will be used as the location that the Fusion filesystem will dynamically migrate data to when it’s more suitably stored on object storage.
This can either be an entirely empty bucket, or an empty directory on an existing bucket. This location must not be modified by anything but Object Mount Fusion’s filesystems.
Review the configuration steps below for your object storage provider:
AWS S3
To create a new AWS empty bucket, follow the instructions for 🌐 Creating a general purpose bucket.
Setup a New Compute Node
Object Mount Fusion needs to be set up on a compute node within the same LAN/region as the object storage bucket to be used.
You will also need to attach a high-speed file storage solution to the instance. It is recommended to configure this while creating the new instance/image.
To set up a compute node in the same region as your bucket, follow the relevant steps below for your provider:
AWS S3
Follow the AWS tutorial: 🌐 Get started with Amazon EC2.
Create an Empty Directory on Attached Storage
You will need an empty directory on your attached file storage that is writable by your user.
If you don’t have this set up yet, follow the relevant steps for your platform to attach a writable storage device to your compute node:
AWS S3
Follow the AWS guide: 🌐 Getting started with Amazon EFS.
Mounting an Object Mount Fusion Filesystem
To set up Object Mount Fusion, you need Object Mount installed on the compute node, and you need to Import S3 Credentials so that the bucket/container is accessible.
Your next steps depend on the filesystem you are using and the options used when mounting/attaching it.
Refer to the relevant section below:
- Filesystems without extended attribute support (e.g. EFS)
- Filesystems with extended attribute support (e.g. NFSv4 with Linux Kernel 5.9+)
Filesystems Without Extended Attribute Support (e.g. EFS)
Object Mount Fusion is set up and accessed through Object Mount on FUSE.
To do this, additional options must be passed to cuno mount when it is run.
You will need to:
- Use the
--fusionoption to specify the path to the associated attached storage directory - Use the
--rootoption to specify the path to the object storage
Use a command similar to the one below to enable both these options:
Example:
By running the above command, the <mount location> becomes the proper way to access the Fusion filesystem.
All operations, workflows, pipelines, etc. should be pointed to <mount location>.
Mounting the Filesystem
Refer to your environment for specific commands:
AWS S3
If the bucket is not empty, create a new empty directory on your bucket:
Create a directory on the attached-storage device (assuming you’ve mounted it at /mnt/fast) to use for this purpose:
Mount the Object Mount Fusion volume:
Note: See tables below for additional cuno mount parameters.
Filesystems With Extended Attribute Support (e.g. NFSv4 with Linux Kernel 5.9+)
When using a filesystem that supports extended attributes you should “bind” it to a cloud location first, as this does additional error checking and makes for a simpler mount/unmount procedure.
Bind a Directory to a Cloud Location:
To bind a local Fusion directory to a cloud location, use cuno fusion.
This command will configure a local pointer targeted at the cloud mount we will make later. It will also save any relevant options used at this stage as metadata; to be used by default by any mounts that use this fusion binding.
Example:
Mounting the Filesystem (After Binding)
Object Mount Fusion is set up and accessed through Object Mount on FUSE.
To do this, additional options must be used when configuring Object Mount on FUSE.
If you have already bound a directory to a cloud location, you only need to use the --root option to specify the path to the associated attached-storage directory in order to use the mount as a Fusion mount:
Refer to your environment for specific commands:
AWS S3
If the bucket is not empty, create a new empty directory on your bucket:
Create a directory on the attached-storage device (assuming you’ve mounted it at /mnt/fast) to use for this purpose:
Create and mount the Object Mount Fusion volume:
Note: See tables below for additional cuno mount and cuno fusion parameters.
Using & Testing the Object Mount Fusion filesystem
All operations, workflows, pipelines, etc. should be pointed to your mount location.
Usage Examples
The following examples assume you have mounted a Fusion filesystem at $HOME/my-fusion-filesystem.
Download data from the web into the Fusion filesystem:
List the files in the Fusion filesystem:
Unpack a tar archive:
Testing
Check that access, modification and migration are working as expected.
We recommend measuring cost differences, and the overall time taken for equivalent jobs run on attached storage alone.
Note: You can set the CUNO_DEBUG environment variable to trace, or debug at the time of mounting for more details logging information.
Not seeing what you expect? Contact us at our 🌐 Support Team.
APPENDIX TABLES: Parameters, Arguments & Options
TABLE: cuno fusion Arguments
| Argument | Description |
|---|---|
<path to attached storage backing directory> | Sets the location specified as the place to store file-storage data. This is where files that are migrated off the object store into local storage go. This can happen when access patterns suggest the file would benefit from higher IOPS, or when a file doesn’t meet the minimum size or age thresholds. |
<path to object storage backing directory> | Text |
TABLE: cuno fusion Options
| Option | Description |
|---|---|
--fusion-size-threshold <size: default 10M> (optional) | Define the minimum size that a file needs to be for it to be migrated from file storage to object storage. The argument value is of the form <INTEGER>[UNIT]. If no unit is given, the value is assumed to be in bytes. Valid units are K (Kilobytes), M (Megabytes), G (Gigabytes), T (Terabytes). |
--fusion-age-threshold <age: default 1h> (optional) | Defines the minimum age requirement for files to be considered for migration from file storage to object storage. The age is measured as the time since the most recent of the POSIX creation time, modify time, access time, and change time - in other words, the time since each of these must be greater than the set threshold. The argument value is of the form <INTEGER>[UNIT]. If no unit is given, the value is assumed to be in seconds. Valid units are s (seconds), m (minutes), h (hours), d (days). |
TABLE: cuno fusion Subcommands
| Subcommand | Description |
|---|---|
cuno fusion bind <local> <cloud> | Bind a local directory to a cloud directory. |
cuno fusion unbind <local> | Unbind a local directory from a cloud directory. |
cuno fusion rebind <local> <cloud> | Rebind a local directory to a cloud directory. |
cuno fusion info <local> | Get information about the binding at the location. |
TABLE: Relevant cuno mount Options for Object Mount Fusion:
| Argument/Option | Description | Example |
|---|---|---|
<mount location> | The location from which the Fusion filesystem will be accessed. | $HOME/my-fusion-filesystem |
--fusion "<path to attached storage backing directory>" | Enables Fusion for this mount, and sets it to use the location specified to store file-storage data. This is where files that are migrated off the object store into local storage go. This can happen when access patterns suggest the file would benefit from higher IOPS, or when a file doesn’t meet the minimum size or age thresholds. | /dev/sdf/fusion-store |
--root "<path to object storage backing directory>" | Sets the object storage location to be used as the place to store data that is better suited to be stored on object storage rather than on the file storage. | /cuno/s3/bucket/fusion-store |
--fusion-size-threshold <size: default 10M> (optional) | Defines the minimum size that a file needs to be for it to be migrated from file storage to object storage. The argument value is of the form <INTEGER>[UNIT]. If no unit is given, the value is assumed to be in bytes. Valid units are K (Kilobytes), M (Megabytes), G (Gigabytes), T (Terabytes). | |
--fusion-age-threshold <age: default 1h> (optional) | Defines the minimum age requirement for files to be considered for migration from file storage to object storage. The age is measured as the time since the most recent of the POSIX creation time, modify time, access time, and change time - in other words, the time since each of these must be greater than the set threshold. The argument value is of the form <INTEGER>[UNIT]. If no unit is given, the value is assumed to be in seconds. Valid units are s (seconds), m (minutes), h (hours), d (days). |