MongoDB学习笔记:副本集
2022/1/30 19:06:41
本文主要是介绍MongoDB学习笔记:副本集,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文更新于2022-01-08,使用MongoDB 4.4.5。
目录- 单台服务器下创建副本集
- 多台服务器下创建副本集
- 重新启动并连接到副本集
- 维护副本集节点
单台服务器下创建副本集
-
确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权限):
su root mkdir -p /data/db chmod 0777 /data /data/db
-
启动shell但不连接到任何mongod。
mongo --nodb
-
创建副本集(笔者的副本集有3个节点,名字为repl)。
var replset = new ReplSetTest({nodes: 3, name: "repl"});
-
启动副本集。会先删除原有数据库目录,再创建数据库目录和文件,启动所有副本集进程,同时会不断输出所有节点的日志。
replset.startSet();
返回值值的各个元素包含节点的地址(笔者是localhost::20000、localhost::20001、localhost::20002)。
-
初始化副本集。会从备份节点中选举出主节点。
replset.initiate();
-
启动shell连接到副本集的节点(笔者使用localhost::20000),可执行查询操作。
mongo mongodb://localhost:20000
shell提示是“repl:PRIMARY”或“repl:SECONDARY”,前面是副本集名字,后面表示主节点或备份节点。
-
在第一个shell中停止副本集。会停止所有副本集进程。
replset.stopSet();
多台服务器下创建副本集
此种方法也可在单台服务器下创建副本集(笔者就以此方式使用)。
-
确保数据目录(笔者的副本集有3个节点,使用/data/db/rs0、/data/db/rs1、/data/db/rs2)存在且当前系统用户有读写权限。例如(需根据实际情况设置权限):
su root mkdir -p /data/db/rs0 mkdir -p /data/db/rs1 mkdir -p /data/db/rs2 chmod 0777 /data /data/db /data/db/rs0 /data/db/rs1 /data/db/rs2
-
使用不同的shell启动副本集节点(笔者的副本集名字为replica),如果在单台服务器下需指定不同的数据目录(如笔者在上一步所述)和端口(笔者使用30000、30001、30002)。会创建数据库文件。
mongod --replSet replica --dbpath /data/db/rs0 --port 30000 mongod --replSet replica --dbpath /data/db/rs1 --port 30001 mongod --replSet replica --dbpath /data/db/rs2 --port 30002
-
启动shell连接到任意一个节点(笔者使用端口30000的节点)。
mongo mongodb://localhost:30000
-
初始化副本集,会从备份节点中选举出主节点(笔者的副本集名字为replica,各节点为localhost:30000、localhost:30001、localhost:30002)。如果副本集曾经初始化,则不用执行此步骤。
rs.initiate({ _id: "replica", members: [ { "_id": 0, "host": "localhost:30000" }, { "_id": 1, "host": "localhost:30001" }, { "_id": 2, "host": "localhost:30002" } ] });
-
启动shell连接到副本集(笔者的副本集名字为replica,各节点为localhost:30000、localhost:30001、localhost:30002),可执行查询操作。
mongo mongodb://localhost:30000,localhost:30001,localhost:30002/?replicaSet=replica
-
也可以启动shell连接到任意节点(笔者使用localhost:30000)。
mongo mongodb://localhost:30000
重新启动并连接到副本集
对于使用上述方式创建的副本集,如需重新启动并连接到副本集,只需启动不同的shell执行其中若干个步骤,如下:
mongod --replSet replica --dbpath /data/db/rs0 --port 30000 mongod --replSet replica --dbpath /data/db/rs1 --port 30001 mongod --replSet replica --dbpath /data/db/rs2 --port 30002 mongo mongodb://localhost:30000,localhost:30001,localhost:30002/?replicaSet=replica
维护副本集节点
-
将待维护节点的mongod服务停止。
-
以单机模式启动节点(笔者使用上例中的localhost:30000,并将端口修改为10000)。
mongod --dbpath /data/db/rs0 --port 10000
-
启动shell连接到此节点(如上所述,笔者使用localhost:10000),进行维护。
mongo mongodb://localhost:10000
-
维护完成后,使用原来的副本集参数启动此节点(如上所述,笔者使用原来的副本集名字replica和原来的端口30000)。
mongod --replSet replica --dbpath /data/db/rs0 --port 30000
这篇关于MongoDB学习笔记:副本集的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享