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 "部署结束。"
相关推荐
敲上瘾31 分钟前
动静态库的制作与使用(Linux操作系统)
linux·运维·服务器·c++·系统架构·库文件·动静态库
贾贾20237 小时前
配电自动化系统“三区四层”数字化架构
运维·科技·架构·自动化·能源·制造·智能硬件
远方 hi8 小时前
linux如何修改密码,要在CentOS 7系统中修改密码
linux·运维·服务器
时光书签9 小时前
Mongodb副本集群为什么选择3个节点不选择4个节点
数据库·mongodb·nosql
资讯分享周10 小时前
过年远控家里电脑打游戏,哪款远控软件最好用?
运维·服务器·电脑
chaodaibing10 小时前
记录一次k8s起不来的排查过程
运维·服务器·k8s
mcupro10 小时前
提供一种刷新X410内部EMMC存储器的方法
linux·运维·服务器
不知 不知11 小时前
最新-CentOS 7 基于1 Panel面板安装 JumpServer 堡垒机
linux·运维·服务器·centos
BUG 40411 小时前
Linux--运维
linux·运维·服务器
MXsoft61812 小时前
华为E9000刀箱服务器监控指标解读
大数据·运维