设为首页 加入收藏

TOP

MongoDB的数据复制和数据切片(二)
2015-11-10 12:16:55 来源: 作者: 【 】 浏览:1
Tags:MongoDB 数据 复制 切片
g最后一次操作的时间戳? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? "optimeDate" : ISODate("2015-09-04T22:50:02Z"),? ? #oplog最后一次操作的时间? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? "electionTime" : Timestamp(1441407011, 1),? ? ? ? ? #选举时间? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? "electionDate" : ISODate("2015-09-04T22:50:11Z"),? #选举日期? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? "self" : true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #表示是否为当前节点
? ? ? ? },
? ? ? ? {
? ? ? ? ? ? "_id" : 1,
? ? ? ? ? ? "name" : "192.168.1.139:27017",
? ? ? ? ? ? "health" : 1,
? ? ? ? ? ? "state" : 2,
? ? ? ? ? ? "stateStr" : "SECONDARY",? ? ? ? ? ? ? ? ? ? ? ? ? ? #从节点
? ? ? ? ? ? "uptime" : 730,
? ? ? ? ? ? "optime" : Timestamp(1441407002, 1),
? ? ? ? ? ? "optimeDate" : ISODate("2015-09-04T22:50:02Z"),
? ? ? ? ? ? "lastHeartbeat" : ISODate("2015-09-04T23:02:13Z"),
? ? ? ? ? ? "lastHeartbeatRecv" : ISODate("2015-09-04T23:02:12Z"),
? ? ? ? ? ? "pingMs" : 0,
? ? ? ? ? ? "syncingTo" : "192.168.1.132:27017"? ? ? ? ? ? ? ? ? #指向的主节点
? ? ? ? },
? ? ? ? {
? ? ? ? ? ? "_id" : 2,
? ? ? ? ? ? "name" : "192.168.1.140:27017",
? ? ? ? ? ? "health" : 1,
? ? ? ? ? ? "state" : 2,
? ? ? ? ? ? "stateStr" : "SECONDARY",
? ? ? ? ? ? "uptime" : 730,
? ? ? ? ? ? "optime" : Timestamp(1441407002, 1),
? ? ? ? ? ? "optimeDate" : ISODate("2015-09-04T22:50:02Z"),
? ? ? ? ? ? "lastHeartbeat" : ISODate("2015-09-04T23:02:13Z"),
? ? ? ? ? ? "lastHeartbeatRecv" : ISODate("2015-09-04T23:02:12Z"),
? ? ? ? ? ? "pingMs" : 0,
? ? ? ? ? ? "syncingTo" : "192.168.1.132:27017"
? ? ? ? }
? ? ],
? ? "ok" : 1
}


在创建副本集时,有3种方式:


1、db.runCommand( { replSetInitiate : } )


2、rs.initiate()


3、rs.initiate()? ? ? #先在其中一个节点上初始化,再通过rs.add添加另外的节点


这里采用的是第二种方式,即为上述中的cfg文件,对该文件的修改使用replSetInitiate命令。



3)访问测试


在主节点上添加数据(192.168.1.132):


rs0:PRIMARY> use student_db
switched to db student_db
rs0:PRIMARY> for (i=1;i<=100000;i++) db.students.insert({name:"student"+i,age:(i%120),address:"china_nb"});
WriteResult({ "nInserted" : 1 })


此时在从节点上访问数据会报如下错误:


rs0:SECONDARY> use student_db
switched to db student_db
rs0:SECONDARY> db.students.findOne()
2015-09-04T19:28:10.730-0400 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131


执行rs.slaveOk()后,数据才可读。


rs0:SECONDARY> rs.slaveOk()
rs0:SECONDARY> db.student.findOne()
null
rs0:SECONDARY> db.students.findOne()
{
? ? "_id" : ObjectId("55ea287ce476f31ac766a383"),
? ? "name" : "student1",
? ? "age" : 1,
? ? "address" : "china_nb"
}?


当主节点故障时,从节点会重新投票选举出主节点,继续提供服务,避免单点故障。


主节点上关闭服务:


[root@mongo1 ~]# service mongod stop
Stopping mongod:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [? OK? ]


从节点上查看状态信息:


rs0:SECONDARY> rs.status()
{
? ? "set" : "rs0",
? ? "date" : ISODate("2015-09-04T23:31:49Z"),
? ? "myState" : 1,
? ? "members" : [
? ? ? ? {
? ? ? ? ? ? "_id" : 0,
? ? ? ? ? ? "name" : "192.168.1.132:27017",
? ? ? ? ? ? "health" : 0,? ? ? ? ? ? ? ? ? ? ? #主节点已经下线
? ? ? ? ? ? "state" : 8,
? ? ? ? ? ? "stateStr" : "(not reachable/healthy)",
? ? ? ? ? ? ? ? ? ? ? ? ................
? ? ? ? },
? ? ? ? {
? ? ? ? ? ? "_id" : 1,
? ? ? ? ? ? "name" : "192.168.1.139:27017",
? ? ? ? ? ? "health" : 1,
? ? ? ? ? ? "state" : 1,
? ? ? ? ? ? "stateStr" : "PRIMARY",? ? ? ? ? ? ? #新选出的主节点
? ? ? ? ? ? ............
? ? ? ? },
? ? ? ? {
? ? ? ? ? ? "_id" : 2,
? ? ? ? ? ? "name" : "192.168.1.140:27017",
? ? ? ? ? ? "health" : 1,
? ? ? ? ? ? "state" : 2,
? ? ? ? ? ? "stateStr" : "SECONDARY",
? ? ? ? ? ? .........
? ? ? ? }
? ? ],
? ? "ok" : 1
}


可以看到原来的主节点已经下线(health为0),重新选举的主节点为192.168.1.139。可以通过rs.isMaster()查看当前节点是否为主节点。


4)添加一个从节点


数据库运行一段时间后,可能需要再次添加节点来分散压力。通过rs.add命令添加从节点。添加完成后,该节点需要和主节点同步数据,同步过程有3个步骤:


? 1、初始同步(initial sync)


? 2、回滚后追赶(post-rollback catch-up)


? 3、切分块迁移(sharding chunk migrations)


添加从节点(在主节点上):


rs0:PRIMARY> rs.add("192.168.1.138")
{ "ok" : 1 }


查看状态:


{
? ? "_id" : 2,
? ? "name" : "192.168.1.127:27017",
? ? "health" : 1,
? ? ? ? .....................
? ? "last

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在CentOS 5/Redhat 5上编译源码安.. 下一篇Linux 下编译安装 Redis

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: