原创内容,转载请注明出处
参考文献
官方文档概述
使用本教程使用.rpm 软件包在Red Hat Enterprise Linux或CentOS Linux版本6和7上安装MongoDB Community Edition 。
本安装指南仅支持64位系统。有关更多信息,请参阅 支持的平台。
生产笔记
在生产环境中部署MongoDB之前,请考虑 生产注释文档。
安装MongoDB的社区版
注意
要安装不同版本的MongoDB,请参阅该版本的文档。要安装以前的版本,请参阅3.6版的教程。
本安装指南仅支持64位系统。有关更多信息,请参阅 支持的平台。
安装MongoDB社区版的方式
官方介绍安装有两种方式
使用yum安装的方式
使用下载的tar包进行安装
首先下面来看看yum安装方式。
使用yum安装
配置包管理系统(`yum`)。¶
创建一个/etc/yum.repos.d/mongodb-org-4.0.repo文件,以便您可以使用yum以下命令直接安装MongoDB :
mongodb-org-4.0.repo文件如下:
1[mongodb-org-4.0]在服务器上写上yum源文件
2name=MongoDB Repository
3baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
4gpgcheck=1
5enabled=1
6gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
注意
您可以在存储库本身中找到.repo每个版本的文件。奇数次要版本(例如3.5)是开发版本,不适合生产使用。
安装MongoDB包。
要安装最新的稳定版MongoDB,请发出以下命令:
1sudo yum install -y mongodb-org安装完毕
查看一下安装完毕之后,mongo是什么版本:
1[root@server81 yum.repos.d]# mongo
2mongo mongodump mongofiles mongorestore mongostat
3mongod mongoexport mongoimport mongos mongotop
4[root@server81 yum.repos.d]# mongo --version
5MongoDB shell version v4.0.4
6git version: f288a3bdf201007f3693c58e140056adf8b04839
7OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
8allocator: tcmalloc
9modules: none
10build environment:
11 distmod: rhel70
12 distarch: x86_64
13 target_arch: x86_64
14[root@server81 yum.repos.d]#
那么假设需要安装特定的版本号呢?
可以先卸载掉sudo yum erase -y mongodb-org,再安装看看。
要安装特定版本的MongoDB,请单独指定每个组件包,并将版本号附加到包名称,如以下示例所示:
1sudo yum install -y mongodb-org-4.0.4 mongodb-org-server-4.0.4 mongodb-org-shell-4.0.4 mongodb-org-mongos-4.0.4 mongodb-org-tools-4.0.4
这种安装方式虽然方便,但是存在yum源解决的情况。为了保证可以方便重复安装,最好对yum源的rpm包进行离线。
您可以指定任何可用的MongoDB版本。但是yum ,当有更新的版本可用时,请升级软件包。为防止意外升级,请将包装固定。要固定包,请将以下exclude指令添加到您的/etc/yum.conf文件中:
1exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
缓存yum安装包
为了方便下次再次安装同一个版本,我习惯将yum安装的版本的rpm包下载下来,可以再下次安装的时候直接使用。
1yum install -y mongodb-org --downloadonly --downloaddir=/work/mongodb
下载下来的rpm包如下:
1[root@server81 mongodb]# ls -ll -h
2total 77M
3-rw-r--r-- 1 root root 5.9K Nov 7 04:12 mongodb-org-4.0.4-1.el7.x86_64.rpm
4-rw-r--r-- 1 root root 13M Nov 7 04:12 mongodb-org-mongos-4.0.4-1.el7.x86_64.rpm
5-rw-r--r-- 1 root root 22M Nov 7 04:12 mongodb-org-server-4.0.4-1.el7.x86_64.rpm
6-rw-r--r-- 1 root root 14M Nov 7 04:12 mongodb-org-shell-4.0.4-1.el7.x86_64.rpm
7-rw-r--r-- 1 root root 30M Nov 7 04:12 mongodb-org-tools-4.0.4-1.el7.x86_64.rpm
8[root@server81 mongodb]#
执行安装下载的rpm包
1[root@server81 mongodb]# rpm -ivh mongodb-org-server-4.0.4-1.el7.x86_64.rpm
2Preparing... ################################# [100%]
3Updating / installing...
4 1:mongodb-org-server-4.0.4-1.el7 ################################# [100%]
5Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
6[root@server81 mongodb]#
7[root@server81 mongodb]# rpm -ivh mongodb-org-mongos-4.0.4-1.el7.x86_64.rpm
8Preparing... ################################# [100%]
9Updating / installing...
10 1:mongodb-org-mongos-4.0.4-1.el7 ################################# [100%]
11[root@server81 mongodb]#
12[root@server81 mongodb]# rpm -ivh mongodb-org-shell-4.0.4-1.el7.x86_64.rpm
13Preparing... ################################# [100%]
14Updating / installing...
15 1:mongodb-org-shell-4.0.4-1.el7 ################################# [100%]
16[root@server81 mongodb]#
17[root@server81 mongodb]# rpm -ivh mongodb-org-tools-4.0.4-1.el7.x86_64.rpm
18Preparing... ################################# [100%]
19Updating / installing...
20 1:mongodb-org-tools-4.0.4-1.el7 ################################# [100%]
21[root@server81 mongodb]#
22[root@server81 mongodb]# rpm -ivh mongodb-org-4.0.4-1.el7.x86_64.rpm
23Preparing... ################################# [100%]
24Updating / installing...
25 1:mongodb-org-4.0.4-1.el7 ################################# [100%]
26[root@server81 mongodb]#
27[root@server81 mongodb]# rpm -qa | grep mongodb
28mongodb-org-shell-4.0.4-1.el7.x86_64
29mongodb-org-4.0.4-1.el7.x86_64
30mongodb-org-tools-4.0.4-1.el7.x86_64
31mongodb-org-server-4.0.4-1.el7.x86_64
32mongodb-org-mongos-4.0.4-1.el7.x86_64
33[root@server81 mongodb]#
整理一下安装的shell脚本吧。
安装脚本install_mongodb.sh
1[root@server81 mongodb]# vim install_mongodb.sh
2
3rpm -ivh mongodb-org-server-4.0.4-1.el7.x86_64.rpm
4rpm -ivh mongodb-org-mongos-4.0.4-1.el7.x86_64.rpm
5rpm -ivh mongodb-org-shell-4.0.4-1.el7.x86_64.rpm
6rpm -ivh mongodb-org-tools-4.0.4-1.el7.x86_64.rpm
7rpm -ivh mongodb-org-4.0.4-1.el7.x86_64.rpm
卸载脚本erase_mongodb.sh
1[root@server81 mongodb]# vim erase_mongodb.sh
2
3rpm -qa | grep mongodb | while read line
4do
5# echo $line
6 rpm -e --nodeps $line
7done
运行MongoDB社区版
先决条件 - 配置selinux
重要
如果您使用SELinux,则必须配置SELinux以允许MongoDB在基于Red Hat Linux的系统(Red Hat Enterprise Linux或CentOS Linux)上启动。
要配置SELinux,管理员有三个选项:
-
如果SELinux处于enforcing模式,则启用对MongoDB部署将使用的相关端口的访问(例如27017)。有关MongoDB默认端口的更多信息,请参阅默认MongoDB端口。对于默认设置,可以通过运行来完成
1semanage port -a -t mongod_port_t -p tcp 27017
-
通过将SELINUX设置设置为disabled来 禁用SELinux /etc/selinux/config。
1SELINUX=disabled
必须重新引导系统才能使更改生效。
-
通过将设置设置为,将SELinux设置为permissive模式 /etc/selinux/config
1SELINUX=permissive
必须重新引导系统才能使更改生效。
您可以改为使用setenforce更改为permissive模式。 setenforce不需要重新启动但不是持久性的。
或者,您可以选择在安装Linux操作系统时不安装SELinux软件包,或选择删除相关软件包。此选项是最具侵入性的,不建议使用。
目录和权限
警告
在RHEL 7.0上,如果更改数据路径,则默认 SELinux策略将阻止mongod在不更改安全上下文时对新数据路径具有写访问权限。
默认情况下,MongoDB实例存储:
-
它的数据文件 /var/lib/mongo
-
它的日志文件 /var/log/mongodb
如果通过包管理器安装,则会在安装期间创建目录。
如果通过下载tarball手动安装,则可以使用或根据将运行MongoDB的用户创建目录。(有关和的信息,请参阅Linux手册页。)mkdir -p <directory>``sudo mkdir -p <directory>``mkdir``sudo
默认情况下,MongoDB使用mongod用户帐户运行。如果更改运行MongoDB进程的用户,则还必须修改/var/lib/mongo和/var/log/mongodb 目录的权限,以授予此用户访问这些目录的权限。
要指定不同的日志文件目录和数据文件目录,请编辑systemLog.path和中的storage.dbPath设置/etc/mongod.conf。确保运行MongoDB的用户可以访问这些目录。
ulimit的配置
大多数类Unix操作系统限制会话可能使用的系统资源。这些限制可能会对MongoDB操作产生负面影响。有关更多信息,请参见UNIX ulimit设置。
1[root@server81 ~]# ulimit -n
21024
3[root@server81 ~]#
4[root@server81 ~]# ulimit -a
5core file size (blocks, -c) 0
6data seg size (kbytes, -d) unlimited
7scheduling priority (-e) 0
8file size (blocks, -f) unlimited
9pending signals (-i) 15012
10max locked memory (kbytes, -l) 64
11max memory size (kbytes, -m) unlimited
12open files (-n) 1024
13pipe size (512 bytes, -p) 8
14POSIX message queues (bytes, -q) 819200
15real-time priority (-r) 0
16stack size (kbytes, -s) 8192
17cpu time (seconds, -t) unlimited
18max user processes (-u) 15012
19virtual memory (kbytes, -v) unlimited
20file locks (-x) unlimited
21[root@server81 ~]#
从上面可以看出centos7默认的ulimit只能打开1024的文件数量,如果是生产环境,应该适当调大文件打开数目进行优化。
启动mongodb
sudo service mongod start
1[root@server81 ~]# sudo service mongod start
2Redirecting to /bin/systemctl start mongod.service
3[root@server81 ~]#
4[root@server81 ~]# sudo service mongod status
5Redirecting to /bin/systemctl status mongod.service
6● mongod.service - MongoDB Database Server
7 Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
8 Active: active (running) since Sat 2018-12-15 16:33:26 HKT; 6min ago
9 Docs: https://docs.mongodb.org/manual
10 Process: 1031 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
11 Process: 1029 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
12 Process: 1025 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
13 Process: 1014 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
14 Main PID: 1489 (mongod)
15 Memory: 22.9M
16 CGroup: /system.slice/mongod.service
17 └─1489 /usr/bin/mongod -f /etc/mongod.conf
18
19Dec 15 16:33:05 server81 systemd[1]: Starting MongoDB Database Server...
20Dec 15 16:33:20 server81 mongod[1031]: 2018-12-15T16:33:20.851+0800 I CONTROL [m...e'
21Dec 15 16:33:20 server81 mongod[1031]: about to fork child process, waiting until...s.
22Dec 15 16:33:20 server81 mongod[1031]: forked process: 1489
23Dec 15 16:33:26 server81 systemd[1]: Started MongoDB Database Server.
24Hint: Some lines were ellipsized, use -l to show in full.
25[root@server81 ~]#
查看mongoDB的启动服务端口
查看mongoDB的配置文件/etc/mongod.conf,可以知道服务启动的端口号。当然,也可以进行修改。
1[root@server81 ~]# vim /etc/mongod.conf
2
3
4# where to write logging data.
5systemLog:
6 destination: file
7 logAppend: true
8 path: /var/log/mongodb/mongod.log
9
10# Where and how to store data.
11storage:
12 dbPath: /var/lib/mongo
13 journal:
14 enabled: true
15# engine:
16# mmapv1:
17# wiredTiger:
18
19# how the process runs
20processManagement:
21 fork: true # fork and run in background
22 pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
23 timeZoneInfo: /usr/share/zoneinfo
24
25# network interfaces
26net:
27 port: 27017
28 bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
29
30
31#security:
32
33#operationProfiling:
34
35#replication:
36
37#sharding:
38
39## Enterprise-Only Options
40
41#auditLog:
42
43#snmp:
可以从上面看出,mongoDB的服务只绑定了 127.0.0.1 的 27017 端口,并没有让本地网卡IP提供服务。
下面可以测试看看。
1[root@server81 ~]# nc -vv 127.0.0.1 27017
2Ncat: Version 7.50 ( https://nmap.org/ncat )
3NCAT DEBUG: Using system default trusted CA certificates and those in /usr/share/ncat/ca-bundle.crt.
4NCAT DEBUG: Unable to load trusted CA certificates from /usr/share/ncat/ca-bundle.crt: error:02001002:system library:fopen:No such file or directory
5libnsock nsi_new2(): nsi_new (IOD #1)
6libnsock nsock_connect_tcp(): TCP connection requested to 127.0.0.1:27017 (IOD #1) EID 8
7libnsock nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [127.0.0.1:27017]
8Ncat: Connected to 127.0.0.1:27017.
9libnsock nsi_new2(): nsi_new (IOD #2)
10libnsock nsock_read(): Read request from IOD #1 [127.0.0.1:27017] (timeout: -1ms) EID 18
11libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 26
12
13libnsock nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 26 [peer unspecified] (1 bytes): .
14libnsock nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 35 [127.0.0.1:27017]
15libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 42
16^C
17[root@server81 ~]#
18[root@server81 ~]# nc -vv 172.16.5.181 27017
19Ncat: Version 7.50 ( https://nmap.org/ncat )
20NCAT DEBUG: Using system default trusted CA certificates and those in /usr/share/ncat/ca-bundle.crt.
21NCAT DEBUG: Unable to load trusted CA certificates from /usr/share/ncat/ca-bundle.crt: error:02001002:system library:fopen:No such file or directory
22libnsock nsi_new2(): nsi_new (IOD #1)
23libnsock nsock_connect_tcp(): TCP connection requested to 172.16.5.181:27017 (IOD #1) EID 8
24libnsock nsock_trace_handler_callback(): Callback: CONNECT ERROR [Connection refused (111)] for EID 8 [172.16.5.181:27017]
25Ncat: Connection refused.
26[root@server81 ~]#
那么如果外部服务器需要访问该台mongodb的服务,就需要修改一下绑定的IP为0.0.0.0了。下面修改一下配置文件如下:
1[root@server81 ~]# vim /etc/mongod.conf
2# network interfaces
3net:
4 port: 27017
5 bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
6
7# 重启一下mongoDB的服务
8[root@server81 ~]# service mongod restart
9Redirecting to /bin/systemctl restart mongod.service
10[root@server81 ~]#
11
12# 再次测试一下是否能够用网卡IP进行端口访问
13[root@server81 ~]# nc -vv 172.16.5.181 27017
14Ncat: Version 7.50 ( https://nmap.org/ncat )
15NCAT DEBUG: Using system default trusted CA certificates and those in /usr/share/ncat/ca-bundle.crt.
16NCAT DEBUG: Unable to load trusted CA certificates from /usr/share/ncat/ca-bundle.crt: error:02001002:system library:fopen:No such file or directory
17libnsock nsi_new2(): nsi_new (IOD #1)
18libnsock nsock_connect_tcp(): TCP connection requested to 172.16.5.181:27017 (IOD #1) EID 8
19libnsock nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [172.16.5.181:27017]
20Ncat: Connected to 172.16.5.181:27017.
21libnsock nsi_new2(): nsi_new (IOD #2)
22libnsock nsock_read(): Read request from IOD #1 [172.16.5.181:27017] (timeout: -1ms) EID 18
23libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 26
24
25libnsock nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 26 [peer unspecified] (1 bytes): .
26libnsock nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 35 [172.16.5.181:27017]
27libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 42
28
29libnsock nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 42 [peer unspecified] (1 bytes): .
30libnsock nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 51 [172.16.5.181:27017]
31libnsock nsock_readbytes(): Read request for 0 bytes from IOD #2 [peer unspecified] EID 58
32^C
33[root@server81 ~]#
从上面的步骤可以看出,将配置文件中的127.0.0.1改为0.0.0.0的IP绑定之后,就可以正常使用网卡绑定的IP提供外部访问了。
查看MongoDB的日志信息
可以根据查看日志的方式(tail -f /var/log/mongodb/mongod.log)来查看服务是否启动成功。
1[root@server81 ~]# tail -f /var/log/mongodb/mongod.log
22018-12-15T16:33:26.285+0800 I STORAGE [initandlisten] createCollection: admin.system.version with provided UUID: c996783b-c85f-427a-93cb-43437199d3c7
32018-12-15T16:33:26.415+0800 I COMMAND [initandlisten] setting featureCompatibilityVersion to 4.0
42018-12-15T16:33:26.564+0800 I STORAGE [initandlisten] createCollection: local.startup_log with generated UUID: be8aa834-dcb2-4129-a030-b0f6f7739157
52018-12-15T16:33:26.623+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.data'
62018-12-15T16:33:26.671+0800 I NETWORK [initandlisten] waiting for connections on port 27017
72018-12-15T16:33:26.735+0800 I STORAGE [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: de45dec3-03a6-4225-bb18-83d4953cc2fc
82018-12-15T16:33:26.801+0800 I INDEX [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }
92018-12-15T16:33:26.801+0800 I INDEX [LogicalSessionCacheRefresh] building index using bulk method; build may temporarily use up to 500 megabytes of RAM
102018-12-15T16:33:26.804+0800 I INDEX [LogicalSessionCacheRefresh] build index done. scanned 0 total records. 0 secs
112018-12-15T16:33:26.822+0800 I COMMAND [LogicalSessionCacheRefresh] command config.$cmd command: createIndexes { createIndexes: "system.sessions", indexes: [ { key: { lastUse: 1 }, name: "lsidTTLIndex", expireAfterSeconds: 1800 } ], $db: "config" } numYields:0 reslen:114 locks:{ Global: { acquireCount: { r: 2, w: 2 } }, Database: { acquireCount: { w: 2, W: 1 } }, Collection: { acquireCount: { w: 2 } } } protocol:op_msg 129ms
确保MongoDB将在系统重新启动后启动
1[root@server81 ~]# sudo chkconfig mongod on
2Note: Forwarding request to 'systemctl enable mongod.service'.
3[root@server81 ~]#
停止MongoDB。
1[root@server81 ~]# sudo service mongod stop
2Redirecting to /bin/systemctl stop mongod.service
3[root@server81 ~]#
重启MongoDB。
1[root@server81 ~]# sudo service mongod restart
2Redirecting to /bin/systemctl restart mongod.service
3[root@server81 ~]#
您可以通过观察/var/log/mongodb/mongod.log文件中的输出来跟踪错误或重要消息的进程状态。
卸载MongoDB的社区版
要从系统中完全删除MongoDB,您必须删除MongoDB应用程序本身,配置文件以及包含数据和日志的任何目录。以下部分将指导您完成必要的步骤。
警告
此过程将完全删除MongoDB,其配置和所有 数据库。此过程不可逆,因此请确保在继续之前备份所有配置和数据。
停止MongoDB。
sudo service mongod stop
删除rpm
sudo yum erase $(rpm -qa | grep mongodb-org)
删除数据目录
删除MongoDB数据库和日志文件。
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo
开始使用mongo
输入mongod命令,使用默认端口27017 连接到localhost上运行的shell :
1[root@server81 mongodb]# mongo
2MongoDB shell version v4.0.4
3connecting to: mongodb://127.0.0.1:27017
4Implicit session: session { "id" : UUID("f684453b-2799-4f0c-b4c4-80a82af6e4f5") }
5MongoDB server version: 4.0.4
6Welcome to the MongoDB shell.
7For interactive help, type "help".
8For more comprehensive documentation, see
9 http://docs.mongodb.org/
10Questions? Try the support group
11 http://groups.google.com/group/mongodb-user
12Server has startup warnings:
132018-12-15T16:54:51.953+0800 I CONTROL [initandlisten]
142018-12-15T16:54:51.953+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
152018-12-15T16:54:51.953+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
162018-12-15T16:54:51.953+0800 I CONTROL [initandlisten]
172018-12-15T16:54:51.953+0800 I CONTROL [initandlisten]
182018-12-15T16:54:51.953+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
192018-12-15T16:54:51.953+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
202018-12-15T16:54:51.953+0800 I CONTROL [initandlisten]
212018-12-15T16:54:51.953+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
222018-12-15T16:54:51.953+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
232018-12-15T16:54:51.953+0800 I CONTROL [initandlisten]
24---
25Enable MongoDB's free cloud-based monitoring service, which will then receive and display
26metrics about your deployment (disk utilization, CPU, operation statistics, etc).
27
28The monitoring data will be available on a MongoDB website with a unique URL accessible to you
29and anyone you share the URL with. MongoDB may use this information to make product
30improvements and to suggest MongoDB products and deployment options to you.
31
32To enable free monitoring, run the following command: db.enableFreeMonitoring()
33To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
34---
35
36>
37
有关使用mongo shell 进行连接的更多信息,例如连接到mongod在不同主机和/或端口上运行的实例,请参阅mongo Shell。
MongoDB提供了各种驱动程序版本的入门指南。有关可用版本,请参阅“ 入门”。
如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是对小编最好的支持,非常感谢!
小编有话说
宁愿跑起来被拌倒无数次,也不愿规规矩矩走一辈子。就算跌倒也要豪迈的笑。
目前10000+人已关注加入我们