lamess / MongoDB安装及初始化

Created Wed, 20 Nov 2024 11:53:49 +0800 Modified Sat, 08 Feb 2025 15:37:36 +0800

MySQL安装及初始化

说明

本文基于MongoDB 8.0版本操作。内容来源于官方文档及网络资料。部署过程基于openEuler操作系统演示。

软件获取

部署前确认操作系统架构信息。

cat /etc/os-release
uname -a

官方发布页面选定与操作系统适配的版本进行下载,也可以从存档版本下载页面中找到过去的版本进行下载使用。

实际部署时使用tar打包的程序,但官方提供的tar包内不包含配置文件样例,因此下载时需要同时下载rpm包和tar包,先在虚拟环境部署rpm包,部署后能够获取到标准的配置文件,保存此配置文件用于生产环境上使用tar包的安装部署。

此外还需要获取MongoDB Command Line Database Tools,以提供基本的mongo操作命令行。同样下载操作系统对应版本的tgz包使用。
之后再获取mongosh命令的安装包。官方从json文件中提供了各版本操作系统的下载地址,先获取到此json文件,打开文件筛选适配部署环境的CPU架构以及OpenSSL环境下的版本文件。

首先在虚拟环境,部署一次rpm包的mongodb,以此获取到标准的配置文件。

dnf localinstall mongodb-org-server-8.0.3-1.el9.x86_64.rpm

部署成功后会生成配置文件/etc/mongod.conf。读取配置文件信息并保存,用于生产环境部署。以下示例为8.0.3版本的mongodb的配置文件,其它版本的标准配置文件均可以通过此方法获取。

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo

# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

目录设计

按实际部署要求设计部署目录:

  • 安装目录:/opt/software/mongodb
  • 数据目录:/opt/data/mongodb
  • 日志目录:/opt/data/logs/mongodb
  • 命令行工具安装目录:/opt/software/mongodbTools
  • mongosh安装目录:/opt/software/mongosh

软件部署

创建目录。

mkdir -p /opt/software /opt/data/mongodb /opt/data/logs/mongodb

上传并解压软件包,建立软链接,写入环境变量。

tar -zxf mongodb-linux-x86_64-rhel93-8.0.3.tgz -C /opt/software
tar -zxf mongodb-database-tools-rhel93-x86_64-100.10.0.tgz -C /opt/software
tar -zxf mongosh-2.3.3-linux-x64.tgz -C /opt/software
cd /opt/software
ln -s mongodb-linux-x86_64-rhel93-8.0.3 mongodb
ln -s mongodb-database-tools-rhel93-x86_64-100.10.0 mongodbTools
ln -s mongosh-2.3.3-linux-x64 mongosh
echo 'export PATH=$PATH:/opt/software/mongodb/bin' >> /etc/profile
echo 'export PATH=$PATH:/opt/software/mongodbTools/bin' >> /etc/profile
echo 'export PATH=$PATH:/opt/software/mongosh/bin' >> /etc/profile
source /etc/profile

编写配置文件,并设置security.authorization

yq -i '
    .systemLog.destination="file" |
    .systemLog.logAppend=true |
    .systemLog.path="/opt/data/logs/mongodb/mongod.log" | 
    .storage.dbPath="/opt/data/mongodb" |
    .processManagement.fork=true |
    .processManagement.timeZoneInfo="/usr/share/zoneinfo" |
    .net.bindIp="0.0.0.0" |
    .net.port=27017 |
    .security.authorization="enabled" 
' /opt/software/mongodb/mongod.conf

编写systemd服务。

cat > /usr/lib/systemd/system/mongod.service << EOF
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network-online.target
Wants=network-online.target

[Service]
Environment="OPTIONS=-f /opt/software/mongodb/mongod.conf"
Environment="MONGODB_CONFIG_OVERRIDE_NOFORK=1"
Environment="GLIBC_TUNABLES=glibc.pthread.rseq=0"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/opt/software/mongodb/bin/mongod \$OPTIONS
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for mongod as specified in
# https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mongod --now

权限初始化

登录mongodb,进入admin数据库,建立管理员用户。

mongosh
> use admin
> db.createUser( { user: "admin", pwd: "Changeme_123", roles: [ { role: "clusterAdmin", db: "admin" } , { role: "userAdminAnyDatabase", db: "admin" } , { role: "dbAdminAnyDatabase", db: "admin" } , { role: "readWriteAnyDatabase", db: "admin" } ] } )

退出mongosh后,重新登录,此时便要求进行鉴权。首先进入admin,然后进行鉴权即可。

use admin
db.auth("admin","Changeme_123")  

之后进入业务数据库,并建立业务账户。按实际需要建立用户信息即可。

use project
db.createUser( { user: "username", pwd: "password", roles: [ { role: "readWrite", db: "project" } ] } )

副本集配置

配置前,应在每个服务器上完成前面的安装部署过程。

在主节点服务器上创建密钥文件,并将生成的密钥文件拷贝至其它服务器中。

openssl rand -base64 756 > /opt/software/mongodb/mongoKey
chmod 400 /opt/software/mongodb/mongoKey
scp /opt/software/mongodb/mongoKey root@192.168.1.102:/opt/software/mongodb/

提前设计oplog大小,建议使用5%到10%存储空间。可以使用以下命令得到当前数据存储路径的空间大小的10%数值(MB)。

df -BM /opt/data/ | awk '{print $2}' | head -2 | tail -n 1 | tr -d "M" | awk '{print int($1/20)}'

之后修改配置文件,增加replication参数信息。在replication.oplogSizeMB参数中填写设计好的oplog大小。

yq -i '
    .security.keyFile="/opt/software/mongodb/mongoKey" |
    .replication.oplogSizeMB=51200 |
    .replication.replSetName="replica"
' /opt/software/mongodb/mongod.conf

之后重启mongodb,进入副本集模式。

systemctl restart mongod

重新登入mongodb,建立副本集。先将本机主机名填写到副本集信息中,再建立只有单节点的副本集。此处必须使用主机名而非IP地址进行配置。

mongosh
> use admin
> db.auth("admin","Changeme_123")  
> configuration = { _id: "replica", version: 1, members: [ { _id: 0, host : "Server0:27017" } ] }
> rs.initiate(configuration)

如此则已建立一个节点的副本集。之后将其它节点添加进副本集即可。

> rs.add("Server1:27017")

也可以按需增加仲裁节点。

> rs.addArb("Server2:27017")