部署MongoDB复制集群(最全)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 部署MongoDB复制集群(最全)

集群简介

在生产环境中,MongoDB 经常会部署成一个三节点的复制集,或者一个分片集群。我们先来看左边。当 MongoDB 部署为一个复制集时,应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。另外两个从节点,会自动和主节点同步,保持数据的更新。在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举出新的主节点,继续支持应用的读写操作。
我们再来看右边,当 MongoDB 被部署为一个分片集群时,应用程序通过驱动,访问路由节点,也就是 Mongos 节点 Mongos 节点会根据读写操作中的片键值,把读写操作分发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。那集群中的数据是如何分布的呢?这些元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是 Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。
在这里插入图片描述

1.下载

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.14.tgz

2.解压

mongodb-linux-x86_64-rhel70-5.0.14.tgz

3.创建复制集群

[root@10-0-42-211 mongodb]# mkdir rs1 rs2 rs3
[root@10-0-42-211 mongodb]# /home/mongodb/mongodb/bin/mongod --replSet rs --dbpath /data/mongodb/rs1 --port 27017 --fork --logpath ./rs1/mongod.log --bind_ip_all
about to fork child process, waiting until server is ready for connections.
forked process: 843
child process started successfully, parent exiting
[root@10-0-42-211 mongodb]# /home/mongodb/mongodb/bin/mongod --replSet rs --dbpath /data/mongodb/rs2 --port 27018 --fork --logpath ./rs2/mongod.log --bind_ip_all
about to fork child process, waiting until server is ready for connections.
forked process: 906
child process started successfully, parent exiting
[root@10-0-42-211 mongodb]# /home/mongodb/mongodb/bin/mongod --replSet rs --dbpath /data/mongodb/rs3 --port 27019 --fork --logpath ./rs3/mongod.log --bind_ip_all
about to fork child process, waiting until server is ready for connections.
forked process: 967
child process started successfully, parent exiting

4.查看端口情况

[root@10-0-42-211 mongodb]# netstat -anop | grep 2701
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      843/mongod           off (0.00/0/0)
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      906/mongod           off (0.00/0/0)
tcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      967/mongod           off (0.00/0/0)
tcp        0      0 10.0.42.211:27019       10.6.1.26:59287         ESTABLISHED 967/mongod           keepalive (54.41/0/0)
tcp        0      0 10.0.42.211:27018       10.6.1.26:59285         ESTABLISHED 906/mongod           keepalive (42.12/0/0)
tcp        0      0 10.0.42.211:27017       10.6.1.26:59281         ESTABLISHED 843/mongod           keepalive (30.09/0/0)
unix  2      [ ACC ]     STREAM     LISTENING     116503   967/mongod           /tmp/mongodb-27019.sock
unix  2      [ ACC ]     STREAM     LISTENING     116478   843/mongod           /tmp/mongodb-27017.sock
unix  2      [ ACC ]     STREAM     LISTENING     116492   906/mongod           /tmp/mongodb-27018.sock

5.指定复制集配置

/home/mongodb/mongodb/bin/mongo
进入进行设置

rs.initiate()
rs.add ('10.0.42.211:27018')
rs.add ('10.0.42.211:27019')
rs.status()
rs:PRIMARY> rs.status()
{
        "set" : "rs",
        "date" : ISODate("2022-11-22T07:52:54.485Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "votingMembersCount" : 3,
        "writableVotingMembersCount" : 3,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1669103566, 1),
                        "t" : NumberLong(1)
                },
                "lastCommittedWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1669103566, 1),
                        "t" : NumberLong(1)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1669103566, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1669103566, 1),
                        "t" : NumberLong(1)
                },
                "lastAppliedWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                "lastDurableWallTime" : ISODate("2022-11-22T07:52:46.945Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1669103536, 1),
        "electionCandidateMetrics" : {
                "lastElectionReason" : "electionTimeout",
                "lastElectionDate" : ISODate("2022-11-22T07:24:15.765Z"),
                "electionTerm" : NumberLong(1),
                "lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(1669101855, 1),
                        "t" : NumberLong(-1)
                },
                "lastSeenOpTimeAtElection" : {
                        "ts" : Timestamp(1669101855, 1),
                        "t" : NumberLong(-1)
                },
                "numVotesNeeded" : 1,
                "priorityAtElection" : 1,
                "electionTimeoutMillis" : NumberLong(10000),
                "newTermStartDate" : ISODate("2022-11-22T07:24:16.518Z"),
                "wMajorityWriteAvailabilityDate" : ISODate("2022-11-22T07:24:16.905Z")
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "10-0-42-211:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 1950,
                        "optime" : {
                                "ts" : Timestamp(1669103566, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2022-11-22T07:52:46Z"),
                        "lastAppliedWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                        "lastDurableWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1669101855, 2),
                        "electionDate" : ISODate("2022-11-22T07:24:15Z"),
                        "configVersion" : 5,
                        "configTerm" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "10.0.42.211:27018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1688,
                        "optime" : {
                                "ts" : Timestamp(1669103566, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1669103566, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2022-11-22T07:52:46Z"),
                        "optimeDurableDate" : ISODate("2022-11-22T07:52:46Z"),
                        "lastAppliedWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                        "lastDurableWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                        "lastHeartbeat" : ISODate("2022-11-22T07:52:52.764Z"),
                        "lastHeartbeatRecv" : ISODate("2022-11-22T07:52:52.764Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncSourceHost" : "10-0-42-211:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 5,
                        "configTerm" : 1
                },
                {
                        "_id" : 2,
                        "name" : "10.0.42.211:27019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1670,
                        "optime" : {
                                "ts" : Timestamp(1669103566, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1669103566, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2022-11-22T07:52:46Z"),
                        "optimeDurableDate" : ISODate("2022-11-22T07:52:46Z"),
                        "lastAppliedWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                        "lastDurableWallTime" : ISODate("2022-11-22T07:52:46.945Z"),
                        "lastHeartbeat" : ISODate("2022-11-22T07:52:52.764Z"),
                        "lastHeartbeatRecv" : ISODate("2022-11-22T07:52:52.763Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncSourceHost" : "10.0.42.211:27018",
                        "syncSourceId" : 1,
                        "infoMessage" : "",
                        "configVersion" : 5,
                        "configTerm" : 1
                }
        ],
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1669103566, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1669103566, 1)
}

6.创建用户

use admin

db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

db.auth('admin', '123456')

7.navcat 登录

只登录主节点可以进行读写,从节点只能读不可写

相关实践学习
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
相关文章
|
1月前
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
|
1月前
|
存储 NoSQL MongoDB
【赵渝强老师】部署MongoDB复制集
本文介绍了如何在单个节点上搭建MongoDB复制集环境,通过监听不同端口实现多节点配置。详细步骤包括创建数据目录、编辑配置文件、启动节点、初始化复制集、查看状态以及测试主从库的读写操作。文中还提供了视频讲解和代码示例,帮助读者更好地理解和操作。
|
4月前
|
存储 NoSQL MongoDB
今日分享MongoDB一键部署脚本
今日分享MongoDB一键部署脚本
43 0
|
4月前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
438 15
|
5月前
|
自然语言处理 运维 NoSQL
MongoDB集群同步
实现 MongoDB Cluster-to-Cluster 即集群同步的工具是:mongosync 详情可参考如下官方文档: https://www.mongodb.com/zh-cn/docs/cluster-to-cluster-sync/current/quickstart/ 以上这个地址的文档一看就是机器翻译的,可能有不恰当的地方,但基本可参考使用。 以下是本次在某项目地配置集群同步的简要步骤,可参考使用。
95 6
|
4月前
|
存储 运维 NoSQL
轻松上手:逐步搭建你的高可用MongoDB集群(分片)
【8月更文挑战第13天】在数据激增的背景下,传统单机数据库难以胜任。MongoDB作为流行NoSQL数据库,采用分片技术实现水平扩展,有效处理海量数据。分片将数据分散存储,提高并发处理能力和容错性,是高可用架构基石。构建MongoDB集群需理解shard、config server和router三组件协同工作原理。通过具体实例演示集群搭建流程,包括各组件的启动及配置,确保数据高可用性和系统稳定性。合理规划与实践可构建高效稳定的MongoDB集群,满足业务需求并支持未来扩展。
135 0
|
6月前
|
存储 负载均衡 NoSQL
MongoDB的架构设计基于三种集群模式
【6月更文挑战第5天】MongoDB的架构设计基于三种集群模式
247 3
|
7月前
|
NoSQL Unix MongoDB
【docker 】docker-compose 部署mongoDB
【docker 】docker-compose 部署mongoDB
234 1
|
7月前
|
NoSQL MongoDB 数据库
docker部署mongoDB
docker部署mongoDB
239 0
|
7月前
|
NoSQL JavaScript Linux
【MongoDB系列相关笔记】单机部署
本文主要介绍了Windows和Linux系统中安装和启动MongoDB的步骤。
179 0