Review
In the previous section, we have introduced and discussed Replica Sets. In this section, we will install MongoDB and configure Replica Sets.Table of Contents
Part 1: IntroductionPart 2: Installation and configuration of Replica Sets
Part 3: Spring app configuration
Part 4: Testing the servers
Installation
Our first step is to download and install MongoDB in each server. Since our server is running CentOS, we can download the CentOS MongoDB package by following the instructions from this link. However, it is easier to simply install the prebuilt binaries as stated in the MongoDB downloads section, so we will follow this advice instead.1. Open a browser and visit the MongoDB download section at http://www.mongodb.org/downloads
2. Under the Production Release, choose the file that matches your operating system. In our case, it's Linux 32-bit.
3. Once downloaded, transfer the compressed file to all servers. (In each server, we have created a directory named /home/mongo. This is where we will extract the contents of the compressed file.)
4. Extract the contents by running the following command (you might need to modify the directory). Remember to do these on all servers.
tar -C /home/mongo/ -zxvf/home/mongo/mongodb-linux-i686-2.0.2.tgz
5. Now we need to create the database directory for our MongoDB servers. By default, /data/db is used by MongoDB, so we'll create those directories by running the following command (Remember to do these on all servers):
mkdir -p/data/db
6. Next, we will run MongoDB servers in a Replica Set using the following command (Again, do these step on all servers):
/home/mongo/mongodb-linux-i686-2.0.2/bin/./mongod --replSet cluster1
Server 1 should output the following log:
[Server #1] /home/mongo/mongodb-linux-i686-2.0.2/bin/./mongod --replSet cluster1 Sat Feb 18 11:14:36 Sat Feb 18 11:14:36 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability. Sat Feb 18 11:14:36 Sat Feb 18 11:14:36 [initandlisten] MongoDB starting : pid=5921 port=27017 dbpath=/data/db/ 32-bit host=28125_2_85413_357231 Sat Feb 18 11:14:36 [initandlisten] Sat Feb 18 11:14:36 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data Sat Feb 18 11:14:36 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations Sat Feb 18 11:14:36 [initandlisten] ** with --journal, the limit is lower Sat Feb 18 11:14:36 [initandlisten] Sat Feb 18 11:14:36 [initandlisten] db version v2.0.2, pdfile version 4.5 Sat Feb 18 11:14:36 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3 Sat Feb 18 11:14:36 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_41 Sat Feb 18 11:14:36 [initandlisten] options: { replSet: "cluster1" } Sat Feb 18 11:14:36 [initandlisten] waiting for connections on port 27017 Sat Feb 18 11:14:36 [websvr] admin web console waiting for connections on port 28017 Sat Feb 18 11:14:36 [initandlisten] connection accepted from 127.0.0.1:39621 #1 Sat Feb 18 11:14:36 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:14:36 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is not already done Sat Feb 18 11:14:46 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:14:56 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Server 2 should output the following log:
[Server #2] /home/mongo/mongodb-linux-i686-2.0.2/bin/./mongod --replSet cluster1 Sat Feb 18 11:15:34 Sat Feb 18 11:15:34 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability. Sat Feb 18 11:15:34 Sat Feb 18 11:15:34 [initandlisten] MongoDB starting : pid=13534 port=27017 dbpath=/data/db/ 32-bit host=28125_2_82937_349828 Sat Feb 18 11:15:34 [initandlisten] Sat Feb 18 11:15:34 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data Sat Feb 18 11:15:34 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations Sat Feb 18 11:15:34 [initandlisten] ** with --journal, the limit is lower Sat Feb 18 11:15:34 [initandlisten] Sat Feb 18 11:15:34 [initandlisten] db version v2.0.2, pdfile version 4.5 Sat Feb 18 11:15:34 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3 Sat Feb 18 11:15:34 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_41 Sat Feb 18 11:15:34 [initandlisten] options: { replSet: "cluster1" } Sat Feb 18 11:15:34 [initandlisten] waiting for connections on port 27017 Sat Feb 18 11:15:34 [websvr] admin web console waiting for connections on port 28017 Sat Feb 18 11:15:34 [initandlisten] connection accepted from 127.0.0.1:46620 #1 Sat Feb 18 11:15:34 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:15:34 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is not already done Sat Feb 18 11:15:44 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Server 3 should output the following log:
[Server #3] /home/mongo/mongodb-linux-i686-2.0.2/bin/./mongod --replSet cluster1 Sat Feb 18 11:15:35 Sat Feb 18 11:15:35 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability. Sat Feb 18 11:15:35 Sat Feb 18 11:15:35 [initandlisten] MongoDB starting : pid=8902 port=27017 dbpath=/data/db/ 32-bit host=28125_2_85413_357219 Sat Feb 18 11:15:35 [initandlisten] Sat Feb 18 11:15:35 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data Sat Feb 18 11:15:35 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations Sat Feb 18 11:15:35 [initandlisten] ** with --journal, the limit is lower Sat Feb 18 11:15:35 [initandlisten] Sat Feb 18 11:15:35 [initandlisten] db version v2.0.2, pdfile version 4.5 Sat Feb 18 11:15:35 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3 Sat Feb 18 11:15:35 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_41 Sat Feb 18 11:15:35 [initandlisten] options: { replSet: "cluster1" } Sat Feb 18 11:15:35 [initandlisten] waiting for connections on port 27017 Sat Feb 18 11:15:35 [websvr] admin web console waiting for connections on port 28017 Sat Feb 18 11:15:35 [initandlisten] connection accepted from 127.0.0.1:52051 #1 Sat Feb 18 11:15:35 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:15:35 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is not already done Sat Feb 18 11:15:45 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:15:55 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
Server 4 should output the following log:
[Server #4] /home/mongo/mongodb-linux-i686-2.0.2/bin/./mongod --replSet cluster1 Sat Feb 18 11:15:37 Sat Feb 18 11:15:37 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability. Sat Feb 18 11:15:37 Sat Feb 18 11:15:37 [initandlisten] MongoDB starting : pid=11685 port=27017 dbpath=/data/db/ 32-bit host=28125_2_84690_354582 Sat Feb 18 11:15:37 [initandlisten] Sat Feb 18 11:15:37 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data Sat Feb 18 11:15:37 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations Sat Feb 18 11:15:37 [initandlisten] ** with --journal, the limit is lower Sat Feb 18 11:15:37 [initandlisten] Sat Feb 18 11:15:37 [initandlisten] db version v2.0.2, pdfile version 4.5 Sat Feb 18 11:15:37 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3 Sat Feb 18 11:15:37 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_41 Sat Feb 18 11:15:37 [initandlisten] options: { replSet: "cluster1" } Sat Feb 18 11:15:37 [initandlisten] waiting for connections on port 27017 Sat Feb 18 11:15:37 [websvr] admin web console waiting for connections on port 28017 Sat Feb 18 11:15:37 [initandlisten] connection accepted from 127.0.0.1:51100 #1 Sat Feb 18 11:15:37 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:15:37 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is not already done Sat Feb 18 11:15:47 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:15:57 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
7. Next step is to configure our MongoDB servers to act as a cluster. Follow the steps below:
- Login to Server 1
- Run a MongoDB client using the following command:
/home/mongo/mongodb-linux-i686-2.0.2/bin/./mongo
- Initiate the MongoDB cluster
rs.initiate({_id: 'cluster1', members: [ {_id: 0, host: '123.456.78.90:27017'}, {_id: 1, host: '123.456.78.91:27017'}, {_id: 2, host: '123.456.78.92:27017'}, {_id: 3, host: '123.456.78.93:27017', arbiterOnly: true}] })
If you have accidentally initiated an incorrect configuration, you can reconfigure the configuration with:
rs.reconfig({_id: 'cluster1', members: [ {_id: 0, host: '123.456.78.90:27017'}, {_id: 1, host: '123.456.78.91:27017'}, {_id: 2, host: '123.456.78.92:27017'}, {_id: 3, host: '123.456.78.93:27017', arbiterOnly: true}] }, true)
Notice, the last host is an arbiter only server. This will participate in electing a primary but receive no data.
You should see the following output from MongoDB client:
> rs.initiate({_id: 'cluster1', members: [ bye [Server #1] /home/mongo/mongodb-linux-i686-2.0.2/bin/./mongo MongoDB shell version: 2.0.2 connecting to: test > rs.initiate({_id: 'cluster1', members: [ ... {_id: 0, host: '123.456.78.90:27017'}, ... {_id: 1, host: '123.456.78.91:27017'}, ... {_id: 2, host: '123.456.78.92:27017'}, ... {_id: 3, host: '123.456.78.93:27017', arbiterOnly: true}] ... }) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 }
Examine the output from Server 1
Sat Feb 18 11:16:22 [conn2] replSet replSetInitiate admin command received from client Sat Feb 18 11:16:22 [conn2] replSet replSetInitiate config object parses ok, 4 members specified Sat Feb 18 11:16:22 [conn2] replSet replSetInitiate all members seem up Sat Feb 18 11:16:22 [conn2] ****** Sat Feb 18 11:16:22 [conn2] creating replication oplog of size: 47MB... Sat Feb 18 11:16:22 [FileAllocator] allocating new datafile /data/db/local.ns, filling with zeroes... Sat Feb 18 11:16:22 [FileAllocator] creating directory /data/db/_tmp Sat Feb 18 11:16:22 [FileAllocator] done allocating datafile /data/db/local.ns, size: 16MB, took 0.053 secs Sat Feb 18 11:16:22 [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes... Sat Feb 18 11:16:22 [FileAllocator] done allocating datafile /data/db/local.0, size: 16MB, took 0.106 secs Sat Feb 18 11:16:22 [FileAllocator] allocating new datafile /data/db/local.1, filling with zeroes... Sat Feb 18 11:16:23 [FileAllocator] done allocating datafile /data/db/local.1, size: 32MB, took 1.124 secs Sat Feb 18 11:16:23 [FileAllocator] allocating new datafile /data/db/local.2, filling with zeroes... Sat Feb 18 11:16:26 [FileAllocator] done allocating datafile /data/db/local.2, size: 64MB, took 3.228 secs Sat Feb 18 11:16:29 [conn2] ****** Sat Feb 18 11:16:29 [rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG) Sat Feb 18 11:16:29 [conn2] replSet info saving a newer config version to local.system.replset Sat Feb 18 11:16:29 [conn2] replSet saveConfigLocally done Sat Feb 18 11:16:29 [conn2] replSet replSetInitiate config now saved locally. Should come online in about a minute. Sat Feb 18 11:16:29 [conn2] command admin.$cmd command: { replSetInitiate: { _id: "cluster1", members: [ { _id: 0.0, host: "123.456.78.90:27017" }, { _id: 1.0, host: "123.456.78.91:27017" }, { _id: 2.0, host: "123.456.78.92:27017" }, { _id: 3.0, host: "123.456.78.93:27017", arbiterOnly: true } ] } } ntoreturn:1 reslen:112 7192ms Sat Feb 18 11:16:39 [rsStart] replSet STARTUP2 Sat Feb 18 11:16:39 [rsHealthPoll] replSet member 123.456.78.91:27017 is up Sat Feb 18 11:16:39 [rsHealthPoll] replSet member 123.456.78.92:27017 is up Sat Feb 18 11:16:39 [rsHealthPoll] replSet member 123.456.78.93:27017 is up
Next
In the next section, we will configure our Spring application to support Replica Sets. Click here to proceed.
Share the joy:
|
Subscribe by reader Subscribe by email Share
I enjoyed your blog Thanks for sharing such an informative post. We are also providing the best services click on below links to visit our website.
ReplyDeletedigital marketing company in nagercoil
digital marketing services in nagercoil
digital marketing agency in nagercoil
best marketing services in nagercoil
SEO company in nagercoil
SEO services in nagercoil
social media marketing in nagercoil
social media company in nagercoil
PPC services in nagercoil
digital marketing company in velachery
digital marketing company in velachery
digital marketing services in velachery
digital marketing agency in velachery
SEO company in velachery
SEO services in velachery
social media marketing in velachery
social media company in velachery
PPC services in velachery
online advertisement services in velachery
online advertisement services in nagercoil
web design company in nagercoil
web development company in nagercoil
website design company in nagercoil
website development company in nagercoil
web designing company in nagercoil
website designing company in nagercoil
best web design company in nagercoil
web design company in velachery
web development company in velachery
website design company in velachery
website development company in velachery
web designing company in velachery
website designing company in velachery
best web design company in velachery
Thanks for Sharing - ( Groarz branding solutions )