一、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.repo2、安装
sudo yum install -y mongodb-org3、启动服务:
# 启动 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.conf5、选项:修改默认存放位置
默认位置
使用 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。使用vim或nano等编辑器打开它
sudo vim /etc/mongod.conf修改配置项
在配置文件中找到并修改storage.dbPath和systemLog.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"特别注意:
三台机器的
replSetName必须完全相同(都是rs0)。bindIp要确保其他机器能访问。生产环境建议填写具体的内网 IP,而不是0.0.0.0。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 副本集内部节点之间进行身份验证的共享密钥文件。它的作用是
节点间认证:集群中的每个节点在与其他节点通信时,都需要使用这个 KeyFile 来证明自己的身份。
安全通信基础:它是开启副本集内部安全通信的前提。
集群一致性:所有节点必须使用内容完全相同的 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.confsecurity: authorization: enabled # 如果你暂时不想开启密码认证,可以先写 disabled keyFile: /etc/mongodb-keyfilekeyFile路径必须与第一步中存放的位置一致。如果你现在不想启用密码认证(
authorization),可以先设置为disabled,但keyFile必须配置。这样节点间会使用 KeyFile 认证,但客户端连接无需密码。
第三步:重启各个节点(按顺序)
为了不影响服务可用性,建议按以下顺序重启(这很重要):
先重启所有从节点(Secondary):
# 在每台从节点上 systemctl restart mongod最后重启主节点(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博客