A robust and highly-scalable implementation of MongoDB in Docker using the Autopilot Pattern
A running cluster includes the following components:
health
, and onChange
handlersStarting a new cluster is easy once you have your _env
file set with the configuration details
docker-compose up -d
docker-compose -f local-compose.yml up -d
In a few moments you'll have a running MongoDB ready for a replica set. Both the master and replicas are described as a single docker-compose
service. During startup, ContainerPilot will ask Consul if an existing master has been created. If not, the node will initialize as a new MongoDB replica set and all future nodes will be added to the replica set by the current master. All master election is handled by MongoDB itself and the result is cached in Consul.
Run docker-compose -f local-compose.yml scale mongodb=2
to add a replica (or more than one!). The replicas will automatically be added to the replica set on the master and will register themselves in Consul as replicas once they're ready.
Pass these variables via an _env
file.
LOG_LEVEL
: control the amount of logging from ContainerPilotSIGTERM
it will step down as primary; the following control those timeouts
MONGO_SECONDARY_CATCHUP_PERIOD
: the number of seconds that the mongod will wait for an electable secondary to catch up to the primaryMONGO_STEPDOWN_TIME
: the number of seconds to step down the primary, during which time the stepdown member is ineligible for becoming primaryMONGO_ELECTION_TIMEOUT
: after the primary steps down, the amount a tries to check that a new primary has been elected before the node shuts downCONSUL
(optional): when using local-compose.yml
, this will default to consul
(and thus use the DNS provided by Docker), but for deploying on Triton via docker-compose.yml
, this should be set to the CNS path of the consul
service (consul.svc.XXX...
)Not yet implemented:
MANTA_URL
: the full Manta endpoint URL. (ex. https://us-east.manta.joyent.com
)MANTA_USER
: the Manta account name.MANTA_SUBUSER
: the Manta subuser account name, if any.MANTA_ROLE
: the Manta role name, if any.MANTA_KEY_ID
: the MD5-format ssh key id for the Manta account/subuser (ex. 1a:b8:30:2e:57:ce:59:1d:16:f6:19:97:f2:60:2b:3d
); the included setup.sh
will encode this automaticallyMANTA_PRIVATE_KEY
: the private ssh key for the Manta account/subuser; the included setup.sh
will encode this automaticallyMANTA_BUCKET
: the path on Manta where backups will be stored. (ex. /myaccount/stor/triton-mysql
); the bucket must already exist and be writeable by the MANTA_USER
/MANTA_PRIVATE_KEY
Initial development of this project was sponsored by Joyent.