MongoDB是一个面向文档的开源NoSQL数据库管理系统。在本文中,您将学习如何在CentOS 8服务器上安装MongoDB。python
MongoDB是一个开源,跨平台,面向文档的数据库管理系统。MongoDB是NoSQL(不只是SQL)数据库软件。MongoDB使用带有模式的文档之类的JSON(JavaScript对象表示法)。MongoDB由MongoDB Inc开发,并根据SSPL(服务器端公共许可证)进行分发。linux
虽然,咱们在CentOS 8上安装了MongoDB 4.2,可是相同的过程将适用于CentOS 7,RHEL 7,RHEL 8和相似的发行版。web
咱们能够从MongoDB下载页面下载所需的安装包。sql
这里是能够直接下载,咱们须要的rpm包 https://repo.mongodb.org/yum/redhat/8/mongodb-org/4.4/x86_64/RPMS/mongodb-org-server-4.4.2-1.el8.x86_64.rpmmongodb
在这里,您能够选择所需的MongoDB版本以及目标操做系统,该网站将为您提供指向相应安装软件包的下载连接。而后,您能够使用dnf命令下载该RPM软件包并将其安装在CentOS 8服务器上。shell
可是,有更好的方法在CentOS 8服务器上安装MongoDB,即在CentOS 8中安装MongoDB官方yum存储库,而后使用dnf命令安装MongoDB ,而且在本安装指南中使用相同的方法。数据库
经过使用[ssh客户端,]以root用户身份与mongodb-01.centlinux.com链接。vim
在/etc/yum.repo.d目录中建立一个回购文件,以在CentOS 8服务器中安装MongoDB yum存储库。centos
[root@mongodb ~]# hostnamectl set-hostname mongodb.lianglab.cn [root@mongodb ~]# vi /etc/yum.repos.d/mongodb-org-4.4.repo
并在此文件中添加如下配置。api
[mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
为MongoDB yum存储库构建缓存。
[root@mongodb ~]# dnf clean all 39 files removed [root@mongodb ~]# dnf makecache CentOS-8 - Base - mirrors.tongdun.cn 45 MB/s | 2.2 MB 00:00 CentOS-8 - Extras - mirrors.tongdun.cn 482 kB/s | 8.6 kB 00:00 CentOS-8 - AppStream - mirrors.tongdun.cn 56 MB/s | 5.8 MB 00:00 Extra Packages for Enterprise Linux 8 - x86_64 66 MB/s | 8.4 MB 00:00 Extra Packages for Enterprise Linux 8 - x86_64 - Debug 54 MB/s | 3.6 MB 00:00 Extra Packages for Enterprise Linux 8 - x86_64 - Source 43 MB/s | 1.8 MB 00:00 MongoDB Repository 9.5 kB/s | 12 kB 00:01 Metadata cache created. [root@mongodb ~]# dnf repolist repo id repo name AppStream CentOS-8 - AppStream - mirrors.tongdun.cn base CentOS-8 - Base - mirrors.tongdun.cn epel Extra Packages for Enterprise Linux 8 - x86_64 epel-debuginfo Extra Packages for Enterprise Linux 8 - x86_64 - Debug epel-source Extra Packages for Enterprise Linux 8 - x86_64 - Source extras CentOS-8 - Extras - mirrors.tongdun.cn mongodb-org-4.4 MongoDB Repository [root@mongodb ~]#
咱们已经在CentOS 8服务器中安装了MongoDB yum存储库。
咱们须要根据MongoDB软件的要求在CentOS 8服务器中设置资源限制。
为此,请为MongoDB建立资源限制配置文件,以下所示。
[root@mongodb-01 ~]# vi /etc/security/limits.d/mongod.conf
并在其中添加如下资源限制。
mongod soft nproc 64000 mongod hard nproc 64000 mongod soft nofile 64000 mongod hard nofile 64000
咱们能够重新添加的yum存储库在CentOS 8服务器上安装MongoDB。
咱们正在使用如下dnf命令安装MongoDB服务器的最新稳定版本。
[root@mongodb ~]# dnf list -y mongodb-org Last metadata expiration check: 0:02:10 ago on Fri 18 Dec 2020 11:12:48 PM CST. Available Packages mongodb-org.x86_64 4.4.2-1.el8 mongodb-org-4.4 [root@mongodb ~]# dnf install -y mongodb-org Last metadata expiration check: 0:02:50 ago on Fri 18 Dec 2020 11:12:48 PM CST. Dependencies resolved. ======================================================================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================================================================== Installing: mongodb-org x86_64 4.4.2-1.el8 mongodb-org-4.4 10 k Installing dependencies: mongodb-database-tools x86_64 100.2.1-1 mongodb-org-4.4 55 M mongodb-org-database-tools-extra x86_64 4.4.2-1.el8 mongodb-org-4.4 20 k mongodb-org-mongos x86_64 4.4.2-1.el8 mongodb-org-4.4 22 M mongodb-org-server x86_64 4.4.2-1.el8 mongodb-org-4.4 28 M mongodb-org-shell x86_64 4.4.2-1.el8 mongodb-org-4.4 18 M mongodb-org-tools x86_64 4.4.2-1.el8 mongodb-org-4.4 10 k python2 x86_64 2.7.17-1.module_el8.2.0+381+9a5b3c3b AppStream 108 k python2-libs x86_64 2.7.17-1.module_el8.2.0+381+9a5b3c3b AppStream 6.0 M python2-pip-wheel noarch 9.0.3-16.module_el8.2.0+381+9a5b3c3b AppStream 1.2 M python2-setuptools-wheel noarch 39.0.1-11.module_el8.2.0+381+9a5b3c3b AppStream 289 k Installing weak dependencies: python2-pip noarch 9.0.3-16.module_el8.2.0+381+9a5b3c3b AppStream 1.9 M python2-setuptools noarch 39.0.1-11.module_el8.2.0+381+9a5b3c3b AppStream 643 k Enabling module streams: python27 2.7 Transaction Summary ======================================================================================================================================================================== Install 13 Packages Total download size: 133 M Installed size: 421 M Downloading Packages: (1/13): python2-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64.rpm 6.0 MB/s | 108 kB 00:00 (2/13): python2-pip-wheel-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch.rpm 26 MB/s | 1.2 MB 00:00 (3/13): python2-pip-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch.rpm 21 MB/s | 1.9 MB 00:00 (4/13): python2-setuptools-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch.rpm 15 MB/s | 643 kB 00:00 (5/13): python2-setuptools-wheel-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch.rpm 15 MB/s | 289 kB 00:00 (6/13): python2-libs-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64.rpm 37 MB/s | 6.0 MB 00:00 (7/13): mongodb-org-database-tools-extra-4.4.2-1.el8.x86_64.rpm 35 kB/s | 20 kB 00:00 (8/13): mongodb-org-4.4.2-1.el8.x86_64.rpm 11 kB/s | 10 kB 00:00 (9/13): mongodb-org-mongos-4.4.2-1.el8.x86_64.rpm 3.4 MB/s | 22 MB 00:06 (10/13): mongodb-org-server-4.4.2-1.el8.x86_64.rpm 3.6 MB/s | 28 MB 00:07 (11/13): mongodb-org-tools-4.4.2-1.el8.x86_64.rpm 35 kB/s | 10 kB 00:00 (12/13): mongodb-org-shell-4.4.2-1.el8.x86_64.rpm 3.9 MB/s | 18 MB 00:04 (13/13): mongodb-database-tools-100.2.1.x86_64.rpm 3.9 MB/s | 55 MB 00:14 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Total 9.2 MB/s | 133 MB 00:14 warning: /var/cache/dnf/mongodb-org-4.4-cef71e585db45e10/packages/mongodb-database-tools-100.2.1.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 90cfb1f5: NOKEY MongoDB Repository 885 B/s | 1.6 kB 00:01 Importing GPG key 0x90CFB1F5: Userid : "MongoDB 4.4 Release Signing Key <packaging@mongodb.com>" Fingerprint: 2069 1EEC 3521 6C63 CAF6 6CE1 6564 08E3 90CF B1F5 From : https://www.mongodb.org/static/pgp/server-4.4.asc Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : mongodb-org-shell-4.4.2-1.el8.x86_64 1/13 Installing : mongodb-org-mongos-4.4.2-1.el8.x86_64 2/13 Installing : mongodb-org-database-tools-extra-4.4.2-1.el8.x86_64 3/13 Running scriptlet: mongodb-database-tools-100.2.1-1.x86_64 4/13 Installing : mongodb-database-tools-100.2.1-1.x86_64 4/13 Running scriptlet: mongodb-database-tools-100.2.1-1.x86_64 4/13 Installing : mongodb-org-tools-4.4.2-1.el8.x86_64 5/13 Installing : python2-setuptools-wheel-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch 6/13 Installing : python2-pip-wheel-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch 7/13 Installing : python2-libs-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 8/13 Installing : python2-pip-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch 9/13 Installing : python2-setuptools-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch 10/13 Installing : python2-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 11/13 Running scriptlet: python2-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 11/13 Running scriptlet: mongodb-org-server-4.4.2-1.el8.x86_64 12/13 Installing : mongodb-org-server-4.4.2-1.el8.x86_64 12/13 Running scriptlet: mongodb-org-server-4.4.2-1.el8.x86_64 12/13 Created symlink /etc/systemd/system/multi-user.target.wants/mongod.service → /usr/lib/systemd/system/mongod.service. Installing : mongodb-org-4.4.2-1.el8.x86_64 13/13 Running scriptlet: mongodb-org-4.4.2-1.el8.x86_64 13/13 Verifying : python2-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 1/13 Verifying : python2-libs-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 2/13 Verifying : python2-pip-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch 3/13 Verifying : python2-pip-wheel-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch 4/13 Verifying : python2-setuptools-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch 5/13 Verifying : python2-setuptools-wheel-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch 6/13 Verifying : mongodb-database-tools-100.2.1-1.x86_64 7/13 Verifying : mongodb-org-4.4.2-1.el8.x86_64 8/13 Verifying : mongodb-org-database-tools-extra-4.4.2-1.el8.x86_64 9/13 Verifying : mongodb-org-mongos-4.4.2-1.el8.x86_64 10/13 Verifying : mongodb-org-server-4.4.2-1.el8.x86_64 11/13 Verifying : mongodb-org-shell-4.4.2-1.el8.x86_64 12/13 Verifying : mongodb-org-tools-4.4.2-1.el8.x86_64 13/13 Installed products updated. Installed: mongodb-database-tools-100.2.1-1.x86_64 mongodb-org-4.4.2-1.el8.x86_64 mongodb-org-database-tools-extra-4.4.2-1.el8.x86_64 mongodb-org-mongos-4.4.2-1.el8.x86_64 mongodb-org-server-4.4.2-1.el8.x86_64 mongodb-org-shell-4.4.2-1.el8.x86_64 mongodb-org-tools-4.4.2-1.el8.x86_64 python2-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 python2-libs-2.7.17-1.module_el8.2.0+381+9a5b3c3b.x86_64 python2-pip-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch python2-pip-wheel-9.0.3-16.module_el8.2.0+381+9a5b3c3b.noarch python2-setuptools-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch python2-setuptools-wheel-39.0.1-11.module_el8.2.0+381+9a5b3c3b.noarch Complete!
启用并启动MongoDB数据库服务。
[root@mongodb ~]# systemctl enable --now mongod.service [root@mongodb ~]#
成功启动后,检查MongoDB的服务状态和端口监听信息
[root@mongodb ~]# systemctl status mongod.service ● mongod.service - MongoDB Database Server Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2020-12-18 23:17:49 CST; 16s ago Docs: https://docs.mongodb.org/manual Process: 930807 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS) Process: 930804 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS) Process: 930802 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS) Process: 930800 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS) Main PID: 930809 (mongod) Memory: 57.7M CGroup: /system.slice/mongod.service └─930809 /usr/bin/mongod -f /etc/mongod.conf Dec 18 23:17:48 mongodb.lianglab.cn systemd[1]: Starting MongoDB Database Server... Dec 18 23:17:48 mongodb.lianglab.cn mongod[930807]: about to fork child process, waiting until server is ready for connections. Dec 18 23:17:48 mongodb.lianglab.cn mongod[930807]: forked process: 930809 Dec 18 23:17:49 mongodb.lianglab.cn mongod[930807]: child process started successfully, parent exiting Dec 18 23:17:49 mongodb.lianglab.cn systemd[1]: Started MongoDB Database Server [root@mongodb ~]# netstat -anplt| grep mongod tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 930809/mongod [root@mongodb ~]# ss -anplt | grep mongod LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* users:(("mongod",pid=930809,fd=12))
根据MongoDB文档,若是您已将SELinux配置为强制模式,则必须为MongoDB建立SELinux策略。
检查当前的SELinux模式。
[root@mongodb ~]# getenforce Enforcing
咱们须要checkpolicy命令来验证自定义SELinux策略,所以咱们正在使用dnf命令安装checkpolicy软件包。
[root@mongodb ~]#dnf install -y checkpolicy CentOS-8 - AppStream 4.0 kB/s | 4.3 kB 00:01 CentOS-8 - Base 3.0 kB/s | 3.8 kB 00:01 CentOS-8 - Extras 2.7 kB/s | 1.5 kB 00:00 MongoDB Repository 1.6 kB/s | 2.5 kB 00:01 Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: checkpolicy x86_64 2.9-1.el8 BaseOS 348 k Transaction Summary ================================================================================ Install 1 Package Total download size: 348 k Installed size: 1.7 M Downloading Packages: checkpolicy-2.9-1.el8.x86_64.rpm 7.5 kB/s | 348 kB 00:46 -------------------------------------------------------------------------------- Total 7.5 kB/s | 348 kB 00:46 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : checkpolicy-2.9-1.el8.x86_64 1/1 Running scriptlet: checkpolicy-2.9-1.el8.x86_64 1/1 Verifying : checkpolicy-2.9-1.el8.x86_64 1/1 Installed: checkpolicy-2.9-1.el8.x86_64 Complete!
建立一个定制的SELinux策略文件。
[root@mongodb ~]# vi mongodb_cgroup_memory.te
并在其中添加如下指令。
module mongodb_cgroup_memory 1.0; require { type cgroup_t; type mongod_t; class dir search; class file { getattr open read }; } #============= mongod_t ============== allow mongod_t cgroup_t:dir search; allow mongod_t cgroup_t:file { getattr open read };
编译并应用此SELinux策略。
[root@mongodb ~]# checkmodule -M -m -o mongodb_cgroup_memory.mod mongodb_cgroup_memory.te [root@mongodb ~]# semodule_package -o mongodb_cgroup_memory.pp -m mongodb_cgroup_memory.mod [[root@mongodb ~]# semodule -i mongodb_cgroup_memory.pp
默认状况下,MongoDB服务器中未启用访问控制,所以任何人均可以访问MongoDB服务器并执行管理操做。
所以,很是重要的是,咱们建立一个Admin用户并在MongoDB服务器中启用访问控制。
以下链接MongoDB shell。
[root@mongodb ~]# mongo MongoDB shell version v4.4.2 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("42a1e2d9-cd5c-42bf-93c1-f007b07ec356") } MongoDB server version: 4.4.2 Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see https://docs.mongodb.com/ Questions? Try the MongoDB Developer Community Forums https://community.mongodb.com --- The server generated these startup warnings when booting: 2020-12-18T23:17:49.873+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted --- --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() --- >
与管理数据库链接。
> use admin; switched to db admin >
以下建立管理员用户。
> db.createUser( ... { ... user: "admin", ... pwd: "liang123", ... roles: [ { role: "userAdminAnyDatabase",db: "admin" } ] ... } ... ) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
列出MongoDB数据库中的全部用户。
> show users { "_id" : "admin.admin", "userId" : UUID("26d81b7b-f86a-4507-aa75-015cb0e02a11"), "user" : "admin", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } >
MongoDB管理员用户已成功建立。
从MongoDB Shell退出。
> exit bye
最初,访问控制在MongoDB服务器中被禁用。所以,任何具备CentOS 8服务器操做系统级访问权限的用户均可以链接到MongoDB实例并在数据库上执行管理操做。这就是为何咱们可以在上一步中建立管理员用户而无需任何身份验证的缘由。
要为MongoDB服务器启用访问控制,咱们须要为mongod.service编辑systemd单元文件。
[root@mongodb ~]# vi /usr/lib/systemd/system/mongod.service
在此文件中找到如下行。
Environment="OPTIONS=-f /etc/mongod.conf"
并将其替换为如下行。
Environment="OPTIONS=--auth -f /etc/mongod.conf"
咱们已经使用文本编辑器显式地编辑了systemd单位文件。所以,咱们须要执行如下命令来通知systemd有关此更改。
[root@mongodb ~]# systemctl daemon-reload
从新启动MongoDB服务以应用更改。
[root@mongodb ~]# systemctl restart mongod.service
要检查访问控制,请链接MongoDB shell并执行一些管理命令。
[root@mongodb ~]# mongo MongoDB shell version v4.4.2 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("c2640def-e833-4bfc-93ae-e0e5ddea7712") } MongoDB server version: 4.4.2 > use admin switched to db admin > show users uncaught exception: Error: command usersInfo requires authentication : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.getUsers@src/mongo/shell/db.js:1639:15 shellHelper.show@src/mongo/shell/utils.js:914:9 shellHelper@src/mongo/shell/utils.js:819:15 @(shellhelp2):1:1
此次“ show user”命令引起身份验证错误,它确认在咱们的MongoDB服务器中已启用访问控制。
如今,以管理员用户身份链接。
> db.auth("admin",passwordPrompt()) Enter password: ###输入咱们前面设置的是密码 1
如今,执行相同的命令,以检查其是否正常运行。
> show users #查询用户信息 { "_id" : "admin.admin", "userId" : UUID("26d81b7b-f86a-4507-aa75-015cb0e02a11"), "user" : "admin", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } > exit bye [root@mongodb ~]#
已成功使用特权用户执行命令“显示用户”。
MongoDB数据库的访问控制已启用。
此步骤是可选的。若是您打算经过网络访问MongoDB数据库,则必须执行如下配置。
默认状况下,MongoDB服务在本地主机接口上运行。所以,要使其可以从网络访问,咱们须要在全部接口上运行MongoDB服务。
使用vim编辑器编辑MongoDB配置文件
[root@mongodb ~]# cat /etc/mongod.conf | grep bind bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.binIpAll setting. [root@mongodb ~]# vi /etc/mongod.conf [root@mongodb ~]# netstat -anptl | grep mongod tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 931395/mongod [root@mongodb ~]# systemctl restart mongod.service [root@mongodb ~]# netstat -anptl | grep mongod tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 931722/mongod [root@mongodb ~]#
在此文件中找到bindIp指令并将其设置为。
修改 bind_ip 127.0.0.1 为 bind_ip = 0.0.0.0 或者注释掉, #bind_ip 127.0.0.1, 让其监听全部外网ip。
bindIp: 0.0.0.0
从新启动MongoDB服务以应用更改。
[root@mongodb ~]# systemctl restart mongod.service
若是咱们启动了防火墙策略,还须要容许Linux防火墙中的MongoDB服务传入流量。
[root@mongodb ~]#firewall-cmd --permanent --add-service=mongodb success [root@mongodb ~]# firewall-cmd --reload success
您如今能够从网络访问MongoDB数据库服务。
如下是两个目录,对MongoDB数据库管理员来讲很是重要。
咱们能够经过在/etc/mongodb.conf文件中设置如下参数来自定义以上目录。
咱们已经在CentOS 8服务器上成功安装了MongoDB,并启用了访问控制。MongoDB的权威指南:强大的可扩展数据存储由O'Reilly Media公司是一个很好的书对MongoDB的管理,咱们极力推荐这对MongoDB的数据库管理员。