Overview
Chorus is data replication software designed for multiple S3 storage systems. It works by:
- Users inputting storage credentials into the Chorus configuration.
- Selecting one storage as the
mainwhile others becomefollowers. - Using Chorus's S3 API instead of the
mainstorage's API (after it has been configured and started) - Proxying Chorus requests to the
mainstorage and asynchronously replicating the data to thefollowerstorages. - Replicating all existing data from
maintofollowerin the background. - Supporting the configuration, the pausing, and the resumption of Data replication by user on a per-bucket basis with the web admin UI or CLI
Components
Chorus is structured around two main web services:
Chorus ProxyChorus Worker

The Chorus Proxy operates as an intermediary for the main S3 storage. This means that Chorus also provides an S3 API.
Here is the workflow for using Chorus Proxy (text such as -1- refers to the
numbered arrows in the above diagram):
- A request is sent to the Chorus S3 API
-1-. - The
Chorus Proxyredirects the request to themainstorage according to routing policy in config-2-3-4-7-. - For write requests (
{POST},{PUT},{DELETE}), the proxy creates a task directing changes to be copied from themainstorage tofollowerstorages according to replication policy-5-6-. - The
Chorus Workerretrieves the task and syncs changes from themainto thefollower-8-9-10-.
All changes generated by the proxy are stored in an event queue.
Chorus also has a initial migration feature for cases where the main S3
storage isn't initially empty. This allows Chorus to transfer existing data to
followers in the background. The initial migration process works as follows:
- All buckets in
mainare listed. - All objects for all listed buckets in the
mainare listed. - A task is created for each object to sync it from the
mainto thefollower. - The worker processes tasks in the background, copying or updating files as needed.
Features
- routing & replication per bucket, PAUSE & RESUME
- defining custom s3 credentials for
Chorus Proxy - syncing obj/bucket metadata, content, tags, ACL
- migrating existing data in background
- tracking replication lag
- worker rate-limit