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")