文章目录
1. 什么是 MongoDB 复制(副本)集
MongoDB 复制集是一个包含多个 MongoDB 实例的集群,其中有一个主节点(Primary)和多个备份节点(Secondary)。主节点负责处理所有的写请求,并将写入的数据复制到备份节点上。备份节点通过从主节点同步数据来保持数据的一致性。如果主节点发生故障,备份节点中会选出一个节点成为新的主节点,保持系统的高可用性。
下面是一个 MongoDB 复制集的官网示意图:

1.1 组成部分
副本集是由多个mongod实例组成,这些实例维护相同的数据集。副本集包含多个数据承载节点和一个可选的仲裁节点。在数据承载节点中,一个且仅一个成员被视为主节点,而其他节点则被视为次要节点。
- 主节点接收所有写操作。在一个副本集中,只能有一个能够使用{w:“majority”}写关注来确认写操作的主节点;尽管在某些情况下,另一个mongod实例可能暂时认为自己也是主节点。主节点在其操作日志(即oplog)中记录其数据集的所有更改。
- 次要节点复制主节点的操作日志,并将操作应用于其数据集,使得次要节点的数据集反映主节点的数据集。如果主节点不可用,一个合格的次要节点将进行选举,选举自己成为新的主节点。
1.2 三节点复制模式
1.2.1 PSS
- 组成:1个主节点和2个备节点,即Primary+Secondary+Secondary。
- 特点:在这个模式下,主节点接收所有写操作,备节点复制主节点的操作日志并应用这些操作到它们自己的数据集中。如果主节点不可用,复制集会选择其中一个备节点作为新的主节点并继续正常的操作,直到旧的主节点重新加入复制集。这个模式的优点是它简单易懂,对于数据集较小的情况下,提供了一定程度的容错能力。但是,当数据集变得非常大时,备节点的同步可能会成为性能瓶颈,因为每个备节点都要复制主节点的所有写操作。
- 结构图:

1.2.2 PSA
- 组成:1个主节点、1个备节点和1个仲裁者节点,即Primary+Secondary+Arbiter
- 特点:Arbiter节点是副本集中的一种特殊节点,它不存储数据副本,也不提供业务的读写操作。相反,它只参与副本集的选举过程,帮助判断哪个节点应该成为主节点。Arbiter节点通常部署在与数据节点不同的机器上,这样即使数据节点所在机器发生故障,Arbiter节点仍然能够参与选举。由于Arbiter节点不存储数据,因此它的故障不会影响业务的正常运行,只会影响选举投票。使用Arbiter节点的模式只提供数据集的一个完整副本,如果主节点不可用,则复制集将选择备节点作为主节点。
- 结构图:

1.3 复制集的优点
MongoDB 复制集有以下几个优点:
-
高可用性
MongoDB 复制集可以保证数据在多个节点上的冗余备份,当主节点(Primary)宕机或网络异常时,备份节点(Secondary)可以自动接管主节点的工作,确保系统的高可用性。通过设置副本集成员的投票权重,可以进一步提高系统的可用性和容错性。 -
数据可靠性
MongoDB 复制集可以保证数据在多个节点上的冗余备份,可以有效地避免数据丢失或损坏的情况。当主节点写入数据时,备份节点会自动复制数据,确保数据在多个节点上的一致性。在节点宕机或网络异常时,系统会自动进行故障转移,确保数据的可靠性。 -
数据读写分离
在 MongoDB 复制集中,备份节点可以承担读取数据的任务,减轻了主节点的压力,提高了系统的并发读取能力。备份节点也可以用来支持查询操作,从而实现数据读写分离,进一步提高系统的性能和可用性。 -
数据灾备
MongoDB 复制集可以实现跨地理位置的数据灾备,将数据备份到不同的地理位置上,以防止因为自然灾害等因素导致的数据损失或不可用。同时,在跨地理位置备份数据时,也需要考虑网络延迟和带宽限制等问题。
MongoDB 复制集可以提高系统的可用性、容错性、性能和可靠性,对于需要高可用性、数据可靠性和数据读写分离的应用场景特别适用。
2. 注意事项
在搭建 MongoDB 复制集时,需要注意以下事项:
2.1 软件
-
版本:选择稳定版本的 MongoDB,并且各个节点的版本需要保持一致。
-
配置文件:在启动 MongoDB 节点时,需要指定相应的配置文件,包括端口号、数据目录、日志文件等信息。
-
安全认证:建议启用 MongoDB 的安全认证功能,以保护数据的安全性。
-
监控:建议使用监控工具对 MongoDB 进行监控和性能优化,以及及时发现和解决问题。
2.2 硬件
-
CPU:选择高性能的多核心 CPU,以提高系统的吞吐量和响应速度。
-
内存:分配足够的内存到数据库缓存和操作系统缓存中,以提高数据读写的性能。
-
存储:使用固态硬盘,并使用 RAID 技术进行数据冗余备份,以提高数据的可靠性。
-
网络:选择高速、稳定的网络设备和服务商,以确保数据同步的效率和可靠性。
在搭建 MongoDB 复制集时,需要将各个节点分配到不同的物理机器上,以提高系统的可用性和可靠性。此外,还需要进行节点间的网络配置(能同个局域网性能最佳)和通信测试,以确保数据同步的正确性和效率。同时,还需要定期进行备份和恢复测试,以确保数据的可靠性和完整性。
3. 准备工作
3.1 版本说明
系统版本:centos7.6
mongodb版本:6.0.5
客户端版本:1.8.2
搭建前最好先熟悉单机的安装,可以参考MongoDB安装与配置完全指南
注意:复制集中各节点的软件版本必须保持一致,以免出现不可预知的问题
3.2 系统要求
SELinux是一种安全增强的Linux内核模块,用于保护系统安全和完整性。但在某些情况下,它可能会影响MongoDB的正常运行,因此有时需要关闭SELinux。
3.2.1 检查SELinux状态
如果SELinux状态为enabled,则表示SELinux处于开启状态。
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
[root@localhost ~]#
3.2.2 临时关闭SELinux
如果 SELinux 处于 Permissive 模式,那么即使将其设置为 0,它也只会输出警告信息而不会阻止任何操作。所以临时关闭时不行的,只能执行3.2.3的永久关闭SELinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
3.2.3 永久关闭SELinux
修改配置文件/etc/selinux/config。使用文本编辑器打开该文件,将SELINUX的值设置为disabled:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
保存退出,然后重启系统
重启后查询状态
[root@localhost ~]# sestatus
SELinux status: disabled
3.3 创建节点
3.3.1 我的目录
client:mongodb的客户端
server:mongodb的服务端
standalone:单节点模式的配置和数据文件
[root@localhost mongodb]# ll
total 0
drwxr-xr-x. 3 1000 1000 130 Apr 27 18:06 client
drwxr-xr-x. 3 root root 100 May 11 21:35 server
drwxr-xr-x 4 root root 48 May 16 00:10 standalone
[root@localhost mongodb]#
3.3.2 配置环境变量
配置环境变量会方便我们使用mongod的命令,也可以不用配置,如果不配置就使用全路径操作
执行 vi /etc/profile,我的服务文件路径是:/usr/local/mongodb/server,所以在文件的末尾添加
export MONGODB_HOME=/usr/local/mongodb/server
PATH=$PATH:$MONGODB_HOME/bin
添加完成后执行source /etc/profile是配置立马生效,配置完成后,就可以使用mongod替代/usr/local/mongodb/server/bin/mongod
3.3.3 创建节点的目录
在mongodb的目录下创建复制集的节点1目录
[root@localhost mongodb]# mkdir -p rs/rs_1/{data,logs}
[root@localhost mongodb]# ll
total 0
drwxr-xr-x. 3 1000 1000 130 Apr 27 18:06 client
drwxr-xr-x 3 root root 18 May 16 00:21 rs
drwxr-xr-x. 3 root root 100 May 11 21:35 server
drwxr-xr-x 4 root root 48 May 16 00:10 standalone
3.3.4 创建配置文件
在rs/rs_1目录下创建文件 mongo.conf
[root@localhost rs_1]# vi mongo.conf
文件输入内容
systemLog:
destination: file
path: /usr/local/mongodb/rs/rs_1/logs/mongod.log # 日志路径,这里设置相对于当前文件的路径,也可以使用绝对路径
logAppend: true
storage:
dbPath: /usr/local/mongodb/rs/rs_1/data # 数据目录
engine: wiredTiger #存储引擎
journal: #是否启用journal日志
enabled: true
net:
bindIp: 0.0.0.0
port: 28001 # port
replication:
replSetName: test #副本集的名称
processManagement:
fork: true
security:
authorization: disabled #是否开启安全校验,默认不开启,可填disabled(不开启)/enabled (开启)
保存后退出,现在节点1已经配置完成了
3.3.5 创建其他节点
执行cp -r rs_1/ rs_2复制rs/rs_1整个目录为 rs_2,修改配置文件mongo.conf的端口为28002,同时修改数据目录和日志目录,完整的配置文件内容
systemLog:
destination: file
path: /usr/local/mongodb/rs/rs_2/logs/mongod.log # 日志路径,这里设置相对于当前文件的路径,也可以使用绝对路径
logAppend: true
storage:
dbPath: /usr/local/mongodb/rs/rs_2/data # 数据目录
engine: wiredTiger #存储引擎
journal: #是否启用journal日志
enabled: true
net:
bindIp: 0.0.0.0
port: 28002 # port
replication:
replSetName: test #副本集的名称
processManagement:
fork: true
security:
authorization: disabled #是否开启安

本文详细介绍了MongoDB复制集的构建过程,包括初始化、节点配置、数据同步和高可用性实践。重点讨论了复制集的主节点、从节点、仲裁节点的角色,以及如何处理故障转移、添加和移除节点。同时,还提到了复制集的安全配置,如认证和数据传输加密,确保数据安全。
最低0.47元/天 解锁文章
344

被折叠的 条评论
为什么被折叠?



