centos7安装MongoDB4.2社区版(单节点)

centos7安装MongoDB4.2社区版

官网
中文官网

一、安装MongoDB社区版

1、配置程序包管理系统(yum)。

创建一个/etc/yum.repos.d/mongodb-org-4.2.repo文件,以便您可以使用yum以下命令直接安装MongoDB :

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
2、安装MongoDB软件包。

要安装最新的稳定版MongoDB,请发出以下命令:(暂不推荐)

sudo yum install -y mongodb-org

另外,要安装特定版本的MongoDB,请分别指定每个组件包,然后将版本号附加到包名中,如以下示例所示:(推荐指定版本号安装)

sudo yum install -y mongodb-org-4.2.13 mongodb-org-server-4.2.13 mongodb-org-shell-4.2.13 mongodb-org-mongos-4.2.13 mongodb-org-tools-4.2.13

您可以指定任何可用的MongoDB版本。但是yum ,当有新版本可用时,将升级软件包。为防止意外升级,请固定包装。要固定包,exclude请在/etc/yum.conf文件中添加以下指令:(建议执行以防自动升级版本导致程序无法使用,或是修改.repo包enabled=0)

echo 'exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools'>>/etc/yum.conf

记住如果卸载需要删除此限制,要不无法安装

3、运行MongoDB社区版
使用默认目录(推荐)

默认情况下,MongoDB使用mongod用户帐户运行,并使用以下默认目录:

  • /var/lib/mongo (数据目录)
  • /var/log/mongodb (日志目录)
使用非默认目录(跳过)

要使用默认目录以外的数据目录和/或日志目录:

  1. 创建一个或多个新目录。

  2. 编辑配置文件,/etc/mongod.conf并相应地修改以下字段:

    • storage.dbPath指定新的数据目录路径(例如/some/data/directory
    • systemLog.path指定新的日志文件路径(例如/some/log/directory/mongod.log
  3. 确保运行MongoDB的用户有权访问一个或多个目录:

    sudo chown -R mongod:mongod <directory>
    

    如果更改运行MongoDB进程的用户,则必须 授予新用户访问这些目录的权限。

4、配置SELinux(如果SELinux处于disable模式下——跳过)

如果SELinux处于enforcing模式下,则必须通过以下两项策略调整为MongoDB自定义SELinux策略:

查看当前的 SELinux 状态

getenforce

关闭SELinux参考

4.1、允许访问cgroup(SELinux处于enforcing模式下)

当前的SELinux策略不允许MongoDB进程访问/sys/fs/cgroup,这是确定系统上可用内存所必需的。如果打算以enforcing模式运行SELinux ,则需要对SELinux策略进行以下调整:

  1. 确保您的系统已checkpolicy安装软件包:

    sudo yum install checkpolicy
    
  2. 创建一个自定义策略文件mongodb_cgroup_memory.te:

    cat > mongodb_cgroup_memory.te <<EOF
    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 };
    EOF
    
  3. 创建完成后,通过运行以下三个命令来编译并加载自定义策略模块:

    checkmodule -M -m -o mongodb_cgroup_memory.mod mongodb_cgroup_memory.te
    semodule_package -o mongodb_cgroup_memory.pp -m mongodb_cgroup_memory.mod
    sudo semodule -i mongodb_cgroup_memory.pp
    

MongoDB进程现在可以访问SELinux设置为强制执行的正确文件。

4.2、允许FTDC访问netstat(SELinux处于enforcing模式下)

当前的SELinux策略不允许MongoDB进程打开和读取/proc/net/netstat,这是 全时诊断数据捕获(FTDC)所必需的。如果打算以enforcing模式运行SELinux ,则需要对SELinux策略进行以下调整:

  1. 确保您的系统已checkpolicy安装软件包:

    sudo yum install checkpolicy
    
  2. 创建一个自定义策略文件mongodb_proc_net.te

    cat > mongodb_proc_net.te <<EOF
    module mongodb_proc_net 1.0;
    
    require {
        type proc_net_t;
        type mongod_t;
        class file { open read };
    }
    
    #============= mongod_t ==============
    allow mongod_t proc_net_t:file { open read };
    EOF
    
  3. 创建完成后,通过运行以下三个命令来编译并加载自定义策略模块:

    checkmodule -M -m -o mongodb_proc_net.mod mongodb_proc_net.te
    semodule_package -o mongodb_proc_net.pp -m mongodb_proc_net.mod
    sudo semodule -i mongodb_proc_net.pp
    
4.3、使用自定义MongoDB目录路径
  1. 更新SELinux策略以允许mongod服务使用新目录:

    sudo semanage fcontext -a -t <type> </some/MongoDB/directory.*>
    

    在适当的地方指定以下类型之一:

    • mongod_var_lib_t 用于数据目录
    • mongod_log_t 用于日志文件目录
    • mongod_var_run_t 用于pid文件目录

    确保在目录末尾包含.*。

  2. 为新目录更新SELinux用户策略:

    sudo chcon -Rv -u system_u -t <type> </some/MongoDB/directory>
    

    在适当的地方指定以下类型之一:

    • mongod_var_lib_t 用于数据目录
    • mongod_log_t 用于日志目录
    • mongod_var_run_t 用于pid文件目录
  3. 将更新的SELinux策略应用于目录:

    restorecon -R -v </some/MongoDB/directory>
    

    确保在用于semanage fcontext操作的目录末尾包含.*

eg:

如果使用非默认MongoDB数据路径/mongodb/data

sudo semanage fcontext -a -t mongod_var_lib_t '/mongodb/data.*'
sudo chcon -Rv -u system_u -t mongod_var_lib_t '/mongodb/data'
restorecon -R -v '/mongodb/data'

如果使用非默认的MongoDB日志目录/mongodb/log (例如,日志文件路径为/mongodb/log/mongod.log):

sudo semanage fcontext -a -t mongod_log_t '/mongodb/log.*'
sudo chcon -Rv -u system_u -t mongod_log_t '/mongodb/log'
restorecon -R -v '/mongodb/log'
4.4、使用自定义MongoDB端口
sudo semanage port -a -t mongod_port_t -p tcp <portnumber>
5、初始化系统
5.1、启动MongoDB
sudo systemctl start mongod

如果你在启动mongod时收到类似以下的错误:

Failed to start mongod.service: Unit mongod.service not found.

首先运行以下命令:

sudo systemctl daemon-reload
chown -R mongod:mongod /lib/systemd/system/mongod.service
5.2、验证是否启动成功
sudo systemctl status mongod

设置开机自启动

sudo systemctl enable mongod
5.3、停止MongoDB
sudo systemctl stop mongod
5.4、重启MongoDB
sudo systemctl restart mongod

可以通过查看/var/log/mongodb/mongod.log文件中的输出来跟踪错误或重要消息的处理状态。

6、使用MongoDB

默认端口27017

6.1、可以在mongo不使用任何命令行选项的情况下运行Shell

mongo

6.2、指定端口号登录

mongo --port [port]  
mongo --host [ip]:[port]
7、修改端口号(net.port)
vim /etc/mongod.conf
systemctl restart mongod.service

/etc/mongod.conf 配置文件详情参考

8、修改绑定ip地址(net.bindIp)
vim /etc/mongod.conf
systemctl restart mongod.service
9、创建用户管理员
mongo --port [port]  
use admin
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(),   // or cleartext password "myUserAdminpass",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

登录验证:

第一种(类似 MySql)

mongo --port 27017  --authenticationDatabase "admin" -u "myUserAdmin" -p "myUserAdminpass"

第二种(客户端连接后,再进行验证)

mongo --port 27017
use admin
db.auth("adminUser", "adminPass")
// 输出 1 表示验证成功
10、根据部署需要创建其他用户
use test
db.createUser(
  {
    user: "myTester",
    pwd:  passwordPrompt(),   // or cleartext password "myTesterpass",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

use test表示用户在 test库中创建,就一定要 test库验证身份,即用户的信息跟随随数据库。比如上述 myTester虽然有 reporting库的读取权限,但是一定要先在 test库进行身份验证,直接访问会提示验证失败。

use test
db.auth("myTester", "myTesterpass")
use reporting
show collections
11、 创建root用户
db.createUser(
    {
   	    user: "root",
        pwd: "root123", 
        roles: [ { role: "root", db: "admin" } ]
    }
)
12、查看用户、删除用户
show users

删除用户:

删除用户必须由账号管理员来删,所以,切换到admin角色
use admin
db.auth("admin","password")
删除单个用户
db.system.users.remove({user:"XXXXXX"})
删除所有用户
db.system.users.remove({})

内置角色

内建角色
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
13、修改密码

passwordPrompt() # 以提示输入密码

use products
db.changeUserPassword("accountUser", passwordPrompt())

直接输入明文密码

use products
db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL")

二、卸载MongoDB社区版

要从系统中完全删除MongoDB,必须删除MongoDB应用程序本身,配置文件以及包含数据和日志的所有目录。

1、停止MongoDB

sudo service mongod stop

2、删除软件包

sudo yum erase $(rpm -qa | grep mongodb-org)

3、删除数据目录

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo


三、生产MongoDB部署的性能注意事项和配置建议。

在Linux上,您必须禁用区域回收,还必须确保您的 mongodmongos实例由启动 numactl,通常通过平台的init系统对其进行配置。您必须执行这两项操作,才能正确禁用NUMA与MongoDB一起使用。

NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”

mongod是MongoDB系统的主要守护进程。它处理数据请求,管理数据访问并执行后台管理操作。

对于分片群集mongos 实例提供客户端应用程序和分片群集之间的接口。该mongos实例路线查询和写入操作的碎片。从应用程序的角度来看,mongos实例的行为与任何其他MongoDB实例相同。

1、使用以下命令之一禁用区域回收
echo 0 | sudo tee /proc/sys/vm/zone_reclaim_mode
sudo sysctl -w vm.zone_reclaim_mode=0
2、确保mongodmongos以开头numactl。通常,这是通过平台的init系统配置的。运行以下命令以确定您的平台上正在使用哪个初始化系统:
ps --no-headers -o comm 1

如果为“ systemd”,则您的平台使用systemd初始化系统:

2.1、复制默认的MongoDB服务文件:
sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/
2.2、编辑/etc/systemd/system/mongod.service文件,并更新ExecStart语句开头:
/usr/bin/numactl --interleave=all

例子

如果您的现有ExecStart语句显示为:

ExecStart =/usr/bin/mongod --config /etc/mongod.conf

将该语句更新为:

ExecStart=/usr/bin/numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf

2.3、将更改应用于systemd
sudo systemctl daemon-reload
2.4、重新启动任何正在运行的mongod实例:
sudo systemctl stop mongod
sudo systemctl start mongod
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值