-

MongoDB Replica Set集群

NoSQL

MongoDB副本集自动复制 Replica Set是Mongodb官方推荐的主从复制和高可用方案。Replicat Set具有自动切换功能,当Primary挂掉之后,可以自动由Replica Set中的某一个Secondary来切换到Primary,以实现高可用的目的。下面看一下MongoDB Replica Set集群的具体步骤。

1、创建MongoDB数据文件夹
[cc lang=”bash” escaped=”true”][root@MongoDb ~]# mkdir /mongodb && cd /mongodb/
[root@MongoDb mongodb]# mkdir node1 node2 node3[/cc]

2、以副本集mongos启动MongoDB
[cc lang=”bash” escaped=”true”][root@MongoDb mongodb]# /usr/local/bin/mongod –dbpath /mongodb/node3 –port 10003 –replSet mongos –fork –logpath /mongodb/node3/node3.log
[root@MongoDb mongodb]# /usr/local/bin/mongod –dbpath /mongodb/node2 –port 10002 –replSet mongos –fork –logpath /mongodb/node2/node2.log
[root@MongoDb mongodb]# /usr/local/bin/mongod –dbpath /mongodb/node1 –port 10001 –replSet mongos –fork –logpath /mongodb/node1/node1.log
[root@MongoDb mongodb]# ps -ef | grep mongod #查看mongod进程
root 3956 1 1 15:21 ? 00:00:23 /usr/local/bin/mongodd –dbpath /mongodb/node2 –port 10002 –replSet mongos –fork –logpath /mongodb/node2/node2.log
root 3970 1 1 15:21 ? 00:00:22 /usr/local/bin/mongodd –dbpath /mongodb/node1 –port 10001 –replSet mongos –fork –logpath /mongodb/node1/node1.log
root 4274 1 1 15:24 ? 00:00:21 /usr/local/bin/mongodd –dbpath /mongodb/node3 –port 10003 –replSet mongos –fork –logpath /mongodb/node3/node3.log
root 4959 1116 0 15:50 pts/0 00:00:00 grep mongod[/cc]

3、初始化副本集mongos(只能初始化一次)
[cc lang=”bash” escaped=”true”][root@MongoDb mongodb]# /usr/local/bin/mongod localhost:10003
> rs.initiate({_id:”mongos”,members:[{_id:1,host:”localhost:10001″},{_id:2,host:”localhost:10002″},{_id:3,host:”localhost:10003″}]})
> rs.status();//查看副本集mongos的状态,也可以使用db.isMaster()查看集群中的主从节点信息。
{
“set” : “mongos”,
“date” : ISODate(“2015-10-28T07:53:00.240Z”),
“myState” : 2,
“members” : [
{
“_id” : 1,
“name” : “localhost:10001”,
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”, #主节点
“uptime” : 1696,
“optime” : Timestamp(1446017006, 2),
“optimeDate” : ISODate(“2015-10-28T07:23:26Z”),
“lastHeartbeat” : ISODate(“2015-10-28T07:52:58.600Z”),
“lastHeartbeatRecv” : ISODate(“2015-10-28T07:52:58.728Z”),
“pingMs” : 1,
“electionTime” : Timestamp(1446017034, 1),
“electionDate” : ISODate(“2015-10-28T07:23:54Z”),
“configVersion” : 1
},
{
“_id” : 2,
“name” : “localhost:10002”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”, #从节点
“uptime” : 1696,
“optime” : Timestamp(1446017006, 2),
“optimeDate” : ISODate(“2015-10-28T07:23:26Z”),
“lastHeartbeat” : ISODate(“2015-10-28T07:52:58.611Z”),
“lastHeartbeatRecv” : ISODate(“2015-10-28T07:52:58.793Z”),
“pingMs” : 1,
“lastHeartbeatMessage” : “could not find member to sync from”,
“configVersion” : 1
},
{
“_id” : 3,
“name” : “localhost:10003”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”, #从节点
“uptime” : 1697,
“optime” : Timestamp(1446017006, 2),
“optimeDate” : ISODate(“2015-10-28T07:23:26Z”),
“configVersion” : 1,
“self” : true
}
],
“ok” : 1
}
mongos:PRIMARY> db.test.insert({name:”雷雪松”})[/cc]
注意:
state: 1表示当前可以进行读写,2表示不能读写
health: 1表示是正常的,0异常
只用PRIMARY才可以读写,SECONDARY会提示”not master”不能读写操作。在从节点中使用rs.slaveOk(),就可以执行读操作了。

4、删除Replica Set节点
[cc lang=”bash” escaped=”true”]mongos:PRIMARY> rs.remove(“localhost:10001”)[/cc]

5、添加Replica Set节点
[cc lang=”bash” escaped=”true”]mongos:PRIMARY> rs.add(“localhost:10001”)[/cc]

6、停止PRIMARY主节点,查看自动切换。
[cc lang=”bash” escaped=”true”][root@MongoDb mongodb]# kill 3970
[root@MongoDb mongodb]# /usr/local/bin/mongod localhost:10003
mongos:SECONDARY> rs.status();
{
“set” : “mongos”,
“date” : ISODate(“2015-10-28T07:54:10.272Z”),
“myState” : 2,
“members” : [
{
“_id” : 1,
“name” : “localhost:10001”,
“health” : 0,
“state” : 8,
“stateStr” : “(not reachable/healthy)”, #节点不可用或者不健康
“uptime” : 0,
“optime” : Timestamp(0, 0),
“optimeDate” : ISODate(“1970-01-01T00:00:00Z”),
“lastHeartbeat” : ISODate(“2015-10-28T07:54:08.706Z”),
“lastHeartbeatRecv” : ISODate(“2015-10-28T07:54:00.819Z”),
“pingMs” : 1,
“lastHeartbeatMessage” : “Failed attempt to connect to localhost:10001; couldn’t connect to server localhost:10001 (127.0.0.1), connection attempt failed”,
“configVersion” : -1
},
{
“_id” : 2,
“name” : “localhost:10002”,
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”, #主节点
“uptime” : 1766,
“optime” : Timestamp(1446017006, 2),
“optimeDate” : ISODate(“2015-10-28T07:23:26Z”),
“lastHeartbeat” : ISODate(“2015-10-28T07:54:08.699Z”),
“lastHeartbeatRecv” : ISODate(“2015-10-28T07:54:08.870Z”),
“pingMs” : 0,
“electionTime” : Timestamp(1446018843, 1),
“electionDate” : ISODate(“2015-10-28T07:54:03Z”),
“configVersion” : 1
},
{
“_id” : 3,
“name” : “localhost:10003”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”, #从节点
“uptime” : 1767,
“optime” : Timestamp(1446017006, 2),
“optimeDate” : ISODate(“2015-10-28T07:23:26Z”),
“configVersion” : 1,
“self” : true
}
],
“ok” : 1
}
mongos:PRIMARY> db.test.find();
{ “_id” : ObjectId(“56307fc46b9990f94c860ac2”), “name” : “雷雪松” }[/cc]
当节点恢复后,会自动成为SECONDARY从节点。

来源:MongoDB Replica Set集群

6 评论 “MongoDB Replica Set集群

    cdicts 评论:
    2019年5月5日 下午8:43

    哇塞,居然是沙发?留个名

    1ga 评论:
    2019年5月5日 下午9:12

    好文章!666,学习了

    极速影院 评论:
    2019年5月8日 下午9:58

    哇塞,居然是沙发?留个名

    吾读 评论:
    2019年5月9日 上午1:08

    好文章!666,学习了

    2ou 评论:
    2019年5月10日 下午8:38

    写得太精彩了,以这样的篇幅写了这么大跨度的文章,精品。向楼主学习!

    王者荣耀修改器 评论:
    2022年6月21日 上午10:18

    感谢分享

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注