mongodb- 副本集(Ha方案)

*副本集(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 ( );

posted on 2012-07-26 00:08  YangJin  阅读(321)  评论(0编辑  收藏  举报