MongoDB是一个开源、跨平台的分布式NoSQL(非关系型)数据库系统。与传统的SQL数据库将数据存储在表中不同,MongoDB使用灵活的文档来存储各种数据形式。MongoDB使用二进制JSON格式(BSON)来存储数据。

MongoDB是一个具有内置高可用性、自动故障转移和数据冗余功能的分布式NoSQL数据库,支持通过分片在分布式集群中进行水平扩展。它支持多区域地理部署,并提供支持CRUD操作(读写)、数据聚合管道、文本搜索和地理空间查询的查询API。

在本教程中,我们将介绍如何在Ubuntu 24.04服务器上安装MongoDB。你将准备Ubuntu服务器、添加MongoDB仓库、安装MongoDB服务器、创建MongoDB管理员用户,然后启用MongoDB身份验证。最后,你将学习如何使用mongosh shell在MongoDB中创建用户和数据库。

前提条件

在开始之前,请确保你具备以下条件:

- 一台Ubuntu 24.04服务器
- 一个具有管理员权限的非root用户

系统准备

在Ubuntu系统上安装MongoDB之前,请确保已配置好系统。在本教程中,你将对Ubuntu服务器进行以下配置:

- 通过systemd禁用透明大页(THP)
- 提高MongoDB默认mongod用户的资源限制
- 通过/etc/sysctl.conf文件设置fs.file-max和swappiness

禁用透明大页(THP)

要在系统上禁用THP,你需要创建一个新的systemd服务文件,该文件将在每次启动时自动执行。

使用nano编辑器创建新的服务文件/etc/systemd/system/disable-thp.service。

sudo nano /etc/systemd/system/disable-thp.service

插入以下配置以通过服务禁用THP。

[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

保存文件并退出编辑器。

现在运行以下systemctl命令重新加载systemd管理器,启动并启用disable-thp服务。这样,THP将在系统启动时被禁用。

sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service

设置Ulimits

禁用THP后,你需要将mongod用户的最大文件数和进程数增加到至少64000。

使用以下nano编辑器命令创建新文件/etc/security/limits.d/mongodb.conf。

sudo nano /etc/security/limits.d/mongodb.conf

插入以下配置,将最大打开文件数和进程数增加到64000。

mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000

保存文件并退出编辑器。

设置swappiness和fs.file-max

最后,你需要增加默认的fs.file-max值并为MongoDB启用swappiness。为此,你需要编辑/etc/sysctl.conf文件。

使用nano编辑器命令打开/etc/sysctl.conf文件。

sudo nano /etc/sysctl.conf

插入以下配置以设置fs.file-max和swappiness。

fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1

完成后,保存文件并退出编辑器。

现在运行以下sysctl命令,在不重启的情况下应用更改。

sudo sysctl -p

配置系统参数

使用APT包管理器安装MongoDB

现在你已经配置好了Ubuntu系统,可以开始安装MongoDB了。在本节中,你将从官方MongoDB仓库安装最新版本的MongoDB 8.0。

首先运行以下apt命令更新Ubuntu软件包索引并安装gnupg和curl包。输入Y确认安装。

sudo apt update && sudo apt install gnupg curl

安装curl和gnupg

现在运行以下命令添加MongoDB的GPG密钥和仓库。在本例中,你将在Ubuntu 24.04服务器上安装MongoDB 8。

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

添加MongoDB仓库

接下来运行以下apt命令更新软件包索引并将mongodb-org包安装到你的系统中。输入Y继续安装。

sudo apt update && sudo apt install mongodb-org

安装MongoDB

安装完成后,执行以下systemctl命令重新加载systemd管理器。mongod服务已添加到你的Ubuntu系统中。

sudo systemctl daemon-reload

最后运行以下命令启动、启用并验证MongoDB的mongod服务。你将看到MongoDB正在你的系统上运行。

sudo systemctl enable --now mongod
sudo systemctl status mongod

检查MongoDB服务状态

保护MongoDB服务器

安装MongoDB后,你将通过以下方式保护MongoDB服务器安装:

- 使用mongosh shell创建新的MongoDB管理员用户
- 通过编辑配置文件/etc/mongod.conf启用MongoDB身份验证

创建MongoDB管理员用户

在本节中,你将通过mongosh shell创建一个新的MongoDB管理员用户。mongosh shell是一个用于与MongoDB服务器交互的客户端命令行工具,类似于MySQL/MariaDB的mysql和PostgreSQL的psql。

要创建管理员用户,使用以下mongosh shell命令登录MongoDB服务器。

mongosh

现在运行以下查询以禁用MongoDB遥测。

disableTelemetry()

登录MongoDB

接下来切换到admin数据库,运行以下查询为MongoDB创建新的管理员用户。在本例中,你将创建一个名为myAdmin的新用户,然后在提示时输入你的新密码。

use admin

db.createUser(
{
user: "myAdmin",
pwd: passwordPrompt(),
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)

现在输入quit()退出MongoDB shell。

创建管理员用户

启用MongoDB身份验证

现在你已经创建了MongoDB管理员用户,可以通过/etc/mongod.conf文件启用MongoDB身份验证了。

使用以下nano编辑器命令打开MongoDB服务器默认配置文件/etc/mongod.conf。

sudo nano /etc/mongod.conf

添加以下行以启用MongoDB身份验证。

security:
  authorization: enabled

完成后,保存文件并退出编辑器。

现在运行以下systemctl命令重启MongoDB服务器以应用更改。这样MongoDB身份验证将被启用。

sudo systemctl restart mongod

测试MongoDB身份验证

现在你已经保护了MongoDB服务器安装,让我们通过使用mongosh shell和新管理员用户及密码登录MongoDB来验证你的配置。

使用以下mongosh命令以myAdmin用户身份登录MongoDB服务器。在提示时输入你的密码。

mongosh --port 27017 --authenticationDatabase \
"admin" -u "myAdmin" -p

以管理员身份登录MongoDB

登录后,运行以下查询检查你的连接状态。你应该已经以myAdmin用户身份登录到MongoDB服务器。

db.runCommand({connectionStatus : 1})

现在输入quit()退出MongoDB服务器。

检查连接状态

在MongoDB中创建数据库和用户

在本节中,你将学习如何使用mongosh shell在MongoDB中创建新的数据库和用户。请确保你已以管理员用户身份登录MongoDB。

首先运行以下查询切换到mydb数据库。

use mydb

现在运行以下查询创建一个名为myUser的新用户,并授予对mydb数据库的读写权限。在提示时输入你的密码。

db.createUser(
{
user: "myUser",
pwd: passwordPrompt(), // 或明文密码
roles: [ { role: "readWrite", db: "mydb" },
{ role: "read", db: "reporting" } ]
}
)

输入quit()退出MongoDB服务器。

创建数据库和用户

现在运行以下mongosh命令以myUser用户身份登录mydb数据库。在提示时输入你的密码。

mongosh --port 27017 --authenticationDatabase \
"mydb" -u "myUser" -p

以新用户身份登录

登录后,使用以下查询检查你的连接状态。

db.runCommand({connectionStatus : 1})

你可以在下面看到你已以myUser用户身份连接到MongoDB服务器,并拥有对mydb数据库的权限。

检查用户连接状态

总结

恭喜!你已经完成了在Ubuntu 24.04服务器上安装MongoDB服务器的工作。你还创建了一个管理员用户并保护了MongoDB安装。然后,你学习了如何使用mongosh连接到MongoDB服务器以及在MongoDB中管理用户和数据库的基本查询。