------------环境---------------------------------
192.168.56.111 host01 主
192.168.56.112 host02 从
192.168.56.113 host03 从
------------创建目录-----------------------------
在每个节点上创建如下的目录,以下以主节点为例
#存放整个mongodb文件
[root@host01 /]#mkdir -p /db/mongodb/replset
#存放mongodb数据文件
[root@host01 /]#mkdir -p /db/mongodb/replset/data
[root@host01 /]#mkdir -p /db/mongodb/replset/log
-----------解压mongodb-linux-x86_64-2.6.5.tgz-----
在每个节点上解压缩,并将mongodb安装文件转移到指定目录
[root@host01 soft]#tar -zxvf mongodb-linux-x86_64-2.6.5.tgz
[root@host01 soft]#mv mongodb-linux-x86_64-2.6.5 /db/mongodb/replset/mongodb
----------创建配置文件----------------------------
在每个节点上执行
mkdir -p /db/mongodb/replset/conf
vi mongo.cnf
内如如下:
port = 27017
fork = true
dbpath = /db/mongodb/replset/data
logpath = /db/mongodb/replset/log/logs
logappend = true
shardsvr = true
replSet = test
--------------启动mongod----------------
每台机器上执行
[root@host01 bin]#./mongod -f /db/mongodb/replset/conf/mongo.cnf
日志输出:
2015-10-16T10:59:43.769+0800 [rsStart] replSet info you may need to run replSetInitiate -- rs.initiate() in the shell -- if that is
not already done
日志提示需要执行rs.initiate()进行初始化
------------初始化副本集---------------------
在任何一个节点上执行,这里在主节点上执行
[root@host01 conf]# mongo
MongoDB shell version: 2.6.5
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
> show dbsshow dbs
admin (empty)
local 0.078GB
> use adminuse admin
switched to db admin
>config = { _id:"test", members:[{_id:0,host:"192.168.56.111:27017"},{_id:1,host:"192.168.56.112:27017"},{_id:2,host:"192.168.56.113:27017"}]}
>rs.initiate(config);
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
查看日志
2015-10-16T11:05:37.133+0800 [rsMgr] replSet PRIMARY
...
2015-10-16T11:05:52.225+0800 [rsHealthPoll] replSet member 192.168.56.112:27017 is now in state SECONDARY
2015-10-16T11:05:52.242+0800 [rsHealthPoll] replSet member 192.168.56.113:27017 is now in state SECONDARY
可以看出当前的节点已经是主节点,192.168.56.112和192.168.56.113为从节点.
查看副本集的状态
> rs.status();
{
"set" : "test",
"date" : ISODate("2015-10-16T03:10:30Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.56.111:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 705,
"optime" : Timestamp(1444964727, 1),
"optimeDate" : ISODate("2015-10-16T03:05:27Z"),
"electionTime" : Timestamp(1444964736, 1),
"electionDate" : ISODate("2015-10-16T03:05:36Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.56.112:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 302,
"optime" : Timestamp(1444964727, 1),
"optimeDate" : ISODate("2015-10-16T03:05:27Z"),
"lastHeartbeat" : ISODate("2015-10-16T03:10:30Z"),
"lastHeartbeatRecv" : ISODate("2015-10-16T03:10:29Z"),
"pingMs" : 0,
"syncingTo" : "192.168.56.111:27017"
},
{
"_id" : 2,
"name" : "192.168.56.113:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 302,
"optime" : Timestamp(1444964727, 1),
"optimeDate" : ISODate("2015-10-16T03:05:27Z"),
"lastHeartbeat" : ISODate("2015-10-16T03:10:30Z"),
"lastHeartbeatRecv" : ISODate("2015-10-16T03:10:29Z"),
"pingMs" : 0,
"syncingTo" : "192.168.56.111:27017"
}
],
"ok" : 1
}
---------------------测试副本集数据复制功能-------------------------------
链接到主节点数据库
[root@host01 conf]# mongo
MongoDB shell version: 2.6.5
connecting to: test
test:PRIMARY> shopw shopw
2015-10-16T11:12:50.888+0800 ReferenceError: shopw is not defined
test:PRIMARY> use hxl;
switched to db hxl
test:PRIMARY> db.students.insert({"name":"hxl","age":28});db.students.insert({"name":"hxl","age":28});
WriteResult({ "nInserted" : 1 })
test:PRIMARY> db.students.insert({"name":"chenli","age":25})db.students.insert({"name":"chenli","age":25})
WriteResult({ "nInserted" : 1 })
登陆到从节点
[root@host02 ~]# mongo
MongoDB shell version: 2.6.5
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
test:SECONDARY> use hxl;
switched to db hxl
test:SECONDARY> show collections;
2015-10-16T11:15:38.839+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读
test:SECONDARY> db.getMongo().setSlaveOk();
test:SECONDARY> db.students.find()db.students.find()
{ "_id" : ObjectId("56206b86744c9fb2922a957a"), "name" : "hxl", "age" : 28 }
{ "_id" : ObjectId("56206b8d744c9fb2922a957b"), "name" : "chenli", "age" : 25 }
可以看到从节点上查看到主节点上写入的数据.
mongodb副本集部署
原文:http://blog.chinaunix.net/uid-77311-id-5212883.html