Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

A MongoDB replica set on Ubuntu is a group of mongod servers that maintain the same data set, elect one primary for writes, and keep one or more secondary members ready to take over. The reliable setup sequence is: install the same MongoDB release on each host, give every host a stable resolvable name, configure an identical replica-set name, allow inter-member traffic, initialize the set once, and verify the election with rs.status().

The commands below target MongoDB’s official mongodb-org packages. MongoDB publishes a separate repository path for each server release and Ubuntu release; select the path matching your version and CPU architecture before installing.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What a MongoDB replica set does

A replica set is MongoDB’s standard high-availability topology. One member normally holds the PRIMARY state and accepts writes. Other members are SECONDARY nodes that replicate the primary’s oplog. If the primary becomes unavailable, the remaining voting members can hold an election and choose a new primary.

This guide configures three members, which is a common starting topology because it can maintain a majority during the loss of one member. A replica set is not a backup system: replication copies operational changes, including accidental deletions, so schedule and test separate backups.

Replication also does not remove the need for operational ownership. On self-managed servers, your team is responsible for package updates, disk capacity, log review, firewall changes, credentials, certificates, monitoring, backups, and recovery tests. Treat the initial installation as the beginning of a runbook rather than the complete availability plan.

Choose the hosts and version before installing

Supported Ubuntu releases and architecture

The MongoDB 8.0 Ubuntu package instructions document 64-bit Ubuntu 24.04 (Noble), 22.04 (Jammy), and 20.04 (Focal). Other MongoDB releases may support a different set of Ubuntu versions. Check the intended operating-system release and architecture on every server:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
lsb_release -a
dpkg --print-architecture
uname -m

Use one MongoDB server release across all members. Mixing package generations makes upgrades and troubleshooting harder and can prevent a member from starting. Select the repository instructions for the exact MongoDB release, Ubuntu codename, and architecture; a repository for the wrong codename can produce missing packages or dependency failures.

Use stable, mutually resolvable hostnames

Give each server a name that every member and client can resolve, for example:

  • mongodb0.example.net
  • mongodb1.example.net
  • mongodb2.example.net

MongoDB recommends hostnames rather than hard-coded IP addresses so an address change does not require rewriting the replica-set configuration. From MongoDB 5.0 onward, nodes configured only with IP addresses can fail startup validation. Confirm forward and reverse resolution from each server before initialization, and use exactly the same spelling in DNS, net.bindIp, and the member list passed to rs.initiate().

Plan network access

MongoDB binds to localhost by default. Each member therefore needs a reachable bind address and firewall access for the MongoDB listener (normally TCP port 27017) from the other members and from approved clients. Keep the servers on a private network where possible. Never expose an unauthenticated mongod directly to the public internet.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Document which network path each member will use before editing configuration. A hostname that resolves to a management interface, an unreachable private address, or an address blocked by a security group can leave the daemon running while preventing replication. Member-to-member access must be allowed in both directions; client access can usually be narrower.

Remove the Ubuntu package conflict

Ubuntu’s unrelated mongodb package conflicts with MongoDB’s official mongodb-org package. If that package is installed, remove it according to your change-control procedure before installing mongodb-org; do not install both package families on the same host. Apply the same package policy to every member so service files, binaries, and default paths are consistent.

Install MongoDB from the official repository

Perform the installation on all three servers. First install the tools needed to add the MongoDB repository:

sudo apt-get update
sudo apt-get install -y gnupg curl

Next, follow MongoDB’s repository instructions for the exact server release and Ubuntu codename you selected. Those instructions import MongoDB’s signing key, create the matching file under /etc/apt/sources.list.d/ (for example, a file named for the release), and then refresh APT metadata. Do not substitute a repository for a different Ubuntu codename or architecture.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

After the matching repository is configured, install the server and shell packages:

sudo apt-get update
sudo apt-get install -y mongodb-org

Repeat the same package procedure on every member so that binaries and configuration defaults are consistent. Keep a record of the MongoDB release installed on each host. If APT reports a conflict, stop and resolve the unrelated Ubuntu mongodb package rather than forcing both package families into the installation.

Start and enable the mongod service

Start MongoDB, inspect its systemd status, and enable it at boot on each host:

sudo systemctl start mongod
sudo systemctl status mongod
sudo systemctl enable mongod

The default log file is /var/log/mongodb/mongod.log. Follow it while diagnosing startup or connection problems:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo tail -f /var/log/mongodb/mongod.log

If systemd reports that mongod.service is missing immediately after installation, reload unit files and retry:

sudo systemctl daemon-reload
sudo systemctl start mongod

Do not proceed to replica-set initialization until the daemon starts cleanly on every server. A service that is active on one host but stopped, repeatedly restarting, or failing configuration validation on another cannot form a healthy set.

Configure every member with the same replica-set name

Edit /etc/mongod.conf on each host. The replica-set name must be identical everywhere. The bind list must include localhost plus the hostname (or another address) that the other members and clients will use. On mongodb0.example.net, the relevant pattern is:

replication:
  replSetName: rs0
net:
  bindIp: localhost,mongodb0.example.net

Use the corresponding hostname on the other two machines:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
replication:
  replSetName: rs0
net:
  bindIp: localhost,mongodb1.example.net
replication:
  replSetName: rs0
net:
  bindIp: localhost,mongodb2.example.net

Keep the existing package-generated settings unless you intentionally need to change them. YAML indentation matters: use spaces, not tabs. A localhost-only bind prevents remote members from connecting even when DNS and firewall rules are correct.

The value rs0 is only an example. You may choose another name, but it must be copied exactly to every configuration file and to the top-level _id in the initialization document. Member IDs inside the members array are separate numeric identifiers and must be unique within that array.

Restart the service after saving the file on each host:

sudo systemctl restart mongod

Check systemctl status mongod and the log after every restart. If a daemon fails, fix its configuration before changing the other members. Resolve syntax, hostname, and permission problems while the deployment is still isolated; troubleshooting is harder after an incomplete initialization.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Secure the replica set before allowing client traffic

Internal member authentication

For a networked deployment, configure authentication between members and authorization for clients. MongoDB’s keyfile method uses one shared secret file on every member. Add the following to each /etc/mongod.conf:

security:
  keyFile: /etc/mongodb/keyfile
replication:
  replSetName: rs0
net:
  bindIp: localhost,mongodb0.example.net

Use each host’s own name in its bindIp value. Copy the same keyfile securely to all members, make it readable only by the account that runs mongod, and apply restrictive ownership and permissions. The exact service account and permission commands depend on the Ubuntu package and local hardening policy, so confirm them on the target system rather than assuming a username.

Restart all members after the keyfile is present and before initializing or reconnecting with clients. Enabling a keyfile also enables role-based access control for clients, so client connections must use database credentials with appropriate roles. Plan how the keyfile will be distributed, rotated, and revoked; a file copied inconsistently can stop a member from authenticating to its peers.

Why keyfiles are not the preferred production control

MongoDB documents keyfiles primarily for testing and development because their manageability and cryptographic strength are limited. For production, use X.509 certificates or another stronger enterprise authentication approach where your operational requirements justify it. Regardless of the authentication mechanism, restrict firewall rules to trusted sources and ensure every member can reach every other member.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Authentication is not a substitute for network isolation. Keep the listener off public interfaces unless there is a documented, secured reason to bind there, and limit inbound rules to the member hosts and approved application networks. Secure the operating system and protect logs and configuration files because they reveal topology and may contain sensitive operational details.

Initialize the replica set once

After all daemons are running with the same replSetName, connect locally to one member:

mongosh

Run rs.initiate() on one member only. MongoDB explicitly states: “Run rs.initiate() on only one mongod instance for the replica set.” Supply one member document for each host, using the names that appear in bindIp and DNS:

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongodb0.example.net:27017" },
    { _id: 1, host: "mongodb1.example.net:27017" },
    { _id: 2, host: "mongodb2.example.net:27017" }
  ]
})

The top-level _id must exactly match replication.replSetName. The command starts the election process; it may take a short time for one member to become primary and the others to report as secondaries. Do not run the initialization command again simply because the first election is still in progress.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Initialize only after checking that each hostname resolves and that each daemon is listening on the intended interface. The command describes the complete initial membership, so omit no intended host and do not add a name that peers cannot resolve. If you must change membership later, use the replica-set configuration procedures rather than repeatedly calling rs.initiate().

Verify election, membership, and health

Once the shell reconnects to the elected primary, run:

rs.status()
rs.conf()

Read rs.status()

rs.status() reports each member’s state and health. Confirm that exactly one member is PRIMARY, the remaining expected members are SECONDARY, and the members are reachable rather than reporting startup, unreachable, or unhealthy states. Run it from the primary when possible so the result reflects the current election.

Record the result as an operational baseline. A healthy initial status should list all three configured hosts, show the expected set name, and show no member stuck in startup or an unreachable state. Recheck status after firewall changes, host maintenance, package upgrades, or a planned restart.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read rs.conf()

rs.conf() confirms the replica-set name and the configured host list. Check that every hostname and port is spelled exactly as intended and that the displayed set name is rs0 in this example. A typo here can leave a daemon running while preventing replication.

Test from an approved client

After internal health is established and authentication is configured, connect clients using the replica-set name and all appropriate hosts rather than pinning applications to one server. This lets the driver discover the primary and react to an election. Keep client network access narrower than the member-to-member rules whenever possible.

Operational checks after setup

Write down the hostnames, replica-set name, MongoDB release, bind addresses, firewall owners, and authentication method. Keep this information with the service runbook so an on-call engineer can identify the primary and contact the correct administrator during an incident.

Schedule independent backups and test restoration. Because secondaries replicate deletes and other unwanted changes, a healthy rs.status() result cannot prove that historical recovery is possible. Also document an upgrade sequence and a controlled election or host-failure test. The purpose of those tests is to verify that clients discover a new primary and that the team understands the resulting status and log messages.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Troubleshoot common setup failures

mongod.service not found

Reload systemd’s unit catalog and start the service again:

sudo systemctl daemon-reload
sudo systemctl start mongod

If the unit is still absent, verify that the official mongodb-org package installation completed and inspect APT’s output for repository or package errors. Confirm that the package was installed on the host where the command is being run, not only on another member.

Members cannot join

  • Resolve every member hostname from every other member in both directions.
  • Confirm that each server’s net.bindIp includes the hostname or address used in rs.conf(); localhost alone is insufficient.
  • Check firewall rules for the MongoDB port and permit only the required member and client sources.
  • Read /var/log/mongodb/mongod.log on the member that remains unreachable.

Compare the actual address used by the daemon with the address published in the member list. A DNS record can be correct while the process is bound to a different interface, and a process can be correctly bound while a firewall blocks the route.

Initialization is rejected

Compare replication.replSetName on all hosts with the _id passed to rs.initiate(). They must match exactly. Ensure the command was run only once and that the member list contains one entry per intended host. If the first attempt returned an error, read the log and verify the state before trying another administrative command.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

IP-only configuration fails after an upgrade

MongoDB 5.0 and later can reject configurations that contain only IP addresses. Replace those addresses with stable, mutually resolvable hostnames in the configuration and in the replica-set member list, then restart the affected daemon and verify the set again. Update client connection settings at the same time so applications use the names published by the set.

Package installation reports conflicts

Look for Ubuntu’s separate mongodb package. It conflicts with mongodb-org; remove the unrelated package, refresh APT metadata, and install the official package family consistently across all members. Do not try to solve a package conflict by mixing service files or binaries from the two distributions.

One member remains unhealthy after a restart

Check the service status first, then inspect /var/log/mongodb/mongod.log. Verify the edited YAML, the hostname in net.bindIp, keyfile availability and permissions if authentication is enabled, and connectivity to the other members. Correct the failing host before making further replica-set changes.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Self-managed Ubuntu or a hosted service?

Self-managing on Ubuntu gives you direct control over operating-system placement, network topology, MongoDB configuration, patch timing, and firewall policy. That control also makes your team responsible for those tasks, plus backups, monitoring, certificate or key rotation, failure testing, and capacity planning.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A hosted MongoDB service removes local installation and much of the infrastructure maintenance. The trade-off is less control over host placement and underlying configuration, along with a service bill and dependence on the provider’s supported regions and controls.

Decision area Self-managed Ubuntu Hosted MongoDB service
Installation and patching Your team installs packages, schedules upgrades, and repairs failed hosts. The provider operates the database platform and its maintenance workflow.
Backups and recovery You design, store, and test backups and recovery procedures. Backup features and recovery responsibilities follow the provider’s service terms and configuration.
Network placement Place members in your own private networks and regions. Choose from the provider’s available regions and connectivity options.
Security controls You manage binds, firewalls, credentials, certificates, and host hardening. The service supplies managed controls, but you still configure users, network access, and application security.
Scaling You provision hosts, disks, and network capacity. Scaling options are constrained by the provider’s plans and supported architecture.
Cost model Costs include servers, storage, bandwidth, operations, and staff time. Costs are service charges plus network transfer and any surrounding application expenses.

For a small team, the deciding cost is often operational time rather than the package itself. Self-managed deployment has explicit infrastructure and staff costs, while a hosted service converts much of that work into a recurring service charge. Compare the full lifecycle: installation, upgrades, monitoring, backups, incident response, network transfer, and recovery testing.

Final deployment checklist

  • All members run the same intended mongodb-org release on a supported 64-bit Ubuntu release.
  • Every hostname resolves from every other member and from approved clients.
  • Each host has the same replSetName, with a bind list that includes localhost and its reachable member hostname.
  • Firewall rules allow only required MongoDB traffic; no unauthenticated public exposure exists.
  • Authentication is configured before production client access, with a stronger mechanism than a keyfile where production requirements call for it.
  • rs.initiate() was run once, on one member, with one correctly spelled host entry per member.
  • rs.status() shows one healthy primary and the expected secondaries, while rs.conf() shows the intended name and host list.
  • Backups, restore tests, upgrade procedures, and an election or host-failure test are documented separately from the initial installation.
  • The team knows who owns DNS, firewall rules, operating-system patching, MongoDB upgrades, credentials, and incident response.

Frequently Asked Questions

Which Ubuntu versions are covered for MongoDB 8.0?

MongoDB’s documented Ubuntu 8.0 package path covers 64-bit Ubuntu 24.04 (Noble), 22.04 (Jammy), and 20.04 (Focal). Select the repository instructions that match both the server release and the Ubuntu codename.

Can I use IP addresses instead of hostnames?

Use stable, mutually resolvable hostnames. MongoDB 5.0 and later can reject nodes configured only with IP addresses, and hostnames avoid rewriting the replica-set configuration after an address change.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why can the members not connect when mongod is running?

MongoDB binds to localhost by default. Check that each net.bindIp includes the hostname used by peers, that DNS resolves in both directions, and that firewalls allow the MongoDB port between trusted members.

How many times should I run rs.initiate()?

Run it once, on one mongod instance only. The command includes one host entry for each intended member and starts the election process.

What proves that the replica set is healthy?

Run rs.status() and confirm one PRIMARY, the expected SECONDARY members, and healthy, reachable states. Use rs.conf() to verify the set name, hostnames, and ports.

Is a replica set a backup?

No. Replication copies operational changes, including accidental deletions. Maintain separate backups and test restoration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Are keyfiles suitable for production authentication?

MongoDB documents keyfiles mainly for testing and development because manageability and cryptographic strength are limited. Production deployments should evaluate X.509 certificates or another stronger enterprise mechanism.

What does self-managed Ubuntu cost compared with a hosted MongoDB service?

Self-management includes servers, storage, bandwidth, operations, and staff time. A hosted service charges for the service and related transfer or application costs, while removing much of the local installation and infrastructure maintenance.

The Bottom Line

A dependable Ubuntu replica set uses matching official packages, stable hostnames, identical replica-set settings, reachable bind addresses, restricted network access, and one carefully checked initialization. Verify the election with rs.status() and rs.conf(), secure member and client traffic, and maintain backups and failure tests outside the initial setup.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.