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 "部署结束。"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/400219.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十六进制数

1.做一个收电费程序&#xff0c;要求输入使用的电的度数&#xff08;整数&#xff09;以及电费单价&#xff08;实数&#xff09;&#xff0c;输出总的用电费用。 2.提示并输入一个小写字母数据&#xff0c;输出其对应的ASCII值&#xff0c;以及该小写字母对应的大写字母。 3.提…

软件测试工程师linux学习之系统层面相关命令总结

1 linux系统重启和关机的命令 重启命令&#xff1a;reboot 关机命令&#xff1a;shutdown 这两个命令一般很少用到&#xff0c;我们了解即可。 2 查看日志信息命令 什么是日志&#xff0c;日志就是一个一个普通的文本文件&#xff0c;文件里面记录的是软件运行过程中的信息…

市场复盘总结 20240221

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 33% 最常用…

搜维尔科技:用于运动科学的 OptiTrack,范围标记、步态捕捉!

OptiTrack 系统提供世界领先的测量精度和简单易用的工作流程&#xff0c;为研究人员和生物力学师的研究提供理想的 3D 跟踪数据。 对所有主要数字测力台、EMG 和模拟设备的本机即插即用支持为研究人员提供了在 Visual3D、MotionMonitor、MATLAB 和其他第三方生物力学软件包中进…

MySQL数据库基础(十二):子查询(三步走)

文章目录 子查询&#xff08;三步走&#xff09; 一、子查询&#xff08;嵌套查询&#xff09;的介绍 二、子查询的使用 三、总结 子查询&#xff08;三步走&#xff09; 一、子查询&#xff08;嵌套查询&#xff09;的介绍 在一个 select 语句中,嵌入了另外一个 select …

如何使用Coded UI Test对Webpage进行自动化测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

2024 年了,如何 0 基础开始学习 Vue ?

最近 5 个月&#xff0c;我都在忙着构建我的第一开源项目 HexoPress&#xff0c;这个项目是使用 Electron Vue 3 TypeScript 等技术实现的&#xff0c;一方面&#xff0c;我真的很需要一款合自己心意的博客编辑器&#xff0c;另一方面&#xff0c;我也是真心想学习 Electron …

App Inventor 2 Activity启动器技巧:如何查看并启动其他App

App包名和类名的查看 由 App Inventor 2 创建的应用要弄清包名和类名&#xff0c;可通过下载其应用程序的源代码&#xff0c;然后使用文件资源管理器或解压缩程序解压 .aia源文件&#xff08;文件的扩展名修改成.zip 或.rar&#xff0c;然后解压&#xff09;&#xff0c;在解压…

Redis面试题及核心知识点讲解

redis是单线程还是多线程&#xff1f; redis是单线程的&#xff0c;主要是指网络I/O线程。Redis的持久化&#xff0c;集群同步等操作&#xff0c;则由另外的线程来执行。 2 . redis是单线程&#xff0c;为什么处理这么快&#xff1f; Redis的大部分操作都是在内存中完成。单线…

电脑进水无法开机怎么办 电脑进水开不了机的解决方法

意外总是会不定时打破你的计划&#xff0c;电脑这类电器最怕遇到的除了火还有水&#xff0c;设备进水会导致数据丢失&#xff0c;那么我们遇到电脑进水怎么办&#xff1f;进水之后不正确处理也会引起很多不必要的麻烦. 解决办法 第一步&#xff1a;关机 如果您的电脑是在开…

山西电力市场日前价格预测【2024-02-22】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-22&#xff09;山西电力市场全天平均日前电价为441.87元/MWh。其中&#xff0c;最高日前电价为680.73元/MWh&#xff0c;预计出现在18:45。最低日前电价为352.02元/MWh&#xff0c;预计…

【git 使用】git 中head、工作树、和索引分别是什么,有什么关系和区别

HEAD 定义&#xff1a;HEAD 是指向当前所在分支&#xff08;或者是某个特定的提交&#xff09;的指针&#xff0c;它表示当前工作目录正在处于哪个提交或分支上。作用&#xff1a;HEAD 指示了当前工作目录的状态&#xff0c;可以通过 HEAD 来确定当前处于哪个分支上&#xff0…

正交匹配追踪算法(Orthogonal Matching Pursuit)实现过程及Python模拟

正交匹配追踪&#xff08;Orthogonal Matching Pursuit&#xff0c;OMP&#xff09;是一种用于寻找稀疏信号的贪婪算法&#xff0c;用于求解压缩感知问题中的稀疏近似问题。在压缩感知的背景下&#xff0c;通常我们有一个欠定的线性系统Ax y&#xff0c;其中A是一个已知的测量…

IDEA实现ssh远程连接本地Linux服务器

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

IAR推出新版IAR Embedded Workbench for Arm功能安全版,该版本配备经过认证的静态代码分析功能

瑞典乌普萨拉&#xff0c;2024年2月20日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR宣布&#xff1a;推出其旗舰产品IAR Embedded Workbench for Arm功能安全版的最新版本9.50.3。此次发布进一步加强了IAR支持开发人员创建安全、可靠和符合标准的嵌入式应用程序的承诺&…

回归分析中的异方差性

在简单线性回归或多元线性回归中&#xff0c;我们对误差项做了一些基本假设。 简单线性回归&#xff1a; 多元线性回归&#xff1a; 假设条件&#xff1a; 1.误差均值为零 2.误差具有恒定方差 3.误差不相关 4.误差呈正态分布 第2个假设称为同方差性&#xff0c;因此&…

QML | 信号和信号处理器特性

信号和信号处理器特性 很多时候,应用程序的用户界面组件需要相互通信。例如,一个按钮需要知道用户是否进行了单击:当用户单击后,它可能会更改颜色来指示它状态的改变,或者执行一些逻辑代码实现一定的功能。同Qt一样,QML包含了相似的信号和信号处理器机制。 信号是发出事件…

逻辑回归为什么使用交叉熵而不用均方差?

逻辑回归为什么使用交叉熵而不用均方差&#xff1f;或者说逻辑回归的损失函数为什么不用最小二乘&#xff1f; 下面主要从两个角度进行阐述&#xff1a; 从逻辑回归的角度出发&#xff0c;逻辑回归的预测值是一个概率&#xff0c;而交叉熵又表示真实概率分布与预测概率分布的…

(C++) 详解内存地址空间

详解内存空间 0. 概述 一个C/C 程序&#xff0c;编译之后&#xff0c;形成的程序&#xff0c;在执行期间&#xff0c;内存中不仅存在一块区域用于存放代码&#xff0c;还有一些其他的区域用于使用&#xff0c;本节会详解C/C内部所使用的内存地址空间&#xff0c;关于各内存的…

每日OJ题_二叉树dfs③_力扣814. 二叉树剪枝

目录 力扣814. 二叉树剪枝 解析代码 力扣814. 二叉树剪枝 814. 二叉树剪枝 难度 中等 给你二叉树的根结点 root &#xff0c;此外树的每个结点的值要么是 0 &#xff0c;要么是 1 。 返回移除了所有不包含 1 的子树的原二叉树。 节点 node 的子树为 node 本身加上所有 n…