2024年单服务器部署Mongodb三节点副本集自动化部署脚本

该脚本是为了方便自己学习和工作中部署服务器从而节省时间进行编写,目前能正常部署,创建集群,管理员用户,以及连接都没问题,但是没有开启验证,后续找时间补充。

完整的教程请参考一下我写的技术文章。

2024年单服务器部署Mongodb三节点副本集保姆级教程_mongodb三节点部署-CSDN博客

按照下面流程操作

centos7.9 根目录创建一个sh目录,并创建 mongodb4.4.27.sh 文件

然后 vi打开

vi mongodb4.4.27.sh

将下面的脚本复制进去,再保存,

然后当前目录执行

sh mongodb4.4.27.sh

下面是自动部署脚本代码

bash 复制代码
# 初始化变量
RETRY_INTERVAL=5 # 检查间隔时间,单位为秒
MAX_RETRIES=30 # 最大重试次数


# 升级系统
echo "正在升级系统..."
yum update -y

# 安装必要的软件包
echo "正在安装必要的软件包..."
yum -y install gcc gcc-c++ openssl-devel zlib-devel openssl-devel pcre-devel bzip2* make

# 创建节点目录
echo "正在创建节点目录..."
mkdir -p /mongodbData/node01/{conf,data,logs}
mkdir -p /mongodbData/node02/{conf,data,logs}
mkdir -p /mongodbData/node03/{conf,data,logs}

# 进入 mongodbData 文件夹
cd /mongodbData

# 下载MongoDB并解压
echo "正在下载并安装数据库..."
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.27.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.27.tgz
mv mongodb-linux-x86_64-rhel70-4.4.27 /usr/local/share/mongodb

# 环境配置
echo "正在配置环境变量..."
echo 'export PATH=/usr/local/share/mongodb/bin:$PATH' >> /etc/profile
source /etc/profile

# 验证安装情况
mongo --version

# 创建配置文件
echo "正在创建配置文件/mongodbData/node01/conf/mongod.conf  ..."

cat > /mongodbData/node01/conf/mongod.conf <<EOF


operationProfiling:
    mode: all                               # 设置性能分析模式为记录所有操作
    slowOpThresholdMs: 1000                 # 定义操作执行超过1000毫秒时被认为是慢操作
systemLog:
    destination: file                            # 日志输出目的地设置为文件
    path: /mongodbData/node01/logs/mongod.log    # 指定日志文件的路径
    logAppend: true                              # 启用日志追加模式,新日志将追加到现有文件中
    verbosity: 1                                 # 日志详细级别设置为1
    logRotate: rename                            # 日志轮转策略设置为重命名旧文件
storage:
    dbPath: /mongodbData/node01/data         # 数据库文件存储路
    journal:
      enabled: true                          # 启用日志,以支持崩溃恢复
    wiredTiger:
      engineConfig:
        cacheSizeGB: 4                     # WiredTiger存储引擎的缓存大小设置为4GB
processManagement:
    fork: true                                       # 启用分叉模式运行MongoDB服务
    pidFilePath: /mongodbData/node01/mongod.pid      # 指定PID文件路径
net:
    bindIpAll: true                                  # 监听所有网络接口
    port: 27017                                      # MongoDB服务监听的端口
replication:
    oplogSizeMB: 500                        # 操作日志大小设置为500MB
    replSetName: mongodbData                # 指定复制集名称




EOF
echo "正在创建配置文件/mongodbData/node02/conf/mongod.conf  ..."

cat > /mongodbData/node02/conf/mongod.conf <<EOF



operationProfiling:
    mode: all                               # 设置性能分析模式为记录所有操作
    slowOpThresholdMs: 1000                 # 定义操作执行超过1000毫秒时被认为是慢操作
systemLog:
    destination: file                            # 日志输出目的地设置为文件
    path: /mongodbData/node02/logs/mongod.log    # 指定日志文件的路径
    logAppend: true                              # 启用日志追加模式,新日志将追加到现有文件中
    verbosity: 1                                 # 日志详细级别设置为1
    logRotate: rename                            # 日志轮转策略设置为重命名旧文件
storage:
    dbPath: /mongodbData/node02/data         # 数据库文件存储路
    journal:
      enabled: true                          # 启用日志,以支持崩溃恢复
    wiredTiger:
      engineConfig:
        cacheSizeGB: 4                     # WiredTiger存储引擎的缓存大小设置为4GB
processManagement:
    fork: true                                       # 启用分叉模式运行MongoDB服务
    pidFilePath: /mongodbData/node02/mongod.pid      # 指定PID文件路径
net:
    bindIpAll: true                                  # 监听所有网络接口
    port: 27018                                      # MongoDB服务监听的端口
replication:
    oplogSizeMB: 500                        # 操作日志大小设置为500MB
    replSetName: mongodbData                # 指定复制集名称


EOF

echo "正在创建配置文件/mongodbData/node03/conf/mongod.conf  ..."

cat > /mongodbData/node03/conf/mongod.conf <<EOF


operationProfiling:
    mode: all                               # 设置性能分析模式为记录所有操作
    slowOpThresholdMs: 1000                 # 定义操作执行超过1000毫秒时被认为是慢操作
systemLog:
    destination: file                            # 日志输出目的地设置为文件
    path: /mongodbData/node03/logs/mongod.log    # 指定日志文件的路径
    logAppend: true                              # 启用日志追加模式,新日志将追加到现有文件中
    verbosity: 1                                 # 日志详细级别设置为1
    logRotate: rename                            # 日志轮转策略设置为重命名旧文件
storage:
    dbPath: /mongodbData/node03/data         # 数据库文件存储路
    journal:
      enabled: true                          # 启用日志,以支持崩溃恢复
processManagement:
    fork: true                                       # 启用分叉模式运行MongoDB服务
    pidFilePath: /mongodbData/node03/mongod.pid      # 指定PID文件路径
net:
    bindIpAll: true                                  # 监听所有网络接口
    port: 27019                                      # MongoDB服务监听的端口
replication:
    oplogSizeMB: 500                        # 操作日志大小设置为500MB
    replSetName: mongodbData                # 指定复制集名称

EOF


echo "休眠几秒钟..."
sleep 10




# 启动MongoDB实例
echo "正在启动MongoDB实例..."
mongod -f /mongodbData/node01/conf/mongod.conf && mongod -f /mongodbData/node02/conf/mongod.conf && mongod -f /mongodbData/node03/conf/mongod.conf




# 配置MongoDB集群
echo "正在配置MongoDB集群..."
mongo --eval "rs.initiate({_id: 'mongodbData', members: [{_id: 0, host: '127.0.0.1:27017'}, {_id: 1, host: '127.0.0.1:27018'}, {_id: 2, host: '127.0.0.1:27019', arbiterOnly: true}]});"

echo "休眠几秒钟..."
sleep 15


# 验证集群状态
echo "正在验证集群状态..."
mongo --eval "rs.status();"

echo "休眠几秒钟..."
sleep 10


# 初始化复制集(如果尚未初始化)
mongo --eval "rs.initiate()"



# 检查复制集状态的函数
check_replica_set_status() {
  echo "检查复制集状态..."
  mongo --quiet --eval "rs.status()" | grep '"ok" : 1'
  return $?
}

# 初始化重试次数计数器
retries=0

# 循环检查复制集状态
until check_replica_set_status; do
  retries=$((retries+1))
  if [ $retries -eq $MAX_RETRIES ]; then
    echo "超过最大重试次数,复制集可能未成功初始化。"
    exit 1
  fi
  echo "复制集尚未就绪,等待${RETRY_INTERVAL}秒后重试..."
  sleep $RETRY_INTERVAL
done

echo "复制集已成功初始化。"
echo "复制集已成功初始化。"
echo "复制集已成功初始化。"







# 从这里开始执行需要复制集就绪的其他操作,例如创建用户等。




# 休眠几秒钟等待复制集初始化完成
echo "休眠几秒钟..."
sleep 10



echo "创建管理员角色..."
echo "创建管理员角色..."
echo "创建管理员角色..."


mongo --port 27017 admin --eval "db.createUser({user:'root',pwd:'root_jY_2021',roles:[{role:'readWriteAnyDatabase',db:'admin'},{role:'dbAdminAnyDatabase',db:'admin'},{role:'userAdminAnyDatabase',db:'admin'}]}); db.createUser({user:'suroot',pwd:'suroot_jY_2021',roles:[{role:'clusterAdmin',db:'admin'},{role:'clusterManager',db:'admin'},{role:'clusterMonitor',db:'admin'}]}); "







echo "休眠几秒钟..."
sleep 5



echo "检查管理员角色..."
echo "检查管理员角色..."
echo "检查管理员角色..."





mongo --port 27017 admin --eval "db.auth('root', 'root_jY_2021'); db.system.users.find(); "

echo "休眠几秒钟..."
sleep 10




# 关闭仲裁节点 (27019)
echo "正在关闭仲裁节点(27019)..."
mongo --port 27019 admin --eval "db.shutdownServer()"


echo "休眠几秒钟..."
sleep 10




# 关闭从节点 (27018)
echo "正在关闭从节点(27018)..."
mongo --port 27018 admin --eval " db.auth('suroot', 'suroot_jY_2021'); db.shutdownServer()"

echo "休眠几秒钟..."
sleep 30




# 最后关闭主节点 (27017)
echo "正在关闭主节点(27017)..."
mongo --port 27017 admin --eval "db.auth('suroot', 'suroot_jY_2021');  db.shutdownServer()"


echo "休眠几秒钟..."
sleep 30



# 生成keyFile
echo "正在生成keyFile并分发..."
openssl rand -base64 756 > /mongodbData/node01/conf/access.key
chmod 400 /mongodbData/node01/conf/access.key
cp /mongodbData/node01/conf/access.key /mongodbData/node02/conf/
cp /mongodbData/node01/conf/access.key /mongodbData/node03/conf/

# 再次启动MongoDB实例以应用安全设置
mongod -f /mongodbData/node01/conf/mongod.conf && mongod -f /mongodbData/node02/conf/mongod.conf && mongod -f /mongodbData/node03/conf/mongod.conf

sleep 30



# mongod -f /mongodbData/node01/conf/mongod.conf
# mongod -f /mongodbData/node02/conf/mongod.conf
# mongod -f /mongodbData/node03/conf/mongod.conf

echo "部署结束。"
相关推荐
纷飞梦雪2 小时前
使用chroot预安装软件到ubuntu22中
linux·运维·ubuntu
jiarg6 小时前
linux 内网下载 yum 依赖问题
linux·运维·服务器
yi个名字7 小时前
Linux第一课
linux·运维·服务器
菜鸟xy..7 小时前
linux 基本命令教程,巡查脚本,kali镜像
linux·运维·服务器·kali镜像·巡查脚本·nmtui
暴躁的小胡!!!7 小时前
Linux权限维持之协议后门(七)
linux·运维·服务器·网络·安全
SuperCreators7 小时前
DeepSeek与浏览器自动化AI Agent构建指南
人工智能·自动化
安 当 加 密7 小时前
中小企业Radius认证服务器的低成本高安全解决方案
运维·服务器·安全
ChinaRainbowSea8 小时前
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
java·linux·运维·服务器·docker·架构
Hellc0079 小时前
Docker 部署 MongoDB 并持久化数据
mongodb·docker·容器
LKAI.9 小时前
MongoDB用户管理和复制组
linux·数据库·mongodb