【误闯大数据】【从安装到入门】MongoDB部署

266 阅读3分钟
作者 日期 天气
元公子 2020-01-26(周日) 下雨的东莞

你知道的越少,你不知道的就越少

没有朋友的点赞,就没法升级打怪

一、环境准备

  • 示例使用Centos7 64位操作系统

二、下载安装包

社区最新稳定版:下载页

选择当前稳定的版本、对应的操作系统版本,以及选择TGZ的安装包

三、开始安装

创建安装目录

[root@hadoop-master /soft]# tar -xvzf mongodb-linux-x86_64-rhel70-4.2.2.tgz
[root@hadoop-master /soft]# chown -R hadoop:hadoop mongodb-linux-x86_64-rhel70-4.2.2
[root@hadoop-master /soft]# ln -s mongodb-linux-x86_64-rhel70-4.2.2 mongodb

设置环境变量

[root@hadoop-master /soft]# vi /etc/profile
export MONGODB_HOME=/soft/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
[root@hadoop-master /soft]# source /etc/profile

创建配置、数据库存储和日志等目录文件夹

[root@hadoop-master /soft]# su - hadoop
[hadoop@hadoop-master /home/hadoop]$ mkdir -p /home/hadoop/mongodb/conf
[hadoop@hadoop-master /home/hadoop]$ mkdir -p /home/hadoop/mongodb/data/db
[hadoop@hadoop-master /home/hadoop]$ mkdir -p /home/hadoop/mongodb/data/logs

创建配置文件

[hadoop@hadoop-master /home/hadoop]$ vi /home/hadoop/mongodb/conf/mongodb.conf
dbpath=/home/hadoop/mongodb/data/db
logpath=/home/hadoop/mongodb/data/logs/mongodb.log   
fork=true
logappend=true 
port=27017
auth=true
bind_ip=0.0.0.0

启动服务

[hadoop@hadoop-master /home/hadoop]$ mongod --config /home/hadoop/mongodb/conf/mongodb.conf

四、服务自启动

[hadoop@hadoop-master /soft]$ su - root
[root@hadoop-master /root]# vi /etc/systemd/system/mongodb.service
# 或者 vi /lib/systemd/system/mongodb.service
[Unit]
Description=mongodb.service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
User=hadoop
Group=hadoop
ExecStart=/soft/mongodb/bin/mongod -f /home/hadoop/mongodb/conf/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/soft/mongodb/bin/mongod --shutdown -f /home/hadoop/mongodb/conf/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@hadoop-master /root]# chmod 755 /etc/systemd/system/mongodb.service
[root@hadoop-master /root]# systemctl enable mongodb
[root@hadoop-master /root]# service mongodb start

五、偶遇的坑

  • warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused

可以采用如下两种方式解决:

  1. 若数据库出现如上不能连接的原因,可能是data目录下的mongod.lock文件问题,可以用如下命令修复: mongod --repair

  2. 或者直接删除mongod.lock rm -f /home/hadoop/mongodb/data/db/mongod.lock 然后再启动 mongodb 服务:mongod --config /home/hadoop/mongodb/conf/mongodb.conf

补充知识点:

  • 添加管理员用户,自定义数据库用户
[hadoop@hadoop-master /home/hadoop]$ mongo
MongoDB shell version v4.2.2
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"123456",roles:["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
# 验证用户是否创建成功
> db.auth("root", "123456")
1
# 创建一个数据库
> use dev_test
switched to db dev_test
> db.createUser({user: "dev", pwd: "123456", roles: [{ role: "dbOwner", db: "dev_test" }]}) 
> exit
bye
# 登录验证
[hadoop@hadoop-master /home/hadoop]$ mongo  -u dev -password 123456 -authenticationDatabase dev_test 
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?authSource=dev_test&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d65e8da2-2298-4c46-bc13-e835f84b7424") }
MongoDB server version: 4.2.2
  • 参数解释
--dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加,即使用追加的方式写日志
--journal 启用日志
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
--syncdelay 数据写入硬盘的时间(秒),0是不等待,直接写入
--notablescan 不允许表扫描
--maxConns 最大的并发连接数,默认2000  
--pidfilepath 指定进程文件,不指定则不产生进程文件
--bind_ip 绑定IP,绑定后只能绑定的IP访问服务
  • 数据库用户角色

    read:允许用户读取指定数据库

    readWrite:允许用户读写指定数据库

  • 数据库管理角色

    dbAdmin:在当前dB中执行管理操作。允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

    dbOwner:在当前DB中执行任意操作。

    userAdmin:在当前DB中管理User。允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

    root:只在admin数据库中可用。超级账号,超级权限

  • 备份和还原角色

    backup restore

  • 跨库角色

    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

  • 集群管理角色

    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

    clusterManager:授予管理和监控集群的权限。 clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限。 hostManager:管理Server。

附录: