当前位置: 首页 > news >正文

mongoDB集群

副本集-Replica Sets

MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。 副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。

副本集角色介绍

副本集有两种类型三种角色

两种类型:

        主节点(Primary)类型:数据操作的主要连接点,可读写。

        次要(辅助、从)节点(Secondaries)类型:数据冗余备份节点,可以读或选举。

三种角色:

        主要成员(Primary):主要接收所有写操作。就是主节点。

        副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。

        仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。

搭建一主一副本一仲裁

前置

        mongodb搭建不需要很多机器,也不需要下载很多遍软件,只需要在启动命令指定对应的conf文件,以及在每个配置文件都设置好对应的db目录和log目录。

        博主已经下载好mongodb-linux-x86_64-4.0.10.tgz,并且已经解压并mv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb移动到对应的文件,这样就可以用/usr/local/mongodb/bin/mongod -f /你自己配置文件的地址/ 来启动服务了。

开始搭建

# 主
mkdir -p /mongodb/replica_sets/myrs_27017/log \ &
mkdir -p /mongodb/replica_sets/myrs_27017/data/db
# 副本
mkdir -p /mongodb/replica_sets/myrs_27018/log \ &
mkdir -p /mongodb/replica_sets/myrs_27018/data/db
# 仲裁
mkdir -p /mongodb/replica_sets/myrs_27019/log \ &
mkdir -p /mongodb/replica_sets/myrs_27019/data/db
vim /mongodb/replica_sets/myrs_27017/mongod.conf
systemLog:# MongoDB发送所有日志输出的目标指定为文件destination: file# mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/mongodb/replica_sets/myrs_27017/log/mongod.log"# 当mongos或mongod实例重新启动时,会将新条目附加到现有日志文件的末尾logAppend: truestorage:# mongod实例存储其数据的目录,默认值为"/data/db"dbPath: "/mongodb/replica_sets/myrs_27017/data/db"journal:# 启用或禁用持久性日志以确保数据文件保持有效和可恢复enabled: trueprocessManagement:# 启用在后台运行mongos或mongod进程的守护进程模式fork: truepidFilePath: "/mongodb/replica_sets/myrs_27017/log/mongod.pid"net:# 服务实例绑定的IP,默认是localhostbindIp: "0.0.0.0"# 绑定的端口,默认是27017port: 27017
replication:replSetName: myrs
vim /mongodb/replica_sets/myrs_27018/mongod.confsystemLog:# MongoDB发送所有日志输出的目标指定为文件destination: file# mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/mongodb/replica_sets/myrs_27018/log/mongod.log"# 当mongos或mongod实例重新启动时,会将新条目附加到现有日志文件的末尾logAppend: truestorage:# mongod实例存储其数据的目录,默认值为"/data/db"dbPath: "/mongodb/replica_sets/myrs_27018/data/db"journal:# 启用或禁用持久性日志以确保数据文件保持有效和可恢复enabled: trueprocessManagement:# 启用在后台运行mongos或mongod进程的守护进程模式fork: truepidFilePath: "/mongodb/replica_sets/myrs_27018/log/mongod.pid"net:# 服务实例绑定的IP,默认是localhostbindIp: "0.0.0.0"# 绑定的端口,默认是27017port: 27018
replication:replSetName: myrsvim /mongodb/replica_sets/myrs_27019/mongod.confsystemLog:# MongoDB发送所有日志输出的目标指定为文件destination: file# mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/mongodb/replica_sets/myrs_27019/log/mongod.log"# 当mongos或mongod实例重新启动时,会将新条目附加到现有日志文件的末尾logAppend: truestorage:# mongod实例存储其数据的目录,默认值为"/data/db"dbPath: "/mongodb/replica_sets/myrs_27019/data/db"journal:# 启用或禁用持久性日志以确保数据文件保持有效和可恢复enabled: trueprocessManagement:# 启用在后台运行mongos或mongod进程的守护进程模式fork: truepidFilePath: "/mongodb/replica_sets/myrs_27019/log/mongod.pid"net:# 服务实例绑定的IP,默认是localhostbindIp: "0.0.0.0"# 绑定的端口,默认是27017port: 27019
replication:replSetName: myrs

启动

/usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27017/mongod.conf/usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27018/mongod.conf/usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27019/mongod.conf

初始化配置副本集和主节点

连接和初始化

        这个集群不是搭建好就能用的,还需要连接上去做配置

/usr/local/mongodb/bin/mongo  --port=27017# 连接上之后,很多命令都不能使用,比如,show dbs等,必须初始化# 初始化
rs.initiate()

1)“ok”的值为1,说明创建成功。

2)命令行提示符发生变化,变成了一个从节点角色,此时默认不能读写。稍等片刻,回车,变成主节点。

# 查看当前副本集的配置内容
rs.conf()
rs.config()
{"_id" : "myrs","version" : 1,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "VM-109-112-tencentos:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1}],"settings" : {"chainingAllowed" : true,"heartbeatIntervalMillis" : 2000,"heartbeatTimeoutSecs" : 10,"electionTimeoutMillis" : 10000,"catchUpTimeoutMillis" : -1,"catchUpTakeoverDelayMillis" : 30000,"getLastErrorModes" : {},"getLastErrorDefaults" : {"w" : 1,"wtimeout" : 0},"replicaSetId" : ObjectId("687792d02d18d0cf71477f3f")}
}

说明:

1)"_id" : "myrs":副本集的配置数据存储的主键值,默认就是副本集的名字

2)"members":副本集成员数组,此时只有一个:"host" : "180.76.159.126:27017",该成员不

是仲裁节点:"arbiterOnly" : false,优先级(权重值):"priority" : 1,

3)"settings":副本集的参数配置。

提示:副本集配置的查看命令,本质是查询的是 system.replset的表中的数据:

use localshow collectionsdb.system.replset.find(){ "_id" : "myrs", "version" : 1, "protocolVersion" : NumberLong(1), "writeConcernMajorityJournalDefault" : true, "members" : [ { "_id" : 0, "host" : "VM-109-112-tencentos:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "catchUpTakeoverDelayMillis" : 30000, "getLastErrorModes" : {  }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("687792d02d18d0cf71477f3f") } }
查看集群状态
rs.status(){"set" : "myrs","date" : ISODate("2025-07-16T11:58:32.762Z"),"myState" : 1,"term" : NumberLong(1),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"optimes" : {"lastCommittedOpTime" : {"ts" : Timestamp(1752667104, 1),"t" : NumberLong(1)},"readConcernMajorityOpTime" : {"ts" : Timestamp(1752667104, 1),"t" : NumberLong(1)},"appliedOpTime" : {"ts" : Timestamp(1752667104, 1),"t" : NumberLong(1)},"durableOpTime" : {"ts" : Timestamp(1752667104, 1),"t" : NumberLong(1)}},"lastStableCheckpointTimestamp" : Timestamp(1752667074, 1),"members" : [{"_id" : 0,"name" : "VM-109-112-tencentos:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 327,"optime" : {"ts" : Timestamp(1752667104, 1),"t" : NumberLong(1)},"optimeDate" : ISODate("2025-07-16T11:58:24Z"),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"infoMessage" : "","electionTime" : Timestamp(1752666832, 2),"electionDate" : ISODate("2025-07-16T11:53:52Z"),"configVersion" : 1,"self" : true,"lastHeartbeatMessage" : ""}],"ok" : 1,"operationTime" : Timestamp(1752667104, 1),"$clusterTime" : {"clusterTime" : Timestamp(1752667104, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
}

说明:

1)"set" : "myrs":副本集的名字

2)"myState": 1:说明状态正常

3)"members":副本集成员数组,此时只有一个:"name" :"VM-109-112-tencentos",该成员的

角色是"stateStr" : "PRIMARY",该节点是健康的:"health" : 1。

添加从节点

rs.add("21.91.109.112:27018"){"ok" : 1,"operationTime" : Timestamp(1752667344, 1),"$clusterTime" : {"clusterTime" : Timestamp(1752667344, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
}

1)"ok" : 1:说明添加成功。

这样添加的是副本节点,添加仲裁节点看下边

添加仲裁节点
rs.add("21.91.109.112:27019",arbiterOnly)
或者
rs.addArb("21.91.109.112:27019"){"ok" : 1,"operationTime" : Timestamp(1752667477, 1),"$clusterTime" : {"clusterTime" : Timestamp(1752667477, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
}

http://www.dtcms.com/a/282054.html

相关文章:

  • Jmeter+ant+jenkins接口自动化测试框架
  • 汽车功能安全-相关项集成和测试(系统集成测试系统合格性测试)-12
  • LabVIEW液压机智能监控
  • 【游戏引擎之路】登神长阶(十九):3D物理引擎——岁不寒,无以知松柏;事不难,无以知君子
  • WSL2更新后Ubuntu 24.04打不开(终端卡住,没有输出)
  • 模型上下文协议(MCP)的工作流程、安全威胁与未来发展方向
  • 海康线扫相机通过采集卡的取图设置
  • 作业06-文本工单调优
  • UE5 相机后处理材质与动态参数修改
  • 图机器学习(8)——经典监督图嵌入算法
  • (笔记+作业)第五期书生大模型实战营---L1G3000 LMDeploy 高效部署量化实践
  • spring容器的bean是单例还是多例的?线程安全吗?
  • 智慧公厕系统打造洁净、安全的公共空间
  • PyTorch 参数初始化详解:从理论到实践
  • 使用EF Core修改数据:Update方法与SaveChanges的深度解析
  • 【一文解决】块级元素,行内元素,行内块元素
  • 多目标优化|HKELM混合核极限学习机+NSGAII算法工艺参数优化、工程设计优化,四目标(最大化输出y1、最小化输出y2,y3,y4),Matlab完整源码
  • 自启动策略调研
  • 【前端】Vue3 前端项目实现动态显示当前系统时间
  • C++11迭代器改进:深入理解std::begin、std::end、std::next与std::prev
  • 从理论到实践:操作系统进程状态的核心逻辑与 Linux 实现
  • Mysql系列--0、数据库基础
  • react 路由 react-router-dom
  • 代谢通路分析:意义、方法与解读
  • 实训十——路由器与TCP/IP模型
  • 筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析
  • IPv6
  • 构建高可用微服务架构:Istio与Linkerd的深度对比与实战
  • [论文阅读] 人工智能 + 软件工程 | 开源软件中的GenAI自白:开发者如何用、项目如何管、代码质量受何影响?
  • (新手友好)MySQL学习笔记(完):事务和锁