MongoDB 部署
安装
导入repo
sudo cat > /etc/yum.repos.d/mongodb-org-4.2.repo << EOF
[mongodb-org]
name=MongoDB Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7/
gpgcheck=0
enabled=1
EOF
安装
sudo yum install -y mongodb-org
配置
可以在 /etc/mongod.conf 中配置数据目录(storage.dbPath)和日志目录(systemLog.path)
- 默认数据目录:
/var/lib/mongo - 默认日志目录:
/var/log/mongodb
MongoDB 默认只允许访问 127.0.0.1,如果需要远程访问,配置 bindIp 为本机地址,比如 192.168.1.100 为本机地址,则配置 bindIp: 192.168.1.100 即可。
这里配置为 bindIpAll: true
SELinux
运行 getenforce,如果 SELinux 工作模式为 Enforcing,则需要为 MongoDB 制定策略
安装 checkpolicy
sudo yum install checkpolicy policycoreutils-python -y创建策略
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 默认的数据目录和端口,则需要进一步定制 Mongodb 的 SELinux 策略,具体参考官方文档。
开机启动 & 启动服务
sudo systemctl enable mongod && sudo systemctl start mongod
副本集
openssl rand -base64 756 > /etc/keyfile
chmod 400 /etc/keyfile
chown mongod /etc/keyfile
将 /etc/keyfile 拷贝到其他节点。
在所有 MongoDB 节点上执行命令:
cat >> /etc/mongod.conf << EOF
security:
keyFile: /etc/keyfile
replication:
replSetName: "rs0"
EOF
sudo systemctl restart mongod
在主节点终端中输入 mongo,进入命令行客户端,分别执行命令,并键入密码 Onemap.2020
rs.initiate( {
_id : "rs0",
members: [
{ _id: 1, host: "10.25.55.101:27017" },
{ _id: 2, host: "10.25.55.102:27017" },
{ _id: 3, host: "10.25.55.103:27017" }
]
})
db.getSiblingDB("admin").createUser(
{
user: "onemap_admin",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
db.getSiblingDB("admin").createUser(
{
"user" : "onemap_cluster_admin",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)
db.getSiblingDB("onemap").createUser(
{
"user" : "onemap_user",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "dbOwner", "db" : "onemap" } ]
}
)
在所有 MongoDB 节点上编辑 /etc/mongod.conf,打开认证。在 security 下添加 authorization: enabled
分别在各个节点终端中输入 mongo,进入命令行客户端,执行命令:rs.slaveOk()
卸载
停止服务
sudo systemctl stop mongod卸载服务
sudo yum erase $(rpm -qa | grep mongodb-org)删除目录
sudo rm -r /var/log/mongodb && sudo rm -r /var/lib/mongo