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 <<EOFoperationProfiling:mode: all                               # 设置性能分析模式为记录所有操作slowOpThresholdMs: 1000                 # 定义操作执行超过1000毫秒时被认为是慢操作
systemLog:destination: file                            # 日志输出目的地设置为文件path: /mongodbData/node01/logs/mongod.log    # 指定日志文件的路径logAppend: true                              # 启用日志追加模式,新日志将追加到现有文件中verbosity: 1                                 # 日志详细级别设置为1logRotate: 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                        # 操作日志大小设置为500MBreplSetName: mongodbData                # 指定复制集名称EOF
echo "正在创建配置文件/mongodbData/node02/conf/mongod.conf  ..."cat > /mongodbData/node02/conf/mongod.conf <<EOFoperationProfiling:mode: all                               # 设置性能分析模式为记录所有操作slowOpThresholdMs: 1000                 # 定义操作执行超过1000毫秒时被认为是慢操作
systemLog:destination: file                            # 日志输出目的地设置为文件path: /mongodbData/node02/logs/mongod.log    # 指定日志文件的路径logAppend: true                              # 启用日志追加模式,新日志将追加到现有文件中verbosity: 1                                 # 日志详细级别设置为1logRotate: 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                        # 操作日志大小设置为500MBreplSetName: mongodbData                # 指定复制集名称EOFecho "正在创建配置文件/mongodbData/node03/conf/mongod.conf  ..."cat > /mongodbData/node03/conf/mongod.conf <<EOFoperationProfiling:mode: all                               # 设置性能分析模式为记录所有操作slowOpThresholdMs: 1000                 # 定义操作执行超过1000毫秒时被认为是慢操作
systemLog:destination: file                            # 日志输出目的地设置为文件path: /mongodbData/node03/logs/mongod.log    # 指定日志文件的路径logAppend: true                              # 启用日志追加模式,新日志将追加到现有文件中verbosity: 1                                 # 日志详细级别设置为1logRotate: 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                        # 操作日志大小设置为500MBreplSetName: mongodbData                # 指定复制集名称EOFecho "休眠几秒钟..."
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; doretries=$((retries+1))if [ $retries -eq $MAX_RETRIES ]; thenecho "超过最大重试次数,复制集可能未成功初始化。"exit 1fiecho "复制集尚未就绪,等待${RETRY_INTERVAL}秒后重试..."sleep $RETRY_INTERVAL
doneecho "复制集已成功初始化。"
echo "复制集已成功初始化。"
echo "复制集已成功初始化。"# 从这里开始执行需要复制集就绪的其他操作,例如创建用户等。# 休眠几秒钟等待复制集初始化完成
echo "休眠几秒钟..."
sleep 10echo "创建管理员角色..."
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 5echo "检查管理员角色..."
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.confsleep 30# mongod -f /mongodbData/node01/conf/mongod.conf
# mongod -f /mongodbData/node02/conf/mongod.conf
# mongod -f /mongodbData/node03/conf/mongod.confecho "部署结束。"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渲染效果图有哪几种分类?效果图为什么用云渲染更快

云渲染利用了集群化的云端服务器资源&#xff0c;通过并行计算充分发挥了高性能硬件的优势&#xff0c;显著提升了渲染的速度。这一技术特别适用于处理规模庞大或细节丰富的渲染任务&#xff0c;在缩短项目完成时间方面表现卓越。无论是用于为建筑提供精确的可视化效果图&#…

【Python Scrapy】分布式爬虫利器

在当今信息爆炸的时代&#xff0c;获取大规模数据对于许多应用至关重要。而分布式爬虫作为一种强大的工具&#xff0c;在处理大量数据采集和高效爬取方面展现了卓越的能力。 本文将深入探讨分布式爬虫的实际应用场景&#xff0c;通过代码示例演示其在提升爬取效率、保障系统稳定…

K8s Deployment挂载ConfigMap权限设置

目录 样例 1. 样例 …… volumes: - configMap:defaultMode: 420name: ${Existed_configmap_name} …… 其中“defaultMode: 420”是设置权限的 2. 解析 在K8s&#xff08;Kubernetes&#xff09;中&#xff0c;defaultMode是用来设置Configmap挂载后的文件权限&#xff0…

【工作记录】AQS学习笔记

简介 在Java中&#xff0c;AbstractQueuedSynchronizer&#xff08;AQS&#xff09;是Java并发包(java.util.concurrent.locks)中一个用于构建锁和同步器框架的基础类。提供了一种实现阻塞锁和其他同步组件的底层机制。 基本原理概述 它的核心原理包括以下关键点&#xff1a…

C++知识点总结(17):贪心算法

贪心算法 一、文件操作1. 加头文件2. 加函数3. 写输入 二、贪心算法1. 概念2. 洛谷P2240 最多的金币2.1 审题2.2 解题思路2.3 参考答案 3. 洛谷P2240反向3.1 审题3.2 参考答案 4. 贪心的资本家4.1 审题4.2 参考答案 一、文件操作 1. 加头文件 #include <cstdio>cstdio …

牛刀小试 - C++ 学生信息管理系统

参考文档&#xff1a; C实现&#xff1a;学生管理系统&#xff08;详细解析&#xff09; 关于switch中的default里面的break是否可以省略这件事 需求要求&#xff1a; &#xff08;1&#xff09;增加记录 &#xff08;2&#xff09;查找记录 &#xff08;3&#xff09;删除…

FFmpeg进阶-给视频添加马赛克效果

很多时候为了隐藏视频中的敏感信息如人脸、身份证号、车牌号等,我们会采用马赛克算法对视频帧中的一部分内容进行处理。这里介绍一下如何采用FFmpeg实现马赛克效果。 马赛克效果算法的原理如下: 1.分块处理:首先将图像划分为多个小块或区域 2.像素替换:对于每个小块,算法会将…

【Windows11】内存使用率只有总内存容量的一半

硬件配置&#xff1a;2根16G的内存条&#xff08;金百达DDR4 3600, 海力士颗粒&#xff0c;灯条刃&#xff09;&#xff0c;插在2和4通道上 系统配置&#xff1a;windows11 问题描述&#xff0c;我和这位网友的问题一模一样&#xff1a; 系统32G内存&#xff0c;开机完全识别&…

实习日志17

1.测试公司服务器 1.1.太卡了&#xff0c;点一下卡半天 上传项目源码和文件&#xff1a; 将活字格项目源码和所有相关文件上传到服务器的指定目录。可以使用向日葵远程控制或者版本控制系统来进行文件上传。 重新配置活字格项目&#xff1a; 根据服务器环境&#xff0c;需要对…

Java 学习和实践笔记(14):用表格来理解类、对象、属性以及动作(方法)很容易

OOP :面向对象编程&#xff0c;object oriented programming. 用表格就可以很好地理解类、对象、属性、以及动作这些概念。 一个表&#xff08;结构&#xff09;就对应一个类&#xff08;结构&#xff09;。所以凡叫什么类&#xff0c;自己就在心里把它叫什么表。反过来&…

设计模式-创建型模式-简单工厂模式

0 引言 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;&#xff1a;定义一个工厂类&#xff0c;它可以根据参数的不同返回不同类的实例&#xff0c;被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态&#xff08;static&#xf…

vue 非父子通信-event bus 事件总线

1.作用 非父子组件之间&#xff0c;进行简易消息传递。(复杂场景→ Vuex) 2.步骤 创建一个都能访问的事件总线 &#xff08;空Vue实例&#xff09; import Vue from vue const Bus new Vue() export default Bus A组件&#xff08;接受方&#xff09;&#xff0c;监听Bus的…

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题 一、网络流模型1. 概述2. 可行流3. 增广链 二、示例1. 最大流问题2. Alternate Formulation&#xff1a;最小截量问题 三、Ford-Fulkerson 算法1. 导入库2. 初始化残差图3. 定义查找增广路径4. 定义循环5. 程序运行…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…

揭秘 LLMs 时代向量数据库的 3 大实用场景

过去一年&#xff0c;ChatGPT 和其他大语言模型&#xff08;LLMs&#xff09;的爆火也带动了向量数据库的发展。 许多用户在搭建检索增强生成&#xff08;RAG&#xff09;系统过程中选择了使用向量数据库 Zilliz Cloud &#xff0c;但 Zilliz Cloud 的功能不止于此&#xff0c;…

Git如何使用 五分钟快速入门

Git如何使用 五分钟快速入门 Git是一个分布式版本控制系统&#xff0c;它可以帮助开发人员跟踪和管理项目的代码变更。与传统的集中式版本控制系统&#xff08;如SVN&#xff09;不同&#xff0c;Git允许开发人员在本地存储完整的代码仓库&#xff0c;并且可以独立地进行代码修…

GEE数据更新——MODIS数据LST地表温度计算案例MODIS/006/ MOD11A1 已弃用并且没有新数据。请改用MODIS/061/ MOD11A1

问题 为什么我无法在下面给出的代码中下载 2024 年的数据?看起来有效期到 2022 年 11 月。你能帮我吗? 差异 MODIS/006/ MOD11A1和MODIS/061/ MOD11A1是两个不同的MODIS地表温度数据集。它们之间的差异主要体现在数据处理方法和时间范围上。目前GEE中已经没有前者的数据。…

《英伟达-本地AI》--NVIDIA Chat with RTX-本机部署

阿丹&#xff1a; 突然发现公司给配置的电脑是NVIDIA RTX 4060的显卡&#xff0c;这不搞一搞本地部署的大模型玩一玩&#xff1f;&#xff1f;&#xff1f; 从0-》1记录一下本地部署的全过程。 本地模型下载地址&#xff1a; Build a Custom LLM with Chat With RTX | NVIDIA…

虚拟机安装Centos7迷你版

虚拟机安装Centos7迷你版 迷你版较常规版精简了很多功能&#xff0c;所以体积也小了很多&#xff0c;喜欢自定义安装的可以选择迷你版 参考文章&#xff1a; VirtualBox虚拟机安装Centos7详细教程图解 网卡配置参考文章 下载Centos迷你版镜像 安装镜像 下载镜像 阿里云Cen…

Python 安装和使用的IDE

安装 安装 Anaconda (包较大), 包含了一些库安装 Miniconda (包较小) 只和 python 打包, 没有其他的包, 用的时候需要自己安装 conda install pandaspython pythonipython 有更多的功能 ipythonjupyter jupyter notebookjupyterlab 可以去 github 查看 conda install -c…