MongoDB复制集(Replication Sets)简介

本文介绍了MongoDB复制集的工作原理及优势,包括主从复制模式、数据同步过程、故障转移机制以及仲裁机的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中。我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支持的特性在非关系型数据中也是同样适用,比如复制集。



    MongoDB是支持数据复制的,它在复制集方面的优势与其他数据复制集一样,它通过将数据部署在多个不同的服务器上,防止因单机故障而造成数据的丢失,借助数据冗余来提高数据的可靠性和安全性。而且还可以通过复制技术构建分布式数据库,提高系统的访问性能和安全性。

    MongoDB的复制集模式是主从复制。在所有的数据库服务的机器中,只有一台机器担当Primary角色,其余的机器均是Secondaries。担当Primary角色的机器接收所有来自客户端的写(Write)操作请求,并完成该操作,从而保证了数据的一致性。担当Primary角色的机器还能够把来自客户端的读(Read)操作分配给其他机器(Secondaries),减轻主数据库服务器的压力。

    那么MongoDB是如何完成各机器上数据的复制的呢?

    原来,MongoDB的Primary数据库在每次对数据进行update操作时,都会将这些操作记录在oplog日志文件里。Secondaries数据库通过异步操作读取日志中的记录并在本地执行,生成数据来与Primary保持数据一致。

    当Primary数据库不可用时,复制集会从Secondaries中选择一个机器作为Primary机器。默认情况下,客户端都是从Primary机器读取数据,但是客户端也可以指定从哪台副本上读取数据。

    我们也可以配置一台仲裁机,仲裁并不管理复制集,它也不能成为Primary,它只是决定哪些副本集有权成为Primary。

    以上就是MongoDB复制集(Replication Sets)的主要内容,如果您还有哪些地方不太理解,欢迎在评论中留言。



### 配置MongoDB复制集和分片在头歌平台的方法 #### 1. 安装MongoDB 为了在头歌平台上配置MongoDB复制集和分片,首先需要安装MongoDB。以下是具体的步骤: 解压并移动MongoDB压缩包至目标路径: ```bash tar -zxvf mongodb-linux-x86_64-3.2.10.tgz sudo mv mongodb-linux-x86_64-3.2.10 /usr/local/mongodb ``` 完成以上操作后即可确认MongoDB已成功安装[^1]。 --- #### 2. 创建必要的文件夹结构 在头歌平台上运行MongoDB复制集和分片前,需先创建所需的目录结构来存储数据日志和其他必要信息。具体命令如下: ```bash mkdir -p /data/test2/shard1/db mkdir -p /logs/test2/shard1/log mkdir -p /data/test2/shard2/db mkdir -p /logs/test2/shard2/log mkdir -p /data/test2/shard3/db mkdir -p /logs/test2/shard3/log mkdir -p /data/test2/config/db mkdir -p /logs/test2/config/log mkdir -p /logs/test2/mongs/log mkdir -p /etc/test2 ``` 这些指令用于建立各分片的数据目录以及对应的日志记录位置[^4]。 --- #### 3. 启动Config Server (CSRS) Config server 是整个分片架构中的核心组件之一,负责保存元数据信息。可以按照以下方式启动它: ```bash mongod --replSet csrs \ --dbpath /data/test2/config/db \ --logpath /logs/test2/config/log/mongodb.log \ --port 21004 \ --bind_ip localhost \ --fork ``` 此命令会以`csrs`名称初始化副本集,并绑定到端口 `21004` 上工作。 --- #### 4. 初始化Replica Set 对于每一个 Shard 和 Config Server 的实例都需要单独执行初始化过程。例如,在第一个 shard 中可以通过下面的方式实现: ```javascript // 连接到该节点 mongo --host localhost --port 21001 // 执行初始化脚本 rs.initiate({ _id: "shardA", members: [ { _id : 0, host : "localhost:21001" } ] }); ``` 重复上述流程针对其他 shards (`shardB`, `shardC`) 及其对应成员列表进行相同处理[^5]。 --- #### 5. 启动Route Node (Mongos) 最后一步就是部署路由服务器(即 Mongos),它是客户端访问分布式系统的入口点。通过下列参数定义它的行为模式: ```bash mongos --configdb csrs/localhost:21004 \ --logpath /logs/test2/mongs/log/mongodb.log \ --port 21005 \ --fork ``` 这里指定了 config db 地址为 `localhost:21004` 并监听于 `21005` 端口号之上[^2]。 连接到刚启动好的 mongos 实例之后就可以继续添加各个实际存在的物理 shards 到逻辑上的全局视图里去了: ```javascript use admin; sh.addShard("localhost:21001"); sh.addShard("localhost:21002"); sh.addShard("localhost:21003"); ``` 至此为止已经完成了基本的 MongoDB Sharding 架构搭建[^3]。 --- #### 6. 设置读写偏好 当应用层面对副本集中不同角色间如何分配请求流量有所需求时,则可通过调整 readPreference 参数达成目的。可选值包括但不限于以下几个选项:primary、secondary、nearest等等[^5]。 例如如果希望优先从次级节点获取查询结果的话可以在驱动程序或者 shell 命令行工具里面这样设定: ```javascript db.getMongo().setReadPref('secondary'); ``` 这使得后续所有的只读型操作都会被导向可用的 Secondary 成员上去执行从而减轻 Primary 的负担。 --- ### 总结 综上所述,本文介绍了基于头歌环境下的 MongoDB Replication Sets and Sharding Configuration 方法论及其实践指南。涵盖了从基础软件准备到最后高级功能调优等多个方面内容。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值