【Mongodb】 replica set 添加和删除节点。

   前面介绍了如何搭建replica set ,本文介绍如何向replica set 添加新节点和删除老节点。

    向已有的replica set 添加新成员是很简单的,新加的成员可以是空的,当然也可以是从其他节点的数据拷贝,下面介绍一下如何添加新成员:

添加新成员时,必须在新的机器上先起来一个mongodb服务,必须指出要加入的replica set 集群的名字基本语法如下(其他是默认的),然后再在replica set的master 库上执行添加操作,

./mongod -dbpath=/opt/mongodata/r1 -port 27017 -replSet myset

当然也可以使用下面的命令,将输出日志记录到/opt/mongodata/r1/rac3.27017.log 里面!

[mongodb@rac3 bin]$./mongod -dbpath=/opt/mongodata/r1 -port 27017 -replSet myset -logpath=/opt/mongodata/r1/rac3.27017.log -logappend &

在主节点上执行添加操作

[mongodb@rac4 bin]$ ./mongo 127.0.0.1:27020

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27020/test

PRIMARY> rs.status();

{

        "set" : "myset",

        "date" : ISODate("2011-11-01T06:13:01Z"),

        "myState" : 1,

        "syncingTo" : "10.250.7.220:27018",

        "members" : [

                {

                        "_id" : 0,

                        "name" : "10.250.7.220:27018",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 62668,

                        "optime" : {

                                "t" : 1320066230000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2011-10-31T13:03:50Z"),

                        "lastHeartbeat" : ISODate("2011-11-01T06:13:01Z"),

                        "pingMs" : 0

                },

                {

                        "_id" : 1,

                        "name" : "10.250.7.220:27019",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 63887,

                        "optime" : {

                                "t" : 1320066230000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2011-10-31T13:03:50Z"),

                        "lastHeartbeat" : ISODate("2011-11-01T06:13:01Z"),

                        "pingMs" : 0

                },

                {

                        "_id" : 2,

                        "name" : "10.250.7.220:27020",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "optime" : {

                                "t" : 1320066230000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2011-10-31T13:03:50Z"),

                        "self" : true

                }

        ],

        "ok" : 1

}

PRIMARY> rs.add("10.250.7.241:27017");

{ "ok" : 1 } --添加成功

添加之后,mongodb 会自动执行新加节点的恢复操作,所以第一次查询rs.status()时候,新加节点的信息为空,等待恢复完成之后再次查询就有了基本信息了。

PRIMARY> rs.status();

{

        ....省略.... 

                {

                        "_id" : 2,

                        "name" : "10.250.7.220:27020",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "optime" : {

                                "t" : 1320128045000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2011-11-01T06:14:05Z"),

                        "self" : true

                },

                {

                        "_id" : 3,

                        "name" : "10.250.7.241:27017",

                        "health" : 0,

                        "state" : 8,

                        "stateStr" : "(not reachable/healthy)",

                        "uptime" : 0,

                        "optime" : {

                                "t" : 0,

                                "i" : 0

                        },

                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),

                        "lastHeartbeat" : ISODate("2011-11-01T06:14:07Z"),

                        "pingMs" : 0,

                        "errmsg" : "still initializing"

                }

        ],

        "ok" : 1

}

PRIMARY> rs.status();

{

        "set" : "myset",

        "date" : ISODate("2011-11-01T06:16:08Z"),

        "myState" : 1,

        "syncingTo" : "10.250.7.220:27018",

        "members" : [

               .....省略....

                {

                        "_id" : 3,

                        "name" : "10.250.7.241:27017",

                        "health" : 1,

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 117,

                        "optime" : {

                                "t" : 1320128045000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2011-11-01T06:14:05Z"),

                        "lastHeartbeat" : ISODate("2011-11-01T06:16:07Z"),

                        "pingMs" : 0

                }

        ],

        "ok" : 1

}

PRIMARY> 

NOTE:这里只是测试了使用空库来添加新节点的,当然也可以从其他节点拷贝数据文件过来,这样可以更快的和主库进行同步操作,从而节省恢复时间!

如何删除一个节点:

只需在主节点执行rs.remove()操作

PRIMARY> rs.remove("10.250.7.241:27017");

{ "ok" : 1 }

PRIMARY> 

主节点将rac3 删除之后,如果退出再次进入rac3上的mongodb,会发现提示符变为 STARTUP,已经停止应用日志但是不可写入:

[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27017

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27017/test

STARTUP> rs.status();

{

        "set" : "myset",

        "date" : ISODate("2011-11-01T06:40:23Z"),

        "myState" : 0,

        "syncingTo" : "10.250.7.220:27020",

        "members" : [

                {

                        "_id" : 3,

                        "name" : "10.250.7.241:27017",

                        "health" : 1,

                        "state" : 0,

                        "stateStr" : "STARTUP", --启动状态,但是还是 myset 中的一个节点。

                        "optime" : {

                                "t" : 1320129036000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2011-11-01T06:30:36Z"),

                        "self" : true

                }

        ],

        "ok" : 1

}

STARTUP> 

STARTUP> show dbs;

local   1.203125GB

test    0.203125GB

STARTUP> use test;

switched to db test

STARTUP> db.yql.insert({val:"this is a message on rac3:27017 which is drop by rac4’s primary!"});

not master

STARTUP> exit

bye

想重新使用此节点必须关闭mongodb服务,

[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27017

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27017/test

STARTUP> use admin

switched to db admin

STARTUP> 

STARTUP>  db.shutdownServer();

Tue Nov  1 14:45:44 DBClientCursor::init call() failed

Tue Nov  1 14:45:44 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1:27017

server should be down...

Tue Nov  1 14:45:44 trying reconnect to 127.0.0.1:27017

Tue Nov  1 14:45:44 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017

Tue Nov  1 14:45:44 Error: error doing query: unknown shell/collection.js:150

> exit

bye

重新登录数据库:从replica set 脱离后,从主库应用的数据依然可用。

[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27017

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27017/test

> use test

switched to db test

> db.yql.insert({val:"this is a message on rac3:27017 which is drop by rac4’s primary!"});

> db.yql.find();

{ "_id" : ObjectId("4eae9cb269faf1a7cde0811c"), "val" : "this is a message on 27020 primary !" } --从主库复制的数据。

{ "_id" : ObjectId("4eaf96ebc048c68f812e6de4"), "val" : "this is a message on rac3:27017 which is drop by rac4’s primary!" }

时间: 2024-10-04 00:06:14

【Mongodb】 replica set 添加和删除节点。的相关文章

mongodb replica set 添加/删除节点方法

  replica set多服务器主从,添加,删除节点,肯定会经常遇到的.下面详细说明一下,添加,删除节点的2种方法. 一,利用rs.reconfig,来添加,删除节点 1,添加节点  代码如下   repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2},{_id:1,host:'127.0.0.1:27018',priority:1}]};   //

mongodb replica set 添加删除节点的2种方法_MongoDB

一,利用rs.reconfig,来添加,删除节点 1,添加节点 repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2},{_id:1,host:'127.0.0.1:27018',priority:1}]}; //添加节点 repmore:PRIMARY> rs.reconfig(config); //使配置生效 repmore:PRIMARY&

treeview添加或删除节点,如何能保存上?

问题描述 小妹还没分可给,但是请高人帮帮我,我想在treeview上加节点,怎么样才能保存上呢?我每次加上节点之后,返回重新运行form程序就又没了.我用的是vs2005,不是asp.net只是基于windowsForm的简单程序,我的目的就是一个treeview树,上面有一些名称什么的信息,我只想对这些信息进行查询(已经实现),添加或删除节点.现在我就是不能添加或删除节点,能帮帮我吗? 解决方案 解决方案二:对了,我有50分,送上!请知道答案的高人帮帮小妹!在线等!解决方案三:楼主你的tree

JS实现添加,替换,删除节点元素的方法_javascript技巧

本文实例讲述了JS实现添加,替换,删除节点元素的方法.分享给大家供大家参考,具体如下: 一直以来,对于节点操作比较纠结,特别是插入到某某节点之后.居然没有这个方法,以前的我写的方法有问题,是把新节点插入到旧节点的里面去了,还是该用insertBefore方法可以实现 下面是方法: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose

treeview-c# 窗体,动态实现Treeview节点的添加和删除

问题描述 c# 窗体,动态实现Treeview节点的添加和删除 c# 窗体,动态实现Treeview节点的添加和删除,节点所需信息首先导入数据库,从数据库提取显示具体来说是这样的,要做是一个实验室设备管理系统,用到树形结构,树形结构设计为三层,第一层为学院名称(比如信息学院,建筑学院,文法学院等),第二层为系也就是专业(例如信息学院有计算机系,通信系),第三层为实验室名称(例如计算机系有网络实验室,安全实验室等),我已经建立好了三个表,不知道如果利用树形结构从数据库读取信息,老师说很简单,什么用

js操作DOM--添加、删除节点的简单实例_javascript技巧

js removeChild() 用法 <body> <p id="p1">welcome to <b>javascript</b> world !</p> <script language="javascript" type="text/javascript"> <!-- function nodestatus(node) { var temp=""

hadoop教程(十二) HDFS添加删除节点并进行集群平衡

HDFS添加删除节点并进行hdfs balance 方式1:静态添加datanode,停止namenode方式 1.停止namenode 2.修改slaves文件,并更新到各个节点 3.启动namenode 4.执行hadoop balance命令.(此项为balance集群使用,如果只是添加节点,则此步骤不需要) ----------------------------------------- 方式2:动态添加datanode,不停namenode方式 1.修改slaves文件,添加需要增加

添加和删除HTML节点的简单示例

 添加和删除HTML节点的简单示例 <input type="button" onclick="appendnode()" value="添加节点"> <input type="button" onclick="removenode()" value="删除节点"> <div id="result"></div> <

Jquery动态添加及删除页面节点元素示例代码_jquery

通常我们会遇到选中某个条件,然后添加,累计多个后,再进行执行. 废话不多说,直接上代码! 复制代码 代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>Jquery动态添加及删除页面节点</title> <script src="http://code.jquery.com/jquery-1.8.3.min.js&quo