一、创建复本集
假设mongod,mongo已经配置在系统路径变量上,启动三个命令行窗口,分别执行如下命令:
mongod --port 27017 --dbpath data1 --replSet rs0 mongod --port 27018 --dbpath data2 --replSet rs0 mongod --port 27019 --dbpath data3 --replSet rs0
以上命令可以逐个执行,直到出现replSet没有初始化配置的时候,执行下一个。执行完上面的命令后,新开一个命令行窗口,执行如下命令连接到端口为27017的mongoDB服务器上
mongo
执行上面的命令,默认连接到test数据库,需要先切换到admin数据库,通过执行如下命令
use admin
然后依次执行如下命令:
rs.initiate(); rs.add("yourhostname:27018"); rs.add("yourhostname:27019");
执行完每条指令时,会显示执行结果
{ "ok" : 1 }
执行rs.status()可以查看副本集的状态
rs0:PRIMARY> rs.status(); { "set" : "rs0", "date" : ISODate("2014-11-19T13:48:58Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "tom-Inspiron-3521:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", //主服务器 "uptime" : 941, //运行时间 "optime" : Timestamp(1416404394, 1), "optimeDate" : ISODate("2014-11-19T13:39:54Z"), "self" : true }, { "_id" : 1, "name" : "tom-Inspiron-3521:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY",//从服务器 "uptime" : 548, "optime" : Timestamp(1416404394, 1), "optimeDate" : ISODate("2014-11-19T13:39:54Z"), "lastHeartbeat" : ISODate("2014-11-19T13:48:56Z"), "lastHeartbeatRecv" : ISODate("2014-11-19T13:48:56Z"), "pingMs" : 0, "syncingTo" : "tom-Inspiron-3521:27017" //与同服务器同步 }, { "_id" : 2, "name" : "tom-Inspiron-3521:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 544, "optime" : Timestamp(1416404394, 1), "optimeDate" : ISODate("2014-11-19T13:39:54Z"), "lastHeartbeat" : ISODate("2014-11-19T13:48:56Z"), "lastHeartbeatRecv" : ISODate("2014-11-19T13:48:57Z"), "pingMs" : 0, "syncingTo" : "tom-Inspiron-3521:27017" } ], "ok" : 1 }
二、 创建副本集的第二种方式
上面的方式通过调用rs.add方法向复本集中添加服务器,也可以一步到位,集中所有的服务器,然后完成复本集的初始化,下面是执行的步骤:
mongod --port 27017 --dbpath data1 --replSet rs0 mongod --port 27018 --dbpath data2 --replSet rs0 mongod --port 27019 --dbpath data3 --replSet rs0
以上命令逐个执行完成后,通过mongo连接到27017服务器,在mongo shell中执行如下的命令:
config = {_id: "rs0", members: []}
config.members.push({_id: 0, host: "hostname:2701"}) config.members.push({_id: 1, host: "hostname:27018"}) config.members.push({_id: 2, host: "hostnmae:27019", arbiterOnly: true}) //作为arbiter服务器加入到复本集
rs.initiate(config) //初始化复本集
初始化完成后,就可以像一种那样查看复本集的状态了
三、设置复本集中从服务器可读
默认情况下,从服务器是不可的,比如执行db.bar.find()报如下的错误
rs0:SECONDARY> db.bar.find(); error: { "$err" : "not master and slaveOk=false", "code" : 13435
执行如下命令,将数据库设置为可读(这个操作不是将当前数据库设置为可读,而是将所有的数据库设置为可读,因为设置的作用域是db所在的mongoDB实例)
db.getMongo().setSlaveOk()或者rs.slaveOk();
另外,直接往从数据库中插入数据也是不允许的
四、向复本集中添加从服务器
添加从服务器成功后,新增加的从服务器会跟复本集中的其它服务器保持数据同步,为了达到数据同步,有两种做法:
- 数据目录为空,新服务器添加成功后,通过复本集本身的数据同步策略完成数据同步
- 数据目录为空,首先将复本集中的数据目录copy至新服务器数据目录下,然后再做添加到复本集的操作
启动新服务器
mongod --port 27020 --dbpath data4 --replSet rs0
启动客户端,连接到复本集的Master,执行如下命令(此处没有切换到admin,直接在test上做的)
rs.add("yourhostname:27020");
执行完成后,复本集中包含了1主3从。rs.status操作可以针对从服务器执行
rs0:SECONDARY> rs.status(); { "set" : "rs0", "date" : ISODate("2014-11-19T14:50:30Z"), "myState" : 2, "syncingTo" : "tom-Inspiron-3521:27017", "members" : [ { "_id" : 0, "name" : "tom-Inspiron-3521:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 236, "optime" : Timestamp(1416408389, 1), "optimeDate" : ISODate("2014-11-19T14:46:29Z"), "lastHeartbeat" : ISODate("2014-11-19T14:50:28Z"), "lastHeartbeatRecv" : ISODate("2014-11-19T14:50:29Z"), "pingMs" : 0 }, { "_id" : 1, "name" : "tom-Inspiron-3521:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 236, "optime" : Timestamp(1416408389, 1), "optimeDate" : ISODate("2014-11-19T14:46:29Z"), "lastHeartbeat" : ISODate("2014-11-19T14:50:28Z"), "lastHeartbeatRecv" : ISODate("2014-11-19T14:50:28Z"), "pingMs" : 0, "syncingTo" : "tom-Inspiron-3521:27017" }, { "_id" : 2, "name" : "tom-Inspiron-3521:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 236, "optime" : Timestamp(1416408389, 1), "optimeDate" : ISODate("2014-11-19T14:46:29Z"), "lastHeartbeat" : ISODate("2014-11-19T14:50:28Z"), "lastHeartbeatRecv" : ISODate("2014-11-19T14:50:29Z"), "pingMs" : 0, "syncingTo" : "tom-Inspiron-3521:27017" }, { "_id" : 3, "name" : "tom-Inspiron-3521:27020", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 379, "optime" : Timestamp(1416408389, 1), "optimeDate" : ISODate("2014-11-19T14:46:29Z"), "self" : true //没有同步信息??这是因为,当前连接的是本台服务器,如果连接到主服务器上执行rs.status(),则会显示同步信息 } ], "ok" : 1
五、从复本集中删除从服务器
- 删除步骤:
- 关闭要删除的从服务器27020
-
mongo连接到主服务器,执行、
rs.remove("hostname:27020");
- 删除后,执行结果如下,虽然有错误提示,但是这是正常的,如MongoDB disconnects the shell briefly as the replica set elects a new primary. The shell then automatically reconnects. The shell displays a DBClientCursor::init call() failed error even though the command succeeds所说。也就是说,主服务器也是可以删除的,所以,mongo可以不用连接到主服务器上执行删除命令
rs0:PRIMARY> rs.remove("tom-Inspiron-3521:27020") Wed Nov 19 22:58:44.551 DBClientCursor::init call() failed Wed Nov 19 22:58:44.577 Error: error doing query: failed at src/mongo/shell/query.js:78 Wed Nov 19 22:58:44.578 trying reconnect to 127.0.0.1:27017 Wed Nov 19 22:58:44.579 reconnect 127.0.0.1:27017 ok
2. 说明:
- 虽然mongoDB的官方文档说,删除前需要首先关闭待删除的服务器,实际测试时,可以不用先停止。
- rs.remove操作可以在从服务器上执行以删除主服务器,主服务器删除后,复本集马上执行Lead选举,选举新的主服务器
3. 重新添加
首先在服务器中添加几条数据,然后执行如下命令重新将它加入到复本集中,通过观察可知,新加入的数据同步到了新加的从数据中
rs.add("hostname:27020")
a
相关推荐
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。 副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一...
mongodb-spark官方连接器,运行spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.11:1.1.0可以自动下载,国内网络不容易下载成功,解压后保存到~/.ivy2目录下即可。
MongoDB 副本集搭建教程 MongoDB 副本集是 MongoDB 中的一种高可用性解决方案,它可以提供高性能、可扩展性和高可用性。通过搭建副本集,用户可以确保数据的安全和高可用性。 一、 MongoDB 副本集环境搭建攻略 1....
### MongoDB 主从复制,副本集分布式存储 #### 一、MongoDB 主从复制与副本集的概念 MongoDB 是一种非常流行的非关系型数据库系统,它采用面向文档的数据模型,能够高效地处理大量的非结构化数据。为了提高系统的...
k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...
mongodb4.22分片及副本集搭建
mongodb 副本集php文件样例,php连接mongodb
MongoDB 副本集搭建 MongoDB 副本集搭建是 MongoDB 的高可用性解决方案之一,它可以提供数据的冗余存储和自动故障转移,确保数据的高可用性和可靠性。下面将详细介绍 MongoDB 副本集搭建的步骤和过程。 一、安装...
mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复
5. **复制集**:为了提高可用性和容错性,MongoDB支持复制集,即多个数据副本之间的同步。 6. **分片**:当数据量过大时,可以使用分片来水平扩展数据库,将数据分布在多个机器上。 7. **GridFS**:MongoDB提供了一...
MongoDB 是一个流行的开源、分布式文档型数据库,以其灵活性...在Linux环境下,按照上述步骤进行操作,可以成功地建立一个基本的MongoDB副本集,但实际部署时还需要考虑网络环境、安全性、监控和日志管理等多方面因素。
自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。
在这个“MongoDb增删改查的网站范例”中,我们将探讨如何利用Spring Data项目和MongoDB适配器进行数据库操作。 Spring Data是一个强大的框架,它简化了与各种数据存储系统的交互,包括MongoDB。Spring Data MongoDB...
同时,对于初学者来说,MongoVUE是一个很好的学习工具,它以直观的方式展示了MongoDB的基本操作和概念,使得理解和掌握MongoDB变得更加容易。总的来说,MongoVUE是MongoDB开发和运维过程中不可或缺的一款实用工具。
MongoDB 是一个高性能、分布式、开源的文档型数据库,它支持分片(sharding)和副本集(replica sets)来实现水平扩展和高可用性。分片是将数据分散到多个物理节点上,以处理大数据量和高并发场景;副本集则是为了...
在"mongodb的小例子,增删改查,分页"这个主题中,我们将深入探讨MongoDB的基本操作,包括数据的插入(增)、查询(查)、更新(改)以及删除(删),同时还会涉及到数据分页这一重要的数据检索技术。 1. 数据插入...
MongoVue 是一款专为 MongoDB 设计的图形用户界面(GUI)工具,它提供了直观的界面来帮助用户管理和操作 MongoDB 数据库。在 Windows 操作环境下,MongoVue 能够使数据库管理员和开发人员更加轻松地进行数据查看、...
本教程将详细介绍如何使用Java进行MongoDB的基本操作,包括增(添加数据)、删(删除数据)、改(修改数据)和查(查询数据)。 首先,你需要在项目中引入MongoDB的Java驱动程序。目前最新的稳定版本是`mongodb-...