当前位置:   article > 正文

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

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

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

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

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

按照下面流程操作

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

然后 vi打开

vi   mongodb4.4.27.sh

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

然后当前目录执行

sh   mongodb4.4.27.sh

下面是自动部署脚本代码

  1. # 初始化变量
  2. RETRY_INTERVAL=5 # 检查间隔时间,单位为秒
  3. MAX_RETRIES=30 # 最大重试次数
  4. # 升级系统
  5. echo "正在升级系统..."
  6. yum update -y
  7. # 安装必要的软件包
  8. echo "正在安装必要的软件包..."
  9. yum -y install gcc gcc-c++ openssl-devel zlib-devel openssl-devel pcre-devel bzip2* make
  10. # 创建节点目录
  11. echo "正在创建节点目录..."
  12. mkdir -p /mongodbData/node01/{conf,data,logs}
  13. mkdir -p /mongodbData/node02/{conf,data,logs}
  14. mkdir -p /mongodbData/node03/{conf,data,logs}
  15. # 进入 mongodbData 文件夹
  16. cd /mongodbData
  17. # 下载MongoDB并解压
  18. echo "正在下载并安装数据库..."
  19. wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.27.tgz
  20. tar -zxvf mongodb-linux-x86_64-rhel70-4.4.27.tgz
  21. mv mongodb-linux-x86_64-rhel70-4.4.27 /usr/local/share/mongodb
  22. # 环境配置
  23. echo "正在配置环境变量..."
  24. echo 'export PATH=/usr/local/share/mongodb/bin:$PATH' >> /etc/profile
  25. source /etc/profile
  26. # 验证安装情况
  27. mongo --version
  28. # 创建配置文件
  29. echo "正在创建配置文件/mongodbData/node01/conf/mongod.conf ..."
  30. cat > /mongodbData/node01/conf/mongod.conf <<EOF
  31. operationProfiling:
  32. mode: all # 设置性能分析模式为记录所有操作
  33. slowOpThresholdMs: 1000 # 定义操作执行超过1000毫秒时被认为是慢操作
  34. systemLog:
  35. destination: file # 日志输出目的地设置为文件
  36. path: /mongodbData/node01/logs/mongod.log # 指定日志文件的路径
  37. logAppend: true # 启用日志追加模式,新日志将追加到现有文件中
  38. verbosity: 1 # 日志详细级别设置为1
  39. logRotate: rename # 日志轮转策略设置为重命名旧文件
  40. storage:
  41. dbPath: /mongodbData/node01/data # 数据库文件存储路
  42. journal:
  43. enabled: true # 启用日志,以支持崩溃恢复
  44. wiredTiger:
  45. engineConfig:
  46. cacheSizeGB: 4 # WiredTiger存储引擎的缓存大小设置为4GB
  47. processManagement:
  48. fork: true # 启用分叉模式运行MongoDB服务
  49. pidFilePath: /mongodbData/node01/mongod.pid # 指定PID文件路径
  50. net:
  51. bindIpAll: true # 监听所有网络接口
  52. port: 27017 # MongoDB服务监听的端口
  53. replication:
  54. oplogSizeMB: 500 # 操作日志大小设置为500MB
  55. replSetName: mongodbData # 指定复制集名称
  56. EOF
  57. echo "正在创建配置文件/mongodbData/node02/conf/mongod.conf ..."
  58. cat > /mongodbData/node02/conf/mongod.conf <<EOF
  59. operationProfiling:
  60. mode: all # 设置性能分析模式为记录所有操作
  61. slowOpThresholdMs: 1000 # 定义操作执行超过1000毫秒时被认为是慢操作
  62. systemLog:
  63. destination: file # 日志输出目的地设置为文件
  64. path: /mongodbData/node02/logs/mongod.log # 指定日志文件的路径
  65. logAppend: true # 启用日志追加模式,新日志将追加到现有文件中
  66. verbosity: 1 # 日志详细级别设置为1
  67. logRotate: rename # 日志轮转策略设置为重命名旧文件
  68. storage:
  69. dbPath: /mongodbData/node02/data # 数据库文件存储路
  70. journal:
  71. enabled: true # 启用日志,以支持崩溃恢复
  72. wiredTiger:
  73. engineConfig:
  74. cacheSizeGB: 4 # WiredTiger存储引擎的缓存大小设置为4GB
  75. processManagement:
  76. fork: true # 启用分叉模式运行MongoDB服务
  77. pidFilePath: /mongodbData/node02/mongod.pid # 指定PID文件路径
  78. net:
  79. bindIpAll: true # 监听所有网络接口
  80. port: 27018 # MongoDB服务监听的端口
  81. replication:
  82. oplogSizeMB: 500 # 操作日志大小设置为500MB
  83. replSetName: mongodbData # 指定复制集名称
  84. EOF
  85. echo "正在创建配置文件/mongodbData/node03/conf/mongod.conf ..."
  86. cat > /mongodbData/node03/conf/mongod.conf <<EOF
  87. operationProfiling:
  88. mode: all # 设置性能分析模式为记录所有操作
  89. slowOpThresholdMs: 1000 # 定义操作执行超过1000毫秒时被认为是慢操作
  90. systemLog:
  91. destination: file # 日志输出目的地设置为文件
  92. path: /mongodbData/node03/logs/mongod.log # 指定日志文件的路径
  93. logAppend: true # 启用日志追加模式,新日志将追加到现有文件中
  94. verbosity: 1 # 日志详细级别设置为1
  95. logRotate: rename # 日志轮转策略设置为重命名旧文件
  96. storage:
  97. dbPath: /mongodbData/node03/data # 数据库文件存储路
  98. journal:
  99. enabled: true # 启用日志,以支持崩溃恢复
  100. processManagement:
  101. fork: true # 启用分叉模式运行MongoDB服务
  102. pidFilePath: /mongodbData/node03/mongod.pid # 指定PID文件路径
  103. net:
  104. bindIpAll: true # 监听所有网络接口
  105. port: 27019 # MongoDB服务监听的端口
  106. replication:
  107. oplogSizeMB: 500 # 操作日志大小设置为500MB
  108. replSetName: mongodbData # 指定复制集名称
  109. EOF
  110. echo "休眠几秒钟..."
  111. sleep 10
  112. # 启动MongoDB实例
  113. echo "正在启动MongoDB实例..."
  114. mongod -f /mongodbData/node01/conf/mongod.conf && mongod -f /mongodbData/node02/conf/mongod.conf && mongod -f /mongodbData/node03/conf/mongod.conf
  115. # 配置MongoDB集群
  116. echo "正在配置MongoDB集群..."
  117. 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}]});"
  118. echo "休眠几秒钟..."
  119. sleep 15
  120. # 验证集群状态
  121. echo "正在验证集群状态..."
  122. mongo --eval "rs.status();"
  123. echo "休眠几秒钟..."
  124. sleep 10
  125. # 初始化复制集(如果尚未初始化)
  126. mongo --eval "rs.initiate()"
  127. # 检查复制集状态的函数
  128. check_replica_set_status() {
  129. echo "检查复制集状态..."
  130. mongo --quiet --eval "rs.status()" | grep '"ok" : 1'
  131. return $?
  132. }
  133. # 初始化重试次数计数器
  134. retries=0
  135. # 循环检查复制集状态
  136. until check_replica_set_status; do
  137. retries=$((retries+1))
  138. if [ $retries -eq $MAX_RETRIES ]; then
  139. echo "超过最大重试次数,复制集可能未成功初始化。"
  140. exit 1
  141. fi
  142. echo "复制集尚未就绪,等待${RETRY_INTERVAL}秒后重试..."
  143. sleep $RETRY_INTERVAL
  144. done
  145. echo "复制集已成功初始化。"
  146. echo "复制集已成功初始化。"
  147. echo "复制集已成功初始化。"
  148. # 从这里开始执行需要复制集就绪的其他操作,例如创建用户等。
  149. # 休眠几秒钟等待复制集初始化完成
  150. echo "休眠几秒钟..."
  151. sleep 10
  152. echo "创建管理员角色..."
  153. echo "创建管理员角色..."
  154. echo "创建管理员角色..."
  155. 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'}]}); "
  156. echo "休眠几秒钟..."
  157. sleep 5
  158. echo "检查管理员角色..."
  159. echo "检查管理员角色..."
  160. echo "检查管理员角色..."
  161. mongo --port 27017 admin --eval "db.auth('root', 'root_jY_2021'); db.system.users.find(); "
  162. echo "休眠几秒钟..."
  163. sleep 10
  164. # 关闭仲裁节点 (27019)
  165. echo "正在关闭仲裁节点(27019)..."
  166. mongo --port 27019 admin --eval "db.shutdownServer()"
  167. echo "休眠几秒钟..."
  168. sleep 10
  169. # 关闭从节点 (27018)
  170. echo "正在关闭从节点(27018)..."
  171. mongo --port 27018 admin --eval " db.auth('suroot', 'suroot_jY_2021'); db.shutdownServer()"
  172. echo "休眠几秒钟..."
  173. sleep 30
  174. # 最后关闭主节点 (27017)
  175. echo "正在关闭主节点(27017)..."
  176. mongo --port 27017 admin --eval "db.auth('suroot', 'suroot_jY_2021'); db.shutdownServer()"
  177. echo "休眠几秒钟..."
  178. sleep 30
  179. # 生成keyFile
  180. echo "正在生成keyFile并分发..."
  181. openssl rand -base64 756 > /mongodbData/node01/conf/access.key
  182. chmod 400 /mongodbData/node01/conf/access.key
  183. cp /mongodbData/node01/conf/access.key /mongodbData/node02/conf/
  184. cp /mongodbData/node01/conf/access.key /mongodbData/node03/conf/
  185. # 再次启动MongoDB实例以应用安全设置
  186. mongod -f /mongodbData/node01/conf/mongod.conf && mongod -f /mongodbData/node02/conf/mongod.conf && mongod -f /mongodbData/node03/conf/mongod.conf
  187. sleep 30
  188. # mongod -f /mongodbData/node01/conf/mongod.conf
  189. # mongod -f /mongodbData/node02/conf/mongod.conf
  190. # mongod -f /mongodbData/node03/conf/mongod.conf
  191. echo "部署结束。"

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/140854
推荐阅读
相关标签
  

闽ICP备14008679号