Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I rename a mongodb replica set?

Tags:

mongodb

I started up a few MongoDB replica sets with the default configuration and added them to Cloud Manager, but since the default replica set name is "rs0", they're hard to tell apart in the UI. Is there a way to change the name of a replica set, preferably without having to drop and re-import all of the data in the cluster?

I've tried using rs.reconfig (link) but it doesn't allow you to change the replica set name.

like image 765
whereswalden Avatar asked Oct 28 '15 20:10

whereswalden


People also ask

How do I edit a replica set?

You can easily change the number of pods a particular ReplicaSet manages in one of two ways: Edit the controllers configuration by using kubectl edit rs ReplicaSet_name and change the replicas count up or down as you desire. Use kubectl directly. For example, kubectl scale –replicas=2 rs/web.

How do I find the replicas name in MongoDB?

On MongoDB Atlas project page, select the Deployment link on the left hand side menu. Under Processes tab, with Topology view you should see the replica set name (this should be the default view presented when you click on Deployment ). Generally, the replica set name is the cluster name plus -shard-0 .

What is a MongoDB replica set?

A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide redundancy and high availability, and are the basis for all production deployments. This section introduces replication in MongoDB as well as the components and architecture of replica sets.


1 Answers

Yes! The process is pretty simple:

  1. Start all of the nodes in the non-replicated mode
    • Stop mongod on each server
    • Start mongod back up. If you use /etc/mongod.conf, remove the replication section. If you don't, omit the --replSet option to mongod
  2. Flush the local database where the replication set configuration is cached

    • On each server, open a mongo shell as the admin user and run use local; db.dropDatabase() (Make sure that admin user / root user has dbAdmin role on local db)
  3. Start all of the nodes again in replicated mode

    • Stop mongod on each server
    • If you use /etc/mongod.conf, add the replication section back in with the new name and start mongod. If not, start mongod with --replSet <new-name>
  4. Initialize the replica set
    • Open a mongo shell as the admin user on one of the nodes. (It will become the new primary)
    • Run rs.initiate(). DO NOT pass any arguments to rs.initiate(). (It'll fail with an error) Any other config you want to set can be changed using rs.reconfig() later.
    • On the same node where your ran rs.initiate(), for each secondary, run rs.add('[secondary.host.name]') to add it to the replica set.
    • Wait for the secondaries to come in sync

This doesn't require you to dump and re-import your data, and it can be done with minimal downtime (and a period of degraded performance as the secondaries sync) if you automate it.

Here's an ansible playbook that does the whole thing (assuming you're using /etc/mongod.conf and managing mongod via System V/Upstart/things that speak service.)

like image 59
whereswalden Avatar answered Sep 22 '22 20:09

whereswalden