MongoDB 是用于开发现代应用程序的通用型、基于文档的分布式数据库服务器系统。它使用类似 JSON 的文档储存数据;与传统关系数据库中使用的行和列不同,数据对象作为单独的文档存储在集合中。由于其水平扩展和负载平衡功能,MongoDB 为开发人员提供了最高级别的灵活性和可扩展性,可为开发人员提供便捷的查询和索引。MongoDB Atlas 是一项云数据库服务,是开发现代应用程序的先行者,可以跨 Azure、AWS 或 Google Cloud 部署完全托管的云数据库。
MongoDB 提供可免费下载和使用的社区版和为 MongoDB 企业高级服务的企业版两种。企业版包括对 MongoDB 部署的全面支持,并提供更多企业为中心的功能,例如支持 LDAP 和 Kerberos 、磁盘加密和预置监控等。
MongoDB数据库的特点和优势
- 提供高可扩展性和灵活性;自动故障转移和数据冗余方式;
- 提供易于学习和使用的查询语言;
- 用于实时分析的特殊查询;
- MongoDB 的 Value支持数组和嵌套对象,并允许灵活和动态的处理模式;
- 便捷组合查询,允许排序和过滤,支持数据嵌套、数据聚合、地理位置、时间序列、图形搜索等;
- 支持分片部署,可以将大型数据集拆分成多个分布式集合,从而简化查询;
- 支持多种存储引擎。
在 Ubuntu 20.04/18.04 上安装 MongoDB 5.0
接下来,本文将介绍如何在 Ubuntu 20.04 和 Ubuntu 18.04 中安装 MongoDB 5.0。
第 1 步:导入 MongoDB GPG 密钥
我们首先需要导入 MongDB 公共 GPG 密钥,如下所示:
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
OK
如果收到 gnup 丢失的错误提示,可以通过运行以下命令来安装它,然后重试添加密钥。
sudo apt update
sudo apt-get install gnupg
第 2 步:在 Ubuntu 20.04/18.04 上添加 MongoDB 存储库
为了能够使用 apt 安装 MongoDB,我们需要添加 MongoDB 存储库。
Ubuntu 20.04:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
Ubuntu 18.04:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
第 3 步:在 Ubuntu 20.04/18.04 上安装 MongoDB 5.0
我们已经添加了 MongoDB GPG 和存储库,我们可以继续安装 MongoDB 安装步骤。先更新软件包:
sudo apt-get update
sudo apt-get install -y mongodb-org
如果想要安装特定版本的 MongoDB,可以带上如下所示的版本号信息。
sudo apt-get install -y mongodb-org=5.0.2 mongodb-org-database=5.0.2 mongodb-org-server=5.0.2 mongodb-org-shell=5.0.2 mongodb-org-mongos=5.0.2 mongodb-org-tools=5.0.2
第 4 步:在 Ubuntu 20.04/18.04 上启动 MongoDB 5.0
安装过程完成后,继续启动并启用 MongoDB:
sudo systemctl start mongod
确认 MongoDB 的运行状态:
$ systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor prese>
Active: active (running) since Tue 2021-08-24 15:42:58 UTC; 11s ago
Docs: https://docs.mongodb.org/manual
Main PID: 14497 (mongod)
Memory: 61.6M
CGroup: /system.slice/mongod.service
└─14497 /usr/bin/mongod --config /etc/mongod.conf
Aug 24 15:42:58 lorna-ubuntu20 systemd[1]: Started MongoDB Database Server.
确认MongoDB版本:
$ mongod --version
db version v5.0.2
Build Info: {
"version": "5.0.2",
"gitVersion": "6d9ec525e78465dcecadcff99cce953d380fedc8",
"openSSLVersion": "OpenSSL 1.1.1f 31 Mar 2020",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "ubuntu2004",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
然后,启用 MongoDB 以在系统重新启动时自动启动。
$ sudo systemctl enable mongod
Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /lib/systemd/system/mongod.service.
步骤 5:在 Ubuntu 上配置 MongoDB 5.0
MongoDB 的配置文件位于/etc/mongod.conf 路径中。在这里,可以找到 db 路径、日志路径的配置信息。可以根据自身的需要更改此文件。每次对文件进行更改后,都需要重新启动 mongod 服务。
Mongodb 开启密码认证
我们需要开启 mongodb 密码认证,以便可以使用密码登录来读取或编辑数据库。取消注释符号#,并添加如下内容
security:
authorization: enabled
之后重启mongod服务:
sudo systemctl restart mongod
MongoDB 启用远程访问
默认情况下,MongoDB 只能在本地访问。如果想要远程访问数据库,需要对配置文件进行一些更改,以包含 MongoDB 服务器 IP 地址或主机名,如下所示:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-server-ip/hostname
保存更改并重新启动 mongod 服务。如果启用了防火墙,还需要在防火墙上允许受信任的远程 IP 地址:
sudo ufw allow from trusted-server-ip to any port 27017
第 6 步:在 MongDB 中创建用户和数据库
要访问 MongoDB shell,请在终端上运行命令mongosh,如图所示
$ mongosh
Using MongoDB: 5.0.2
Using Mongosh: 1.0.5
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
..........
>
列出现有数据库:
> show dbs
admin 135 kB
config 111 kB
local 73.7 kB
如何在 MongoDB 中创建用户和添加角色
让我们看看如何在 MongoDB 中创建用户,并为他们分配管理员角色和所有数据库的权限:
> db.createUser({
user: "lorna",
pwd: "MyStrongPsswd",
roles: [{role: "userAdminAnyDatabase" , db: "admin"}]
});
{ ok: 1 }
允许用户拥有特定数据库的权限:
db.createUser({
user: "tiff",
pwd: "MyStrongPsswd",
roles: [{role: "userAdmin" , db: "employees"}]
});
要在 MongoDB 中创建新数据库,我们使用 use命令。例如,创建一个名为“ test ”的新数据库:
> use employees
switched to db employees
需要向数据库添加一些信息,以便在列出数据库时将其列出。
db.Employees.insertOne({name: "hale" , age: 20 , department: "IT"})
{
acknowledged: true,
insertedId: ObjectId("61252c7492f10ccae358d787")
}
MongoDB insertOne和insertMany
请注意Collection.insert()已弃用,应该使用insertOne、insertMany或bulkWrite。
现在查询数据库信息时,创建的新数据库也应该被列出:
> show dbs
admin 0.000GB
config 0.000GB
employees 0.000GB
local 0.000GB
第 7 步:MongoDB 调优
安装 MongoDB 后,确保其处于最佳配置非常重要。随着信息的增加, MongoDB 应该能够按预期处理,可以水平扩展或垂直扩展。水平扩展意味着添加 RAM 和 CPU 等服务器资源,而垂直扩展是在我们的安装中引入更多服务器。
垂直扩展对 mongodb 的整体性能非常重要,它受某些因素的影响,包括:内存使用、并发连接数和 WiredTiger 缓存等。内存是高度影响 MongoDB 性能的重要因素之一。MongoDB 使用 WiredTiger 作为其默认存储引擎,因此它为 WiredTiger 保留了 50%(可用内存 -1)。
例如,一个有 8GB RAM 的服务器,将为 WiredTiger 提供 0.5*(8-1)的内存保护。要检查缓存使用统计信息并决定是否需要进行更改,请运行以下命令:
> db.serverStatus().wiredTiger.cache
{
'application threads page read from disk to cache count': 6,
'application threads page read from disk to cache time (usecs)': 46,
'application threads page write from cache to disk count': 184,
'application threads page write from cache to disk time (usecs)': 10501,
'bytes allocated for updates': 65768,
'bytes belonging to page images in the cache': 30285,
'bytes belonging to the history store table in the cache': 571,
'bytes currently in the cache': 104652,
'bytes dirty in the cache cumulative': 2813442,
'bytes not belonging to page images in the cache': 74366,
'bytes read into cache': 28042,
'bytes written from cache': 1283385,
'cache overflow score': 0,
'checkpoint blocked page eviction': 0,
'checkpoint of history store file blocked non-history store page eviction': 0,
'eviction calls to get a page': 2,
'eviction calls to get a page found queue empty': 2,
'eviction calls to get a page found queue empty after locking': 0,
'eviction currently operating in aggressive mode': 0,
'eviction empty score': 0,
'eviction passes of a file': 0,
'eviction server candidate queue empty when topping up': 0,
'eviction server candidate queue not empty when topping up': 0,
'eviction server evicting pages': 0,
'eviction server slept, because we did not make progress with eviction': 0,
'eviction server unable to reach eviction goal': 0,
'eviction server waiting for a leaf page': 0,
'eviction state': 64,
'eviction walk target pages histogram - 0-9': 0,
'eviction walk target pages histogram - 10-31': 0,
'eviction walk target pages histogram - 128 and higher': 0,
'eviction walk target pages histogram - 32-63': 0,
'eviction walk target pages histogram - 64-128': 0,
'eviction walk target pages reduced due to history store cache pressure': 0,
'eviction walk target strategy both clean and dirty pages': 0,
'eviction walk target strategy only clean pages': 0,
'eviction walk target strategy only dirty pages': 0,
'eviction walks abandoned': 0,
..............
从上述输出中,比较重要的信息是:
- wiredTiger.cache.maximum 字节配置
- wiredTiger.cache.bytes 当前缓存中的字节
- wiredTiger.cache.tracked 缓存中的脏数据
- wiredTiger.cache.pages 读入缓存的
- wiredTiger.cache.pages 从缓存写入的
根据上述数值的大小,我们来决定是否需要增加服务器中 WiredTiger 的大小。另一个重要的事情是 ,WiredTiger 并发读写的使用情况,可以如下检查:
> db.serverStatus().wiredTiger.concurrentTransactions
{
write: { out: 0, available: 128, totalTickets: 128 },
read: { out: 1, available: 127, totalTickets: 128 }
}
如果可用内核数在增加,意味着服务器 CPU可能接近饱和。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-install-mongodb-5-0-on-ubuntu/