CentOS7下 RPM 方式安装 mongoDB 4

前言

以前自己没有用过 mongoDB ,这次有个迁移环境的工作,所以需要安装 mongoDB ,在这个过程中有一些坑,所以记录一下,已备后期查询

下载文件

当前最新的版本是 4.0.5 ,所以我们就使用这个版本。以下命令下载必要的文件

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-server-4.0.5-1.el7.x86_64.rpm
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-shell-4.0.5-1.el7.x86_64.rpm
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-tools-4.0.5-1.el7.x86_64.rpm
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-mongos-4.0.5-1.el7.x86_64.rpm

安装程序

执行如下命令安装 mongoDB 的服务端程序

[root@localhost u1]# rpm -ivh mongodb-org-server-4.0.5-1.el7.x86_64.rpm
警告:mongodb-org-server-4.0.5-1.el7.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID e52529d4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mongodb-org-server-4.0.5-1.el7   ################################# [100%]
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.

这仅仅安装了 mongoDB 的服务端程序,如果还需要用命令行连接 mongoDB,则需要安装 shell 程序包

rpm -ivh mongodb-org-shell-4.0.5-1.el7.x86_64.rpm 

如果需要一些附加工具,例如数据导入导出,则需要安装 tool 程序包

rpm -ivh mongodb-org-tools-4.0.5-1.el7.x86_64.rpm

如果要部署集群,则还需要安装 mongos 程序包

rpm -ivh mongodb-org-mongos-4.0.5-1.el7.x86_64.rpm 

配置

安装好了以后,会生成一个 /etc/mongod.conf 的配置文件,配置了 mogoDB 默认的配置。默认的配置文件如下所示

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  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.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

这是一个 yaml 格式的配置文件,其中 systemLog.path 指明了 mongoDB 的系统运行日志的路径, storage.dbPath 指定了 mongoDB 数据文件存放路径,processManagement.pidFilePath 指明了 mongoDB 运行时进程文件存放路径, net.port 指明了 mongodDB 服务的网络端口号, net.bindIp 则指定了 mongoDB 网络服务绑定的 ip 地址。直接使用这些默认配置,mongoDB 就可以运行起来。但是,会存在以下的问题

  1. 上面这些路径都是散落在操作系统的各个目录中,在实际情况中我们想在一个存储空间比较大的路径下来存储 mongoDB 的数据,同时将相关的一些文件都放在同一的目录下,例如这个路径是 /u1/mongodb 。/u1/mongodb/data 存储 mongoDB 存储的数据,/u1/mongodb/logs/目录存储日志文件。
  2. 默认配置的网络服务绑定地址为 127.0.0.1 ,也就意味着默认情况下只能本机连接 mongoDB。
  3. 采用的默认端口 27017 在一些情况下可能会遭到外部的攻击。需要改一个不太常用的端口。

所以,我们修改了这个默认的配置文件内容如下

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /u1/mongodb/logs/mongod.log

# Where and how to store data.
storage:
  dbPath: /u1/mongodb/data
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /u1/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 32937
#  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.
  bindIp: 0.0.0.0  #,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

然后执行下面的命令准备好环境

mkdir /u1/mongodb
mkdir /u1/mongodb/data
mkdir /u1/mongodb/logs
chown -R mongod:mongod /u1/mongodb

启动

如果没有使用 mongoDB 默认的文件目录和默认的端口,那么在启动之前,我们需要将 selinux 的状态设置为 Permissive

setenforce 0

执行下面的命令启动 mongoDB 服务

systemctl start mongod

这里有一个坑,我们会发现经过一个比较长时间的等待后,中间有一段过程 mongoDB 的服务已经起来了,但是过了一段时间又停止了。查看 mongoDB 的日志文件 /u1/mongodb/logs/mongod.log 的内容如下所示

2019-01-12T14:57:27.749+0800 I STORAGE  [initandlisten] createCollection: admin.system.version with provided UUID: 60038dc7-8626-41fe-b6f7-beee1a0d073d
2019-01-12T14:57:27.983+0800 I COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.0
2019-01-12T14:57:27.993+0800 I STORAGE  [initandlisten] createCollection: local.startup_log with generated UUID: 6a42e867-7f19-429d-99a4-7f051bf84208
2019-01-12T14:57:28.109+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/u1/mongodb/data/diagnostic.data'
2019-01-12T14:57:28.134+0800 I NETWORK  [initandlisten] waiting for connections on port 32937
2019-01-12T14:57:28.172+0800 I STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: ab2d4939-2403-42f2-a0b3-afd825144421
2019-01-12T14:57:28.407+0800 I INDEX    [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "
config.system.sessions", expireAfterSeconds: 1800 }
2019-01-12T14:57:28.407+0800 I INDEX    [LogicalSessionCacheRefresh]     building index using bulk method; build may temporarily use up to 500 megabytes of RAM
2019-01-12T14:57:28.409+0800 I INDEX    [LogicalSessionCacheRefresh] build index done.  scanned 0 total records. 0 secs
2019-01-12T14:57:28.409+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 236ms
2019-01-12T14:58:55.458+0800 I CONTROL  [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
2019-01-12T14:58:55.458+0800 I NETWORK  [signalProcessingThread] shutdown: going to close listening sockets...
2019-01-12T14:58:55.459+0800 I NETWORK  [signalProcessingThread] removing socket file: /tmp/mongodb-32937.sock
2019-01-12T14:58:55.459+0800 I CONTROL  [signalProcessingThread] Shutting down free monitoring
2019-01-12T14:58:55.460+0800 I FTDC     [signalProcessingThread] Shutting down full-time diagnostic data capture
2019-01-12T14:58:55.464+0800 I STORAGE  [signalProcessingThread] WiredTigerKVEngine shutting down
2019-01-12T14:58:55.909+0800 I STORAGE  [signalProcessingThread] shutdown: removing fs lock...
2019-01-12T14:58:55.909+0800 I CONTROL  [signalProcessingThread] now exiting
2019-01-12T14:58:55.909+0800 I CONTROL  [signalProcessingThread] shutting down with code:0

服务启动后又收到一个停止信号,然后关闭了。找了很久才发现,在他生成的服务配置文件 /usr/lib/systemd/system/mongod.service 中指定的 pid 文件还是原来默认的。大概这个服务脚本会在服务启动后根据这个文件来做连接测试,连接不上后就将服务停止了。将这个配置更改为和 /etc/mongod.conf 中配置的值 ,然后执行

systemctl daemon-reload
systemctl start mongod 

连接

可以在服务器上通过 shell 命令连接

mongo --port 32937

即可进入 mongoDB 的交互式界面对 mongoDB 进行控制了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容