Miguel Fermin
Miguel Fermin

Reputation: 380

Can't create user

I was using MongoDB version 2.6.6 on Google Compute Engine and used the click to deploy method.

rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:[{role:"root", db:"admin"}]})
2015-07-13T15:02:28.434+0000 Error: couldn't add user: not master at src/mongo/shell/db.js:1004

rs0:SECONDARY> use admin
switched to db admin
rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:["root"]})
2015-07-13T15:13:28.591+0000 Error: couldn't add user: not master at src/mongo/shell/db.js:1004

Upvotes: 16

Views: 35016

Answers (4)

Kamran
Kamran

Reputation: 3537

MongoDB will be deployed in a cluster of Compute Engine instances (also known as a MongoDB replica set). Each instance will use a boot disk and separate disk for database files.

Primary and master nodes are the nodes that can accept writes. MongoDB’s replication is “single-master:” only one node can accept write operations at a time.

Secondary and slave nodes are read-only nodes that replicate from the primary.

Your error message looks like you are trying to add the user on the secondary. Try adding the user in the primary.

Upvotes: 3

Dylan
Dylan

Reputation: 2219

I ran into this issue when I thought I was running mongo 3.4 but it was mongo 3.6. Uninstalling 3.6 and installing 3.4 fixed my issue.

Upvotes: 0

D. SM
D. SM

Reputation: 14520

I ran into this error when scripting replica set creation.

The solution was to add a delay between rs.initiate() and db.createUser().

Replica set creation is seemingly done in background and it takes time for the primary node to actually become primary. In interactive use this doesn't cause a problem because there is a delay while typing the next command, but when scripting the interactions the delay may need to be forced.

Upvotes: 9

atlas_scoffed
atlas_scoffed

Reputation: 4127

I had a similar problem with mongo 3.2:

Error: couldn't add user: not master :

When trying to create a new user, with root role.

I was using only a local copy of mongo.

In my mongod.conf file I had the following uncommented:

replication:
   replSetName:  <node name>

Commenting that out and restarting fixed the problem. I guess mongo thought it was part of a replication set, and was confused as to who the Master was.

Edit:

I've also found that if you ARE trying to setup a replication set, and you get the above error, then run:

rs.initiate()

This will start a replication set, and set the current node as PRIMARY.

Exit, and then log back in and you should see:

PRIMARY>

Now create users as needed.

Upvotes: 30

Related Questions