部署 MongoDB 副本集
TapData Enterprise 可部署在您的本地数据中心,适合对数据敏感性或网络隔离有严格要求的场景,可服务于构建实时数仓,实现实时数据交换,数据迁移等场景。TapData Community 是一个开源的数据集成平台,提供基础的数据同步和转换功能,可通过 Docker 一键部署,帮助您快速探索和实施数据集成项目。随着项目或企业发展,您可以平滑升级至 TapData Cloud 或 TapData Enterprise,以获得更多高级功能或服务支持。TapData Enterprise 与 TapData Community 在运行时,会将任务的必要配置、共享缓存等信息存储至 MongoDB 数据库中,为保障生产环境的高可用,在部署 TapData 前,需要完成 MongoDB 副本集的部署,本文将介绍具体的部署流程。
部署架构
推荐 MongoDB 为 4.0 及以上版本,本案例以 CentOS 7 平台为例,部署 1 主 2 从 的副本集:
角色 | IP | 服务 | 服务端口端口 |
---|---|---|---|
Primary Node(主节点) | 172.16.1.10 | mongod | 27017 |
Secondary Node(从节点) | 172.16.1.11 | mongod | 27017 |
Secondary Node(从节点) | 172.16.1.12 | mongod | 27017 |
操作步骤
为所有服务器依次执行下述命令,完成文件访问数、防火墙等系统参数设置。
ulimit -n 1024000
echo "* soft nofile 1024000" >> /etc/security/limits.conf
echo "* hard nofile 1024000" >> /etc/security/limits.conf
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0
sed -i "s/enforcing/disabled/g" /etc/selinux/config从 MongoDB 官网下载所需的安装包。
在所有服务器上,依次执行下述格式的解压并安装 MongoDB,本案例将以 4.4.28 版本为例演示流程。
# 解压文件,需更换为您真实的文件名称
tar zxvf mongodb-linux-x86_64-rhel70-4.4.28.tgz
# 将 MongoDB 的可执行文件复制到系统二进制目录中,完成软件安装
cp mongodb-linux-x86_64-rhel70-4.4.28/bin/* /usr/local/bin/在所有服务器上,依次执行下述命令创建数据目录和日志目录,完成授权操作。
# 数据目录
sudo mkdir -p /var/lib/mongo
sudo chown -R mongodb:mongodb /var/lib/mongo
# 日志目录
sudo mkdir -p /var/log/mongodb
sudo chown -R mongodb:mongodb /var/log/mongodb执行下述操作,完成密钥文件的生成,后续将用于节点间的认证。
在主节点所属设备上,执行下述命令安装 OpenSSL 并升密钥文件。
# 安装 OpenSSL
sudo yum install openssl -y
# 生成密钥文件至指定目录并授权
mkdir /etc/mongodb
openssl rand -base64 756 > /etc/mongodb/repl.key
chmod 400 /etc/mongodb/repl.key通过
scp
命令将其复制到另外两个节点的/etc/mongodb
目录中。
在所有服务器上的
/etc/mongodb
目录中,创建配置文件mongod.yml
,配置示例如下:systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
directoryPerDB: true
syncPeriodSecs: 60
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 8
journalCompressor: snappy
directoryForIndexes: false
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
net:
port: 27017
bindIp: 0.0.0.0
maxIncomingConnections: 20000
replication:
oplogSizeMB: 512000
replSetName: repl
security:
authorization: enabled
keyFile: /etc/mongodb/repl.key提示上述配置文件中,我们指定了日志文件、存储文件目录、服务端端口、认证等信息,其中,
cacheSizeGB
可设置为总内存的 30%。您也可以基于业务需求,增加或调整更多参数。关于参数的详细介绍,见 MongoDB 配置文件选项。在所有服务器上,执行下述命令启动 MongoDB 服务。
mongod -f /etc/mongodb/mongod.yml --fork
在主节点所属服务器上,执行下述命令完成副本集配置。
连接到 MongoDB 主节点。
mongo --host 127.0.0.1 --port 27017
初始化副本集。
rs.initiate({
_id : "repl",
members: [
{ _id: 0, host: "172.16.1.10:27017" },
{ _id: 1, host: "172.16.1.11:27017" },
{ _id: 2, host: "172.16.1.12:27017" }
]
})完成操作后,可使用
rs.status()
检查副本集状态,确保所有节点的状态正确(一个PRIMARY
和两个SECONDARY
)。创建 root 用户并设置密码。
use admin
db.createUser(
{
user: "root",
pwd: "Tap@123456",
roles: [
"root"
]
}
)
在所有服务器上,为 MongoDB 服务设置开机启动。
进入
/usr/lib/systemd/system
目录, 使用文本编辑器(如vim
)创建一个新的服务文件并命名为mongod.service
,将下述文件内容粘贴到文件中。# 确保 ExecStart 指向正确的 mongod 可执行文件和配置文件路径
[Unit]
Description=MongoDB Database Service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/mongod -f /etc/mongodb/mongod.yml
ExecStop=/usr/local/bin/mongod --shutdown --config /etc/mongodb/mongod.yml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target加载新的服务文件,并启用以实现开机启动:
sudo systemctl daemon-reload
sudo systemctl enable mongod.service(可选)在业务低峰期,重启机器并通过
systemctl status mongod.service
命令查看 MongoDB 服务是否正常启动。