增加和减少mongodb复制集中的节点
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复制集中的节点的更多相关文章
- MongoDB复制集高可用选举机制(三)
复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...
- MongoDB 复制集节点增加移除及节点属性配置
复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...
- MongoDB 3.2复制集单节点部署(四)
MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件 ...
- MongoDB 2.6复制集单节点部署(三)
MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 2.6版本进行复制集实验(但MongoDB配置文件 ...
- MongoDB 复制集 (一) 成员介绍
一 MongoDB 复制集简介 MongoDB的复制机制主要分为两种: Master-Slave (主从复制) 这个已经不建议使用 ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- MongoDB学习4:MongoDB复制集机制和原理,搭建复制集
1.复制集的作用 1.1 MongoDB复制集的主要意义在于实现服务高可用 1.2 它的实现依赖于两个方面的功能: · 数据写入时将数据迅速复制到另一个独立节点上 · 在接收写入的 ...
- MongoDB实战指南(七):MongoDB复制集之复制集工作机制
http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据 ...
- MongoDB 复制篇
mongoDB 复制篇 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
随机推荐
- Thief in a Shop
题意: 问n个物品选出K个可以拼成的体积有哪些. 解法: 多项式裸题,注意到本题中 $A(x)^K$ 的系数会非常大,采用NTT优于FFT. NTT 采用两个 $2^t+1$ 质数,求原根 $g_n$ ...
- Subsets Forming Perfect Squares
题意: 给出n个数字,选出若干个数字,使得这些数字的乘积是一个完全平方数,问有多少种选法. 解法: 考虑异或方程组,$x_i$表示第i个数字是否选, 注意到只要保证结果中各个质因数都出现偶数次就可保证 ...
- 利用StringBuffer来替换内容
package com.test.java; public class StringBufferTest { public static void main(String[] args) { Stri ...
- 坑暗花明:又遇 .NET Core 中 System.Data.SqlClient 查询缓慢的问题
之前发布过一篇博文 下单快发货慢:一个 JOIN SQL 引起 SqlClient 读取数据慢的奇特问题,当时遇到的问题是从 SQL Server 2008 R2 中查询获取 100 条记录竟然耗时 ...
- Spring中配置Dbutils
<!--配置QueryRunner--> <bean id="runner" class="org.apache.commons.dbutils.Que ...
- Lightoj1122 【数位DP】
题意: 给你m个数,让你在里面挑n个组合,保证位数相差不超过2,求能够组合多少种情况: 思路: dp[i][j]代表第i个结尾为j的方案数. #include<bits/stdc++.h> ...
- [Xcode 实际操作]一、博主领进门-(11)代码区的样式设置,设置模拟器启动的声音
目录:[Swift]Xcode实际操作 本文将演示如何对Xcode代码区进行样式设置,从而调整代码的外观属性.随便打开一份代码文件. [Xcode]->[Preferences]参数设置-> ...
- TensorFlow数据集(一)——数据集的基本使用方法
参考书 <TensorFlow:实战Google深度学习框架>(第2版) 例子:从一个张量创建一个数据集,遍历这个数据集,并对每个输入输出y = x^2 的值. #!/usr/bin/en ...
- ADO winform登录
做一个程序,首先应该从登录,注册.以及增,删,改查开始,本页分享一下程序的登录 登录我们首先要有数据,所以要连接数据库,从数据库中获取我们用户的账号及密码.连接 数据库的代码:创建连接:SqlConn ...
- rn-splash-screen 启动页 ios
1.删除iOS工程文件夹下的 LaunchScreen.xib 文件 2. 3. 如果第4步不一样的样式,可以重新走这个图片的步骤就行 4.进入iOS工程的AppDelegate.m中做如下修改: ...