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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:
   前面介绍了如何搭建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!" }
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
10月前
|
存储 NoSQL MongoDB
mongodb搭建Replica Set
mongodb搭建Replica Set 简单高效
166 0
|
NoSQL 算法 容灾
『MongoDB』MongoDB高可用部署架构——复制集篇(Replica Set)
读完这篇文章里你能收获到 1. MongoDB是如何通过复制集实现高可用的 2. 主节点宕机后如何通过选举做到故障恢复 3. 在复制集中常见的可调整参数有哪些 4. 在Linux原生环境搭建MongoDB复制集 5. 在Winodws环境搭建MongoDB复制集
794 1
『MongoDB』MongoDB高可用部署架构——复制集篇(Replica Set)
|
存储 NoSQL 测试技术
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用性。
316 0
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
|
存储 NoSQL 网络协议
MongoDB系列-复制集(Replica Set)应用部署(生产、测试、开发环境)
通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。将虚拟机用于生产部署时,应将每个mongod实例放置在由冗余电源电路和冗余网络路径提供服务的单独主机服务器上,而且尽可能的将副本集的每个成员部署到自己的计算机绑定到标准的MongoDB端口27017。
433 0
|
NoSQL Java MongoDB
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
160 0
|
NoSQL MongoDB Docker
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
168 0
|
NoSQL MongoDB Docker
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
147 0
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
|
存储 NoSQL Shell
(1)解锁MongoDB replica set核心姿势
本文倒腾目前大热的MongoDB Replica Set集群,在倒腾的同时串讲一些 MongoDB特性。
(1)解锁MongoDB replica set核心姿势
|
NoSQL
How to Create Highly Available MongoDB Databases with Replica Sets
Find out how you can create MongoDB databases with high availability by backing up data through replica set elections.
4099 0
How to Create Highly Available MongoDB Databases with Replica Sets
|
存储 NoSQL 数据库
mongodb分片集群(sharding with replica set)配置
一共有4台机器,各自挂接一个存储,希望实现: 尽量节约存储 高可用性 存储大量数据 配置方案: 每一台机器做一个分片的主数据库 每一台机器做一个分片的后备数据库 每一台机器做一个分片的仲裁服务 两个两个一组交叉作对方的后备 有三台机器开配置服务 有一台机器开路由服务(生产环境可以在每一台Windows App服务器上开路由服务,App服务器集群做负载均衡) 这样的话,任何一台服务器完全离线(或者交叉的两台服务器离线),都能保证整个系统正常运行。
757 0