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

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

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

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

按照下面流程操作

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

然后 vi打开

vi   mongodb4.4.27.sh

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

然后当前目录执行

sh   mongodb4.4.27.sh

下面是自动部署脚本代码

# 初始化变量
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 "部署结束。"

相关推荐

  1. docker快速安装节点和多点MongoDB副本

    2024-02-22 07:56:03       19 阅读
  2. Kafka节点部署

    2024-02-22 07:56:03       28 阅读
  3. OceanBase社区版手动部署副本群及OBProxy

    2024-02-22 07:56:03       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 07:56:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 07:56:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 07:56:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 07:56:03       18 阅读

热门阅读

  1. http缓存?强制缓存和协商缓存?

    2024-02-22 07:56:03       27 阅读
  2. 利用System.Web.HttpRuntime.Cache制作缓存工具类

    2024-02-22 07:56:03       31 阅读
  3. 神经网络量化

    2024-02-22 07:56:03       29 阅读
  4. C语言K&R圣经笔记 8.1文件描述符 8.2低级IO

    2024-02-22 07:56:03       27 阅读
  5. Gson 库的使用

    2024-02-22 07:56:03       24 阅读
  6. Linux常见命令 | 文件传输命令scp

    2024-02-22 07:56:03       26 阅读
  7. [opencvsharp]将Mat转float数组

    2024-02-22 07:56:03       30 阅读
  8. CSS总结

    CSS总结

    2024-02-22 07:56:03      28 阅读
  9. scss导出颜色变量为空对象

    2024-02-22 07:56:03       28 阅读
  10. 事件流 事件委托

    2024-02-22 07:56:03       33 阅读
  11. Vue中v-model的原理

    2024-02-22 07:56:03       26 阅读