*副本集(Replica Set)?
副本集就是有自动故障恢复功能得主从集群。
主从集群和副本集最大的区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃点(primary)和一个或多个备份节点(secondary)。
以三个节点为例:
节点1:
Mongodb Home:D:\mongodb\mongodb-win32-i386-2.0.4
HOST:localhost:10001
Log File:D:\mongodb\logs\node1\logs.txt
Data File:D:\mongodb\dbs\node1
节点2:
Mongodb Home:D:\mongodb\mongodb-win32-i386-2.0.4
HOST:localhost:10002
Log File:D:\mongodb\logs\node2\logs.txt
Data File:D:\mongodb\dbs\node2
节点3:
Mongodb Home:D:\mongodb\mongodb-win32-i386-2.0.4
HOST:localhost:10003
Log File:D:\mongodb\logs\node3\logs.txt
Data File:D:\mongodb\dbs\node3
启动节点1:
打开dos窗口
mongod --dbpath D:\mongodb\dbs\node1 --logpath D:\mongodb\logs\node1\logs.txt --logappend --port 10001 --replSet java2000_wl/localhost:10002 --master
启动节点2:
mongod --dbpath D:\mongodb\dbs\node2 --logpath D:\mongodb\logs\node2\logs.txt --logappend --port 10002 --replSet java2000_wl/localhost:10001
启动节点3:
mongod --dbpath D:\mongodb\dbs\node3 --logpath D:\mongodb\logs\node3\logs.txt --logappend --port 10003 --replSet java2000_wl/localhost:10001,localhost:10002
初始化节点(只能初始化一次):
随便登录一个节点,以10001为例
mongo localhost:10001/admin
db.runCommand({
"replSetInitiate":{
"_id":"java2000_wl",
"members":[
{
"_id":1,
"host":"localhost:10001",
"priority":3
},
{
"_id":2,
"host":"localhost:10002",
"priority":2
},
{
"_id":3,
"host":"localhost:10003",
"priority":1
}
]
}
});
参数解释:
--replSet 指定副本集 后面紧跟着副本集的名称
--logappend 日志文件末尾添加
--port 指定端口号
db.runCommand({}) 初始化副本集
初始化文档:
"_id":"java2000_wl", 指副本集的名称
"members":[...] 副本集的服务器列表 每个列表有个
"_id": 每个服务器的唯一id,
"host" 指定服务器的主机,
"priority"设置优先级,默认优先级为1,可以是1-1000的数字
测试:
1.查询当前主库
登录10002
mongo localhost:10002
db.$cmd.findOne ( {ismaster: 1 } );
当前主库是10001
2.关闭10001服务Dos命令窗口, 登录10002查询当前主库
mongo localhost:10002
db.$cmd.findOne ( {ismaster: 1 } );
当前主库是10002
其他命令:
查看副本集状态rs.status ( )
user local;
rs.isMaster ( )
db.system.replset.find ( )
设置从库可读(在从库secondary上执行)
rs.slaveOk ( );