Navigation

Add an Arbiter to Replica Set

In some circumstances (such as you have a primary and a secondary but cost constraints prohibit adding another secondary), you may choose to add a mongod instance to a replica set as an arbiter to vote in elections.

Arbiters are mongod instances that are part of a replica set but do not hold data (i.e. do not provide data redundancy). They can, however, participate in elections.

Arbiters have minimal resource requirements and do not require dedicated hardware. You can deploy an arbiter on an application server or a monitoring host.

Important

Do not run an arbiter on the same system as a member of the replica set.

Warning

In general, avoid deploying more than one arbiter per replica set.

Considerations

Note

For the following MongoDB versions, pv1 increases the likelihood of w:1 rollbacks compared to pv0 for replica sets with arbiters:

  • MongoDB 3.4.1
  • MongoDB 3.4.0
  • MongoDB 3.2.11 or earlier

See Replica Set Protocol Versions.

An arbiter does not store data, but until the arbiter’s mongod process is added to the replica set, the arbiter will act like any other mongod process and start up with a set of data files and with a full-sized journal.

To minimize the default creation of data, set the following in the arbiter’s configuration file:

Important

The following setting is specific to arbiters.

These settings are specific to arbiters. Do not set storage.journal.enabled to false on a data-bearing node. Similarly, do not set storage.mmapv1.smallFiles unless specifically indicated.

Add an Arbiter

Warning

In general, avoid deploying more than one arbiter per replica set.

  1. Create a data directory (e.g. storage.dbPath) for the arbiter. The mongod instance uses the directory for configuration data. The directory will not hold the data set. For example, create the /var/lib/mongodb/arb directory:

    mkdir /var/lib/mongodb/arb
    
  2. Start the arbiter, specifying the data directory and the name of the replica set to join. The following starts an arbiter using the /var/lib/mongodb/arb as the dbPath and rs for the replica set name:

    mongod --port 27017 --dbpath /var/lib/mongodb/arb --replSet rs
    
  3. Connect to the primary and add the arbiter to the replica set. Use the rs.addArb() method, as in the following example:

    rs.addArb("m1.example.net:30000")
    

    This operation adds the arbiter running on port 30000 on the m1.example.net host.