MongoDB Replica Sets不仅提供高可用性的解决方案,同时也提供负载均衡的解决方案,增减 Replica Sets节点在实际应用中非常普通。例如,当应用的读压力暴增时,3台节点的环境已不能满足需求,那么就需要增加一些节点将压力平均分配一下;当应用的压力小时,可以减少一些节点来减少硬件资源的成本,总之这是一个长期且持续的工作。

增加节点步骤

1) 配置并启动新节点,启用 28013 这个端口给新的节点

[root@node222 mongodb]# mkdir -p /data02/mongors/data/r3

[root@node222 mongodb]# echo " this is rs1 super secret key " > /data02/mongors/key/r3

[root@node222 mongodb]# chmod 600 /data02/mongors/key/r3

[root@node222 mongodb]# /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r3 --fork --port 28013 --dbpath /data02/mongors/data/r3 --logpath=/data02/mongors/log/r3.log --logappend

about to fork child process, waiting until server is ready for connections.

forked process: 17718

child process started successfully, parent exiting

[root@node222 mongodb]#

2) 在primary节点上执行命令添加此新节点到现有的 Replica Sets

rs1:PRIMARY> rs.add("localhost:28013");rs.add("localhost:28013");

{ "ok" : 1 }

rs1:PRIMARY> rs.status();rs.status();

{

"set" : "rs1",

"date" : ISODate("2016-07-22T10:26:06.175Z"),

"myState" : 1,

"term" : NumberLong(2),

"heartbeatIntervalMillis" : NumberLong(2000),

"members" : [

{

"_id" : 0,

"name" : "localhost:28010",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 235,

"optime" : {

"ts" : Timestamp(1469183031, 1),

"t" : NumberLong(2)

},

"optimeDate" : ISODate("2016-07-22T10:23:51Z"),

"lastHeartbeat" : ISODate("2016-07-22T10:26:05.493Z"),

"lastHeartbeatRecv" : ISODate("2016-07-22T10:26:05.603Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "localhost:28012",

"configVersion" : 2

},

{

"_id" : 1,

"name" : "localhost:28011",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 2749,

"optime" : {

"ts" : Timestamp(1469183031, 1),

"t" : NumberLong(2)

},

"optimeDate" : ISODate("2016-07-22T10:23:51Z"),

"lastHeartbeat" : ISODate("2016-07-22T10:26:05.493Z"),

"lastHeartbeatRecv" : ISODate("2016-07-22T10:26:05.603Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "localhost:28012",

"configVersion" : 2

},

{

"_id" : 2,

"name" : "localhost:28012",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 2956,

"optime" : {

"ts" : Timestamp(1469183031, 1),

"t" : NumberLong(2)

},

"optimeDate" : ISODate("2016-07-22T10:23:51Z"),

"electionTime" : Timestamp(1469182400, 1),

"electionDate" : ISODate("2016-07-22T10:13:20Z"),

"configVersion" : 2,

"self" : true

},

{

"_id" : 3,

"name" : "localhost:28013",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 65,

"optime" : {

"ts" : Timestamp(1469177570, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2016-07-22T08:52:50Z"),

"lastHeartbeat" : ISODate("2016-07-22T08:53:54.701Z"),

"lastHeartbeatRecv" : ISODate("2016-07-22T08:53:51.755Z"),

"pingMs" : NumberLong(0),

"configVersion" : 2

}

],

"ok" : 1

}

rs1:PRIMARY> rs.config();rs.config();

{

"_id" : "rs1",

"version" : 2,

"protocolVersion" : NumberLong(1),

"members" : [

{

"_id" : 0,

"host" : "localhost:28010",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

},

{

"_id" : 1,

"host" : "localhost:28011",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

},

{

"_id" : 2,

"host" : "localhost:28012",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

},

{

"_id" : 3,

"host" : "localhost:28013",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

}

],

"settings" : {

"chainingAllowed" : true,

"heartbeatIntervalMillis" : 2000,

"heartbeatTimeoutSecs" : 10,

"electionTimeoutMillis" : 10000,

"getLastErrorModes" : {

},

"getLastErrorDefaults" : {

"w" : 1,

"wtimeout" : 0

},

"replicaSetId" : ObjectId("5791ea00a9dbf7228bb1ec0c")

}

}

rs1:PRIMARY>

3)验证数据是否已经同步过来了

# /usr/local/mongodb/bin/mongo -port 28013

> rs.slaveOK()

> db.c1.find()

删除节点步骤

下面将刚刚添加的两个新节点 28013 从复制集中去除掉,只需 rs.remove 指令就可以了,具体如下:

登录到primary 节点,执行下面的命令将28013 从复制集中去掉:

> rs.remove("localhsots:28013");

查看复制集状态,可以看到只有三个成员,原来的两个成员都已经成功去除了:

> rs.status()

rs1:PRIMARY> rs.remove("localhost:28013");rs.remove("localhost:28013");

{ "ok" : 1 }

rs1:PRIMARY> rs.conf() rs.conf()

{

"_id" : "rs1",

"version" : 3,

"protocolVersion" : NumberLong(1),

"members" : [

{

"_id" : 0,

"host" : "localhost:28010",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

},

{

"_id" : 1,

"host" : "localhost:28011",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

},

{

"_id" : 2,

"host" : "localhost:28012",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

},

"slaveDelay" : NumberLong(0),

"votes" : 1

}

],

"settings" : {

"chainingAllowed" : true,

"heartbeatIntervalMillis" : 2000,

"heartbeatTimeoutSecs" : 10,

"electionTimeoutMillis" : 10000,

"getLastErrorModes" : {

},

"getLastErrorDefaults" : {

"w" : 1,

"wtimeout" : 0

},

"replicaSetId" : ObjectId("5791d785947160a5bdbd700b")

}

}

rs1:PRIMARY>

增加和减少mongodb复制集中的节点的更多相关文章

  1. MongoDB复制集高可用选举机制(三)

    复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...

  2. MongoDB 复制集节点增加移除及节点属性配置

    复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...

  3. MongoDB 3.2复制集单节点部署(四)

    MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件 ...

  4. MongoDB 2.6复制集单节点部署(三)

    MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 2.6版本进行复制集实验(但MongoDB配置文件 ...

  5. MongoDB 复制集 (一) 成员介绍

       一 MongoDB 复制集简介          MongoDB的复制机制主要分为两种:          Master-Slave    (主从复制)      这个已经不建议使用       ...

  6. Raft与MongoDB复制集协议比较

    在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...

  7. MongoDB学习4:MongoDB复制集机制和原理,搭建复制集

    1.复制集的作用   1.1 MongoDB复制集的主要意义在于实现服务高可用   1.2 它的实现依赖于两个方面的功能:    · 数据写入时将数据迅速复制到另一个独立节点上    · 在接收写入的 ...

  8. MongoDB实战指南(七):MongoDB复制集之复制集工作机制

    http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据 ...

  9. MongoDB 复制篇

    mongoDB 复制篇 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...

随机推荐

  1. atof,atoi,atol,strtod,strtol,strtoul

    字符串处理函数 atof 将字串转换成浮点型数 atoi 字符串转换成整型数 atol 函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *np ...

  2. Flutter实战视频-移动电商-44.详细页_首屏自定义Widget编写

    44.详细页_首屏自定义Widget编写 把详细页的图片.标题.编号和价格形成一个单独的widget去引用 详情页的顶部单独封装个插件 在pages下面新建detials_page的文件件并在里面新建 ...

  3. PL/SQL 的 事务处理

    原文连接 http://blog.csdn.net/lhl6688/article/details/42874109 BEGIN DECLARE V_COUNT    INTEGER; -- 表中记录 ...

  4. TRANSFORM_TEX是做什么的

    简单来说,TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的tiling和offset作运算,确保材质球里的缩放和偏移设置是正确的. (v.texcoord就是顶点的uv) 而_MainTe ...

  5. OPENGL0_简介

    opengl定义: Open Graphics Library,开放图形程序接口,跨平台,跨语言.提供了与底层图形硬件的接口,是一个功能强大的底层图形库. opengl库种类: gl:核心库,常规,核 ...

  6. Ibatis相关

    XML中的#和$的区别 http://shenzhenchufa.blog.51cto.com/730213/254561 poolMaximumActiveConnections和poolMaxim ...

  7. foreach循环报NPE空指针异常

    前言 最近debug时忽然发现,如果一个集合赋值为null,那么对该集合进行foreach循环(也叫增强for循环)时,会报NPE(即空指针异常NullPointerException). 代码如下: ...

  8. select查询---sql

    SELECT 语句用于从数据库中选取数据. SQL SELECT 语句 SELECT 语句用于从数据库中选取数据. 结果被存储在一个结果表中,称为结果集. SQL SELECT 语法 SELECT c ...

  9. TopCoder9915(期望dp)

    1.还是逆向. 2.状态是还剩红i黑j张时的期望,这样从0,0往R,B推.注意因为是逆着的,所以到了某一步发现期望为负时直接f[i][j]归零,意义是这之后(在递推中算是这之前)的都不摸了,到这就停( ...

  10. Codeforces 1139F(树状数组+扫描线)

    题目传送 做法 对于每个人,inc为x,pref为y:对于每道菜,p和s为x,b为y 于是根据题意有\[p[i]<=x<=s[i]\]\[p[i]+b[i]<=x+y\]\[p[i] ...