【MongoDB】一键搭建 MongoDB 3.4.9 复制集
2024-05-13 本文已影响0人
Bogon
为了确保MongoDB复制集的安全性,我们应该为它设置一个超管密码。
在初始化复制集时添加了设置超管密码的步骤:
#!/bin/bash
# 定义MongoDB版本和副本集名称
MONGO_VERSION="3.4.9"
REPLICA_SET_NAME="myReplicaSet"
# 定义副本集中的MongoDB服务器的主机名或IP地址
# 请替换以下IP地址或主机名为你的服务器的实际地址
MONGO_HOST1="mongodb1.example.com"
MONGO_HOST2="mongodb2.example.com"
MONGO_HOST3="mongodb3.example.com"
# MongoDB超管用户名和密码
MONGO_ADMIN_USER="admin"
MONGO_ADMIN_PASSWORD="yourStrongPassword"
# 安装MongoDB
echo "Installing MongoDB version $MONGO_VERSION..."
yum install -y mongodb-org-$MONGO_VERSION mongodb-org-server-$MONGO_VERSION mongodb-org-shell-$MONGO_VERSION --disablerepo=*
# 停止MongoDB服务
echo "Stopping MongoDB service..."
systemctl stop mongod
# 为每个MongoDB实例创建数据目录和日志目录
echo "Creating data and log directories..."
mkdir -p /data/db1 /data/db2 /data/db3
mkdir -p /var/log/mongodb1 /var/log/mongodb2 /var/log/mongodb3
# 为每个MongoDB实例配置mongod服务
echo "Configuring mongod services..."
cat <<EOF > /etc/systemd/system/mongod1.service
[Unit]
Description=MongoDB Server 1
After=network.target
[Service]
User=mongod
ExecStart=/usr/bin/mongod --replSet $REPLICA_SET_NAME --bindIp $MONGO_HOST1 --port 27017 --dbpath /data/db1 --logpath /var/log/mongodb1/mongod.log
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF > /etc/systemd/system/mongod2.service
[Unit]
Description=MongoDB Server 2
After=network.target
[Service]
User=mongod
ExecStart=/usr/bin/mongod --replSet $REPLICA_SET_NAME --bindIp $MONGO_HOST2 --port 27017 --dbpath /data/db2 --logpath /var/log/mongodb2/mongod.log
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF > /etc/systemd/system/mongod3.service
[Unit]
Description=MongoDB Server 3
After=network.target
[Service]
User=mongod
ExecStart=/usr/bin/mongod --replSet $REPLICA_SET_NAME --bindIp $MONGO_HOST3 --port 27017 --dbpath /data/db3 --logpath /var/log/mongodb3/mongod.log
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 设置适当的权限
chown -R mongod:mongod /data/db* /var/log/mongodb*
# 启动MongoDB服务
echo "Starting MongoDB services..."
systemctl daemon-reload
systemctl enable mongod1 mongod2 mongod3
systemctl start mongod1 mongod2 mongod3
# 初始化MongoDB复制集并设置超管用户
echo "Initializing MongoDB replica set and setting up admin user..."
mongo --host $MONGO_HOST1 --eval "rs.initiate({_id: '$REPLICA_SET_NAME', members: [{_id: 0, host: '$MONGO_HOST1:27017'}, {_id: 1, host: '$MONGO_HOST2:27017'}, {_id: 2, host: '$MONGO_HOST3:27017'}]}}"
# 确保复制集初始化完成
sleep 10
# 连接到MongoDB并添加超管用户
mongo --host $MONGO_HOST1 --eval "db.createUser({user: '$MONGO_ADMIN_USER', pwd: '$MONGO_ADMIN_PASSWORD', roles: [{role: 'root', db: 'admin'}]});"
echo "MongoDB replica set with version $MONGO_VERSION and admin user has been successfully set up!"
在这个脚本中,我们定义了一个MONGO_ADMIN_USER
和MONGO_ADMIN_PASSWORD
变量来存储超管的用户名和密码。在初始化复制集之后,我们使用mongo
命令行工具连接到MongoDB实例,并创建了一个具有root
角色的用户。
请确保替换MONGO_ADMIN_PASSWORD
为你自己的强密码,并在运行脚本之前确保所有主机名或IP地址都是正确的。
在运行此脚本之前,你需要确保MongoDB的相应版本已经在你的服务器上可用,或者你需要修改yum安装命令中的版本号以匹配你的实际情况。
运行脚本后,MongoDB复制集将被设置,并创建了一个具有root
角色的超管用户,你可以使用这个用户来管理你的MongoDB实例。