MongoDB安装

MongoDB 部署

安装

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

comments powered by Disqus