1 在CentOS 8服务器中安装MongoDB yum存储库
[root@mongodb ~]# hostnamectl set-hostname mongodb.lianglab.cn
[root@mongodb ~]# vi /etc/yum.repos.d/mongodb-org-4.4.repo
在此文件中添加以下配置
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
为MongoDB yum存储库构建缓存
[root@mongodb ~]# dnf clean all
[root@mongodb ~]# dnf makecache
[root@mongodb ~]# dnf repolist
CentOS 8服务器中安装了MongoDB yum存储库完成。
2 CentOS 8中为MongoDB设置资源限制
[root@mongodb ~]# vi /etc/security/limits.d/mongod.conf
添加以下资源限制
mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000
3 在CentOS 8上安装MongoDB数据库
使用dnf命令安装MongoDB服务器的最新稳定版本
[root@mongodb ~]# dnf list -y mongodb-org
[root@mongodb ~]# dnf install -y mongodb-org
启用并启动MongoDB数据库服务
[root@mongodb ~]# systemctl enable --now mongod.service
成功启动后,检查MongoDB的服务状态和端口监听信息
[root@mongodb ~]# systemctl status mongod.service
[root@mongodb ~]# netstat -anplt| grep mongod
4 CentOS 8上为MongoDB创建SELinux策略
根据MongoDB文档,如果您已将SELinux配置为强制模式,则必须为MongoDB创建SELinux策略。
检查当前的SELinux模式。
[root@mongodb ~]# getenforce
Enforcing
我们需要checkpolicy命令来验证自定义SELinux策略,因此我们正在使用dnf命令安装checkpolicy软件包。
[root@mongodb ~]#dnf install -y checkpolicy
创建一个定制的SELinux策略文件。
[root@mongodb ~]# vi mongodb_cgroup_memory.te
并在其中添加以下指令
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 };
编译并应用此SELinux策略。
[root@mongodb ~]# checkmodule -M -m -o mongodb_cgroup_memory.mod mongodb_cgroup_memory.te
[root@mongodb ~]# semodule_package -o mongodb_cgroup_memory.pp -m mongodb_cgroup_memory.mod
[root@mongodb ~]# semodule -i mongodb_cgroup_memory.pp
5 MongoDB中创建管理员用户
默认情况下,MongoDB服务器中未启用访问控制,因此任何人都可以访问MongoDB服务器并执行管理操作。
因此,非常重要的是,我们创建一个Admin用户并在MongoDB服务器中启用访问控制。
[root@mongodb ~]# mongo
> use admin;
switched to db admin
>
db.createUser({
user: "admin",
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase",db: "admin" } ]
})
列出MongoDB数据库中的所有用户
> show users
MongoDB管理员用户已成功创建。
从MongoDB Shell退出。
> exit
bye
6 MongoDB服务器中启用访问控制
要为MongoDB服务器启用访问控制,我们需要为mongod.service编辑systemd单元文件。
[root@mongodb ~]# vi /usr/lib/systemd/system/mongod.service
在此文件中找到以下行。
Environment="OPTIONS=-f /etc/mongod.conf"
并将其替换为以下行。
Environment="OPTIONS=--auth -f /etc/mongod.conf"
重新启动MongoDB服务以应用更改。
[root@mongodb ~]# systemctl daemon-reload
[root@mongodb ~]# systemctl restart mongod.service
要检查访问控制,请连接MongoDB shell并执行一些管理命令。
[root@mongodb ~]# mongo
MongoDB shell version v4.4.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c2640def-e833-4bfc-93ae-e0e5ddea7712") }
MongoDB server version: 4.4.2
> use admin
switched to db admin
> show users
uncaught exception: Error: command usersInfo requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1639:15
shellHelper.show@src/mongo/shell/utils.js:914:9
shellHelper@src/mongo/shell/utils.js:819:15
@(shellhelp2):1:1
> db.auth("admin",passwordPrompt())
Enter password: ###输入我们前面设置的是密码
1
> show users #查询用户信息
{
"_id" : "admin.admin",
"userId" : UUID("26d81b7b-f86a-4507-aa75-015cb0e02a11"),
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
> exit
bye
7 配置MongoDB服务以进行网络访问
[root@mongodb ~]# cat /etc/mongod.conf | grep bind
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.binIpAll setting.
[root@mongodb ~]# vi /etc/mongod.conf
[root@mongodb ~]# netstat -anptl | grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 931395/mongod
[root@mongodb ~]# systemctl restart mongod.service
[root@mongodb ~]# netstat -anptl | grep mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 931722/mongod
[root@mongodb ~]#
在此文件中找到bindIp指令并将其设置为。
修改 bind_ip 127.0.0.1 为 bind_ip = 0.0.0.0 或者注释掉, #bind_ip 127.0.0.1, 让其监听所有外网ip。
bindIp: 0.0.0.0
重新启动MongoDB服务以应用更改。
[root@mongodb ~]# systemctl restart mongod.service
8 MongoDB数据和日志目录
以下是两个目录,对MongoDB数据库管理员来说非常重要。
- /var/lib/mongo-数据目录(默认)
- /var/log/mongodb-日志目录(默认)
我们可以通过在/etc/mongodb.conf文件中设置以下参数来自定义以上目录。
- storage.dbPath-指定新的数据目录路径
- systemLog.path-指定新的日志文件路径
网友评论