在当今数据驱动的时代,确保业务连续性和数据的高可用性是系统架构设计的核心,MongoDB作为一款流行的NoSQL数据库,其副本集集群功能为实现这一目标提供了强大而可靠的解决方案,本文将详细介绍如何在稳定且广泛应用的CentOS 7操作系统上,一步步搭建一个具备高可用特性的MongoDB副本集集群。
环境准备
在开始部署之前,我们需要准备一个基础环境,一个标准的MongoDB副本集至少需要三个节点(可以是物理服务器或虚拟机),以确保在发生故障时能够进行自动选举和故障转移。
- 服务器节点:三台已安装CentOS 7的干净服务器。
- 网络配置:确保三台服务器之间网络互通,建议使用静态IP地址。
mongo1
: 192.168.1.101mongo2
: 192.168.1.102mongo3
: 192.168.1.103
- 用户权限:具备
sudo
或root
权限的用户。 - 防火墙与SELinux:为简化配置,可以先关闭防火墙和SELinux,生产环境则建议配置相应的端口访问策略。
安装与配置MongoDB
我们将通过MongoDB官方提供的Yum仓库来安装,这是最推荐的方式。
配置MongoDB Yum仓库
在三台服务器上,使用以下命令创建仓库配置文件 /etc/yum.repos.d/mongodb-org-5.0.repo
:
[mongodb-org-5.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
安装MongoDB
执行Yum安装命令,安装MongoDB社区版及其相关工具:
sudo yum install -y mongodb-org
配置每个节点
这是搭建集群的关键一步,我们需要编辑每台服务器上的MongoDB配置文件 /etc/mongod.conf
,核心在于启用复制功能并指定副本集名称。
# 存储数据目录 storage: dbPath: /var/lib/mongo journal: enabled: true # 日志文件路径 systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # 网络端口和绑定IP net: port: 27017 bindIp: 0.0.0.0 # 生产环境建议使用私有IP # 复制集配置,这是集群的核心 replication: replSetName: "rs0"
注意:replSetName
在所有节点上必须保持一致,这里我们命名为 rs0
。bindIp
设置为 0.0.0
允许任何IP访问,便于节点间通信,但在生产环境中应严格限制为集群内服务器的IP地址。
启动并启用MongoDB服务
在三台服务器上分别执行以下命令,启动MongoDB服务并设置其为开机自启:
sudo systemctl start mongod sudo systemctl enable mongod
初始化副本集
当所有节点的MongoDB服务都启动后,我们需要选择一个节点(通常是第一个节点 mongo1
)来初始化副本集。
在 mongo1
服务器上,连接到MongoDB shell:
mongosh
在shell中,执行 rs.initiate()
命令,并传入配置对象,定义副本集的成员:
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "192.168.1.101:27017" }, { _id: 1, host: "192.168.1.102:27017" }, { _id: 2, host: "192.168.1.103:27017" } ] })
执行后,MongoDB会根据配置进行初始化,稍等片刻,您会看到命令行提示符从 >
变为 rs0 [direct: primary] test>
,表示当前节点已成功选举为主节点(PRIMARY)。
验证集群状态
为了确认集群是否正常工作,可以在任意节点的MongoDB shell中执行 rs.status()
命令,返回的JSON信息中,members
数组会列出所有节点的状态,请关注 healthStr
字段,值应为 1
(表示健康),以及 stateStr
字段,会显示一个 PRIMARY
和两个 SECONDARY
。
了副本集中成员的主要角色:
角色 | 英文标识 | 描述 |
---|---|---|
主节点 | PRIMARY | 处理所有客户端的写操作,并将数据变更同步到所有从节点,一个副本集中在任何时间点只有一个主节点。 |
从节点 | SECONDARY | 复制主节点的操作日志以保持数据同步,可以处理读请求(取决于客户端配置),在主节点故障时参与选举。 |
仲裁者 | Arbiter | 不存储数据,仅参与主节点选举,用于在成员数量为偶数时打破僵局,不推荐在高可用场景中使用。 |
至此,一个功能完备的MongoDB三节点副本集集群已在CentOS 7上成功搭建,它具备了数据冗余和自动故障转移能力,为上层应用提供了坚实的数据保障。
相关问答FAQs
Q1: 如果作为主节点的服务器宕机了,会发生什么?
A1: 副本集会自动进行故障转移,剩下的从节点会检测到主节点不可用,并发起一次选举,在选举过程中,集群暂时无法处理写请求,选举完成后,其中一个从节点会被提升为新的主节点,并开始接受写操作,整个故障转移过程通常是自动且快速的,对应用的影响极小。
Q2: 如何向一个已经存在的副本集中添加一个新的节点?
A2: 在新服务器上按照本文的步骤安装并配置好MongoDB,确保其 mongod.conf
中的 replSetName
与现有集群一致,然后启动该节点的MongoDB服务,连接到当前主节点的MongoDB shell,执行 rs.add("<新节点的IP:端口>")
命令。rs.add("192.168.1.104:27017")
,MongoDB会自动将新节点加入集群,并开始进行数据同步。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复