mongo sharding across multiple machines connection possible through identity file (.pem) - mongodb

Some example illustrating mongo sharding across multiple machines .connection among them is possible through identity file (.pem).

use of --keyFile will accomplish connection across ssh-secured machines.
Generate .pub file from ssh-keygen
ssh-keygen
Now you can use that to make mongo interactions
for eg. connectToMongo.pub is my keyfile
mongod --rest --configsvr --dbpath path --keyFile connectToMongo.pub --port port_number
mongod --rest --shardsvr --replSet replica_name --dbpath path --keyFile connectToMongo.pub --port port_number
mongos --configdb ip:port_number --keyFile connectToMongo.pub --port port_number

You can enable --keyFile authentication for your mongod/mongos servers, using your .pem file as the --keyFile value.
Note that use of --keyFile also enables the general "secure mode" requiring authentication for all user and application connections.

Related

How the lock file is shared among the various mongods

I am trying to setup a shard and replica set.
My assumption procedure be like this :
Start a replica set (let it be only one, just for testing)
mongo then initiate replica
Start a config server (again let it be one, just for testing)
Start a shard server (again let that be just one)
Add the shard and enable sharding via mongo
What i did :
mongod --replSet rs0 --dbpath data/rs0-0 --unixSocketPrefix data/rs0-0
mongo then rs.initiate()
mongod --configsvr --dbpath data/rs0-0 --unixSocketPrefix data/rs0-0
-- now stucked at step 3.
Error i find is
2017-05-22T20:00:13.857+0530 [initandlisten] exception in initAndListen: 10310 Unable to lock file: data/rs0-0/mongod.lock. Is a mongod instance already running?, terminating
What i have tried :
i have tried with different directories for --unixSocketPrefix options, but each time it hits data/rs0-0/mongod.lock the same file. So it did not worked
It seems simple issue but unable to figure out how the lock file is shared among the various mongods (whether it be config server, or replica set, or shard server)
I am on mongodb 2.6.12
You need to start mongod and config server with different dbpath options.
You can follow the following steps:
mongod --replSet rs0 --dbpath data/rs0-0 --unixSocketPrefix data/rs0-0
or
mongod --replSet rs0 --dbpath data/rs0-0
mongo then rs.initiate()
mkdir -p /data/configdb (grant required permission recursively)
mongod --configsvr --dbpath /data/configdb --port 27019

How to get user list from replicaset instance?

I have setup a replica set which includes three members. Below is the three instances launch command:
501 36057 1 0 4:22pm ?? 0:05.02 mongod --replSet replset --dbpath /Users/joey/tmp/replica/replset/rs1/db --logpath /Users/joey/tmp/replica/replset/rs1/mongod.log --port 28017 --logappend --fork
501 36060 1 0 4:22pm ?? 0:04.82 mongod --replSet replset --dbpath /Users/joey/tmp/replica/replset/rs2/db --logpath /Users/joey/tmp/replica/replset/rs2/mongod.log --port 28018 --logappend --fork
501 36063 1 0 4:22pm ?? 0:04.86 mongod --replSet replset --dbpath /Users/joey/tmp/replica/replset/rs3/db --logpath /Users/joey/tmp/replica/replset/rs3/mongod.log --port 28019 --logappend --fork
When I connect to one of this member and run db.getUsers(), I will get an empty array as below:
$ mongo --port 28017
MongoDB shell version v3.4.0
connecting to: mongodb://127.0.0.1:28017/
MongoDB server version: 3.4.0
replset:PRIMARY> db.getUsers()
[ ]
I wander how to get user list in replicaset.
When I connect to one of this member and run db.getUsers(), I will get an empty array
This indicates you haven't set up any users yet. See Enable Authentication in the MongoDB manual.
Below is the three instances launch command
Your launch commands don't include the --keyfile parameter required to enable access control with a replica set. See Enforce Keyfile Access Control in a Replica Set.
For a full reference of recommended security measures (and links to relevant tutorials), see: MongoDB Security Checklist.

Sharding Mongo Surprised to discover

I am trying to run a sharding in mongo. I ran this commands:
mongod --rest --shardsvr --port 10000 --dbpath data/localhost10000 --logpath data/localhost10000/log
mongod --rest --port 10002 --dbpath data/localhost10002 --logpath data/localhost10002/log
mongos --port 10003 --configdb localhost:10002 > run_routing_service_log
mongo localhost:10003
use admin
db.runCommand({addshard:"localhost:10000", name:"shard10000"});
db.runCommand({addshard:"localhost:10001", name:"shard10001"});
use test_sharding
sh.enableSharding("test_sharding")
db.people.ensureIndex({"zip": 1})
db.people.insert({"name": "a1", "password": "a1", .... )
sh.status()
I am obtain this error:
Surprised to discover that localhost:10002 does not believe it is a config server
Add --configsvr argument in the second mongod command as below.
mongod --rest --port 10002 --dbpath data/localhost10002 --logpath data/localhost10002/log
This should start the configserver on port #10002. However, you might face another issue related to quorum as 3 config-servers are recommended by mongodb official documentation that can be started as the above command on different ports.
Also, I don't see that you have initialized the mongodb shard. That might also create an issue in recognizing correct shard configurations. Following link might be helpful.
http://www.mongodbspain.com/en/2015/01/26/how-to-set-up-a-mongodb-sharded-cluster/

How start Mongo Instance in sharded cluster

I want to deploy a sharded cluster for this i using MongoDB manual.
first i created 3 config servers.
mongod --configsvr --dbpath /data/configdb1 --port 27019 ,
mongod --configsvr --dbpath /data/configdb2 --port 27019 ,
mongod --configsvr --dbpath /data/configdb3 --port 27019
But in second step to Start the mongos Instances i find a command like
mongos --configdb cfg0.example.net:27019,cfg1.example.net:27019,cfg2.example.net:27019
but i can't understand the meaning of
cfg0.example.net
cfg1.example.net
cfg2.example.net
So Please explain meaning of above command and how can i use this according my hostname?
Please check "Deploy a Sharded Cluster", cfg[0-3].example.net means hostnames of 3 config servers, each of mongos server should be started with all config servers configured.
This should solve your issue
[ne#server1~]$mongos configdb"repl/localhost:57040,localhost:57041,localhost:57042" --fork --logpath log.mongos0 --port 27200
about to fork child process, waiting until server is ready for connections.
forked process: 2467
Hope it helps!!!
These are are the config servers connected to the the mongos server

how to keep read and write separate mongo replicat set

bin>mongod --dbpath "xx" --port 27017 --replSet replset/127.0.0.1:27018
bin>mongod --dbpath "yy" --port 27018 --replSet replset/127.0.0.1:27017
bin>mongod --dbpath "zz" --port 27019 --replSet replset/127.0.0.1:27017
client driver how use to separate read/write?
mongodb://host1,host2,host3/
By default, MongoDB always reads from and writes to the primary of a replica set.
Each driver provides a slaveOkay option that allows you to read from something other than the primary.
You will need to look at the documentation for your specific language to see how slaveOkay is used.