centos7安装MongoDB4.2社区版
- 一、安装MongoDB社区版
- 二、卸载MongoDB社区版
- 三、生产MongoDB部署的性能注意事项和配置建议。
一、安装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
(日志目录)
使用非默认目录(跳过)
要使用默认目录以外的数据目录和/或日志目录:
-
创建一个或多个新目录。
-
编辑配置文件,
/etc/mongod.conf
并相应地修改以下字段:storage.dbPath
指定新的数据目录路径(例如/some/data/directory
)systemLog.path
指定新的日志文件路径(例如/some/log/directory/mongod.log
)
-
确保运行MongoDB的用户有权访问一个或多个目录:
sudo chown -R mongod:mongod <directory>
如果更改运行MongoDB进程的用户,则必须 授予新用户访问这些目录的权限。
4、配置SELinux(如果SELinux处于disable
模式下——跳过)
如果SELinux处于
enforcing模式下,则必须通过以下两项策略调整为MongoDB自定义SELinux策略:
查看当前的 SELinux 状态
getenforce
4.1、允许访问cgroup
(SELinux处于enforcing
模式下)
当前的SELinux策略不允许MongoDB进程访问/sys/fs/cgroup
,这是确定系统上可用内存所必需的。如果打算以enforcing
模式运行SELinux ,则需要对SELinux策略进行以下调整:
-
确保您的系统已
checkpolicy
安装软件包:sudo yum install checkpolicy
-
创建一个自定义策略文件
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
-
创建完成后,通过运行以下三个命令来编译并加载自定义策略模块:
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策略进行以下调整:
-
确保您的系统已
checkpolicy
安装软件包:sudo yum install checkpolicy
-
创建一个自定义策略文件
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
-
创建完成后,通过运行以下三个命令来编译并加载自定义策略模块:
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目录路径
-
更新SELinux策略以允许
mongod
服务使用新目录:sudo semanage fcontext -a -t <type> </some/MongoDB/directory.*>
在适当的地方指定以下类型之一:
mongod_var_lib_t
用于数据目录mongod_log_t
用于日志文件目录mongod_var_run_t
用于pid文件目录
确保在目录末尾包含.*。
-
为新目录更新SELinux用户策略:
sudo chcon -Rv -u system_u -t <type> </some/MongoDB/directory>
在适当的地方指定以下类型之一:
mongod_var_lib_t
用于数据目录mongod_log_t
用于日志目录mongod_var_run_t
用于pid文件目录
-
将更新的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上,您必须禁用区域回收,还必须确保您的 mongod
和mongos
实例由启动 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、确保mongod
和mongos
以开头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