mongodb8的安装及主副本集群
2026/9/2 8:49:34 网站建设 项目流程

一、mongodb安装

1.推荐方法:使用 YUM 源(兼容性最好)
echo "[mongodb-org-8.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/8.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://pgp.mongodb.com/server-8.0.asc" > /etc/yum.repos.d/mongodb-org-8.0.repo
2、安装
sudo yum install -y mongodb-org
3、启动服务:
# 启动 MongoDB 服务 sudo systemctl start mongod # 设置开机自动启动 sudo systemctl enable mongod # 检查服务运行状态 sudo systemctl status mongod # 重启服务 sudo systemctl restart mongod

检测版本

mongod --version服务端版本db version v8.0.26
mongosh --version客户端 Shell版本2.8.3
mongosh进入后执行db.version()当前连接到的数据库版本8.0.26

快速检测是否可用

mongosh --eval "db.runCommand({ping: 1})"

检测错误:

systemctl status显示的信息不完整,最关键的报错原因在 MongoDB 的日志文件里。请执行以下命令,把最后几十行日志发给我:

sudo tail -50 /var/log/mongodb/mongod.log

尝试直接启动以获取更详细报错

sudo mongod --config /etc/mongod.conf
5、选项:修改默认存放位置

默认位置

使用 YUM 安装时,MongoDB 会默认创建以下目录

目录类型默认路径
数据目录/var/lib/mongo
日志目录/var/log/mongodb

修改目录位置

sudo mkdir -p /data/mongo sudo mkdir -p /data/log/mongodb/mongod.log

/data/log/mongodb/mongod.log 这个是文件

修改目录所有者

MongoDB 服务默认以mongod用户运行,必须让这个用户拥有新目录的读写权限

sudo chown -R mongod:mongod /data/mongo sudo chown -R mongod:mongod /data/log/mongodb

编辑配置文件

MongoDB 的主配置文件位于/etc/mongod.conf。使用vimnano等编辑器打开它

sudo vim /etc/mongod.conf

修改配置项

在配置文件中找到并修改storage.dbPathsystemLog.path这两项-1-3-7。修改后的内容示例如下

systemLog: destination: file logAppend: true path: /data/log/mongodb/mongod.log # 修改为你的新日志路径 storage: dbPath: /data/mongo # 修改为你的新数据路径 journal: enabled: true

重启服务生效

sudo systemctl restart mongod

二、创建副本集群

第一步:修改配置文件(三台机器都要做)

在每台机器上编辑/etc/mongod.conf,确保以下配置正确

# 网络配置 net: port: 27017 bindIp: 192.168.1.10 # 或改为具体的内网IP,如 192.168.1.10 # 副本集配置(关键!三台机器必须完全一致) replication: replSetName: "rs0"

特别注意

  1. 三台机器的replSetName必须完全相同(都是rs0)。

  2. bindIp要确保其他机器能访问。生产环境建议填写具体的内网 IP,而不是0.0.0.0

  3. YAML 格式对缩进敏感,确保每层缩进是两个空格

第二步:重启 MongoDB 服务(每台机器)

修改完配置文件后,在每台机器上执行

sudo systemctl restart mongod sudo systemctl status mongod # 确认状态是 active (running)
第三步:初始化副本集(只在一台机器上执行)

选择任意一台机器(通常是网络最好的那台),连接到 MongoDB

mongosh --host 192.168.1.10 --port 27017

然后执行初始化命令(注意替换成你的三个节点的实际 IP):

rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "192.168.1.10:27017", priority: 2 }, // 优先级更高,更可能成为 Primary { _id: 1, host: "192.168.1.11:27017", priority: 1 }, { _id: 2, host: "192.168.1.12:27017", priority: 1 } ] })
// 优先级更高,更可能成为 Primary
第四步:验证集群状态

在同一个mongosh会话中执行

rs.status()

查看输出中的members数组,应该能看到:

  • 一个节点stateStr: "PRIMARY"(主节点)

  • 两个节点stateStr: "SECONDARY"(从节点)

第五步:测试数据同步

在主节点上写入一条测试数据:

use testDB db.testCollection.insertOne({ test: "hello replica set" })

然后连接到任意一个从节点,执行:

rs.secondaryOk() // 允许从节点读取 use testDB db.testCollection.find()

三、mongodb设置密码

第一步:连接 MongoDB 并创建管理员用户(连接主的mongodb)

首先,像之前一样连接到 MongoDB Shell(此时还不需要密码)

mongosh --host 192.168.1.10 --port 27017

在 Shell 中,切换到admin数据库,然后创建一个拥有root角色的超级管理员用户

// 切换到 admin 数据库 use admin // 创建管理员用户(请将 'yourSecurePassword' 替换为你自己的强密码) db.createUser({ user: "admin", pwd: "yourSecurePassword", // 这里设置你的密码 roles: [ { role: "root", db: "admin" } ] })
第二步:修改配置文件,开启认证
配置项作用范围是否必须一致说明
管理员账户密码客户端连接验证不必一致这是你的应用或运维人员连接时使用的密码。你只需要在任意一台机器的admin数据库中创建一个高权限用户,这个用户信息会通过副本集的数据同步自动复制到其他节点。因此,你只需设置一次,三台机器会共享同一个用户认证体系。
KeyFile(内部认证密钥)副本集节点间通信必须完全一致这是集群内部节点互相验证身份的“暗号”。所有三台机器的 KeyFile 内容必须一模一样,否则节点之间无法建立信任关系,副本集会直接挂掉。

创建好用户后,需要修改 MongoDB 的配置文件/etc/mongod.conf,让它要求客户端提供身份验证

KeyFile 是 MongoDB 副本集内部节点之间进行身份验证的共享密钥文件。它的作用是

  1. 节点间认证:集群中的每个节点在与其他节点通信时,都需要使用这个 KeyFile 来证明自己的身份。

  2. 安全通信基础:它是开启副本集内部安全通信的前提。

  3. 集群一致性所有节点必须使用内容完全相同的 KeyFile,否则它们无法加入同一个副本集。

如何配置 KeyFile

第一步:在每台机器上创建相同的 KeyFile

其中一台机器上生成 KeyFile:

# 生成一个包含随机内容的 KeyFile openssl rand -base64 756 > /etc/mongodb-keyfile # 设置严格权限,只有 mongod 用户可读 chmod 400 /etc/mongodb-keyfile chown mongod:mongod /etc/mongodb-keyfile

将该文件复制到其他两台机器的相同路径(例如/etc/mongodb-keyfile),并确保权限和所有者都一致:

# 在其他机器上执行 chmod 400 /etc/mongodb-keyfile chown mongod:mongod /etc/mongodb-keyfile
第二步:修改所有节点的配置文件

每台机器/etc/mongod.conf中,添加或修改security部分:

sudo vim /etc/mongod.conf
security: authorization: enabled # 如果你暂时不想开启密码认证,可以先写 disabled keyFile: /etc/mongodb-keyfile
  • keyFile路径必须与第一步中存放的位置一致。

  • 如果你现在不想启用密码认证(authorization),可以先设置为disabled,但keyFile必须配置。这样节点间会使用 KeyFile 认证,但客户端连接无需密码。

第三步:重启各个节点(按顺序)

为了不影响服务可用性,建议按以下顺序重启(这很重要):

先重启所有从节点(Secondary)

# 在每台从节点上 systemctl restart mongod
  1. 最后重启主节点(Primary):主节点重启后,集群会自动重新选举。

验证 KeyFile 是否生效

重启完成后,连接到任意节点,执行

mongosh --host 192.168.1.10 --port 27017 -u admin -p 123456 --authenticationDatabase admin rs.status()

security 这个验证和用户名登录是一会事吗

security.authorization配置服务器的全局安全策略。设置为enabled时,服务器会要求所有连接都必须通过认证;设置为disabled时,服务器不要求认证,任何连接都可以访问(但可能受其他限制)。大楼的门禁总闸。打开时,所有人必须刷卡才能进入;关闭时,大门敞开,任何人都能自由进出。
用户名/密码认证客户端证明身份的具体方式之一。当门禁开启后,你需要通过“刷卡”(提供用户名和密码)来验证身份。门禁卡。你必须有正确的卡才能通过门禁。

四、mongodb的日志分割点击下面链接

mongodb的日志分割-CSDN博客

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询