您的位置:首页 > 数据库 > Mongodb

mongodb副本集

2013-10-10 18:36 519 查看
一、节点类型
standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为活跃节点。

passive:存储了完整的数据副本,参与投票,不能成为活跃节点。
arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为活跃节点。
二、主从复制的集群还是有两点区别的。
<1>: 该集群没有特定的主数据库。

<2>: 如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能

注:
1、不需要像mysql一样复制完整数据过去,丛库启动会制动复制主库完整数据。
2、丛库自动配置为只读。
3、mongodb第一次启动时间较长,需要注意等待。
4、管理命令多数都要在admin库中执行use admin
三、创建副本集



1. 环境说明:
ip:192.168.1.228 (初始计划设定其为master)
ip:192.168.1.227 (初始计划设定其为slave)
ip:192.168.1.229 (初始计划设定其为arbiter ,即仲裁服务器)
2. 为副本集取名weijh
配置229启动文件:

dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.228


配置228启动文件:

dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.229


配置227启动文件:

dbpath=/usr/data/mongodb/data/db
port=27017
logpath=/usr/data/mongodb/log/mongodb.log
logappend=true
journal=true
fork=true
replSet=weijh/192.168.1.228


配置结束后,重启服务

3、 在浏览器打开链接
http://192.168.1.228:28017/
http://192.168.1.229:28017/
看到我们需要初始化节点


4、初始化节点

我们连接到其中一个节点上,并使用replSetInitiate命令进行初始化。此命令需要一个配置对象,指定设定的每个成员的名字。
在228节点上进行初始化(随便连接一下哪个服务器都行,不过一定要进入admin集合)
1)执行命令:



出现错误:



2)清除数据库下所有新创建的数据库信息
3)再次执行命令

5、查看状态:
浏览器主节点查看:

09:57:02 [ReplSetHealthPollTask] replSet info 192.168.1.229:27017 is up
           09:57:02 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 STARTUP2
           09:57:02 [rs Manager] replSet info electSelf 1
           09:57:02 [rs Manager] replSet PRIMARY
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46257 #7
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46258 #8
           09:57:04 [conn8] end connection 192.168.1.229:46258
           09:57:04 [initandlisten] connection accepted from 192.168.1.229:46259 #9
           09:57:04 [conn9] end connection 192.168.1.229:46259
           09:57:04 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 RECOVERING
           09:57:04 [conn7] end connection 192.168.1.229:46257
           09:57:05 [initandlisten] connection accepted from 192.168.1.229:46260 #10
           09:57:06 [ReplSetHealthPollTask] replSet member 192.168.1.229:27017 SECONDARY
           09:57:06 [slaveTracking] building new index on { _id: 1 } for local.slaves


浏览器从节点关键信息查看:

09:57:03 [ReplSetHealthPollTask] replSet member 192.168.1.228:27017 PRIMARY
           09:57:04 [replica set sync] ******
           09:57:04 [replica set sync] replSet initial sync pending
           09:57:04 [replica set sync] replSet syncing to: 192.168.1.228:27017
           09:57:04 [replica set sync] building new index on { _id: 1 } for local.me
           09:57:04 [dur] lsn set 139505
           09:57:04 [replica set sync] done for 0 records 0.045secs
           09:57:04 [replica set sync] replSet initial sync drop all databases
           09:57:04 [replica set sync] dropAllDatabasesExceptLocal 1
           09:57:04 [replica set sync] replSet initial sync clone all databases
           09:57:04 [replica set sync] replSet initial sync cloning db: admin
           09:57:04 [replica set sync] replauthenticate: no user in local.system.users to use for authentication
replSet initial sync query minValid
           09:57:04 [replica set sync] replSet initial sync initial oplog application
           09:57:04 [replica set sync] replSet initial sync finishing up
           09:57:04 [replica set sync] replSet set minValid=52575ae3:1
           09:57:04 [replica set sync] building new index on { _id: 1 } for local.replset.minvalid
           09:57:04 [replica set sync] done for 0 records 0secs
           09:57:04 [replica set sync] replSet initial sync done
           09:57:05 [replica set sync] replSet SECONDARY



rs.status()




6、添加仲裁节点
我们在admin集合中使用rs.addArb()追加即可

rs.addArb("192.168.1.227")

查看状态:



该仲裁节点不参与数据的复制,只是参与投票选择主节点而已

在该节点为not reachable/healthy的状态下是起不到投票主节点的作用的。删除227服务琪上的db文件,重启
查看状态:



添加仲裁节点成功


7、在主节点添加数据:




从节点查看数据信息




在从节点228上可以同步到主节点的数据信息,但无法查看

8、228主几点宕掉,查看229状态



可以看到229 从secondary变味primary了

9、启动228,但是228不再为primary了,而为secondary了




10、首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。对于replica set 中的secondary 节点默认是不可读的:
weijh:SECONDARY> use testCp
switched to db testCp
weijh:SECONDARY> show collections
Fri Oct 11 10:09:36 uncaught exception: error: { "$err" : "not master and slaveok=false", "code" : 13435 }


若需要SECONDARY可以执行读的操作,在SECONDARY执行slaveok方法
weijh:SECONDARY> db.getMongo()
connection to 127.0.0.1
weijh:SECONDARY> db.getMongo().setSlaveOk()
not master and slaveok=false


执行查询操作测试:




参考资料网页:
http://xuezaijiongtu.blog.163.com/blog/static/19757627120122153627331/
http://blog.csdn.net/liuyuanshijie/article/details/6735625
http://www.2cto.com/database/201307/228444.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: