在 Ubuntu 20.04 / 18.04 系统安装 MongoDB 5.0

在 Ubuntu 20.04 / 18.04 系统安装 MongoDB 5.0
在 Ubuntu 20.04 / 18.04 系统安装 MongoDB 5.0

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 insertOneinsertMany

请注意Collection.insert()已弃用,应该使用insertOneinsertManybulkWrite

现在查询数据库信息时,创建的新数据库也应该被列出:

> 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/lamp-config/how-to-install-mongodb-5-0-on-ubuntu/

发表评论

登录后才能评论