当前位置: 首页 > news >正文

利用SSH实现分布式应用的一键安装部署①(多主机执行指令函数封装、日志输出、关闭防火墙、传输文件函数封装)

1 基本概念

服务安装部署的五个步骤:

拷贝安装包到远端主机、创建安装目录并解压安装包、格式化磁盘挂载数据目录、修改服务配置文件、启动服务并验证集群运行状态

不论安装何种服务,大都需经历类似过程。

一键启停及状态检测:

1.日常维护中一键启停服务和实时获取服务运行状态的需求。

2.通过脚本实现管理主机一键启动或停止所有服务,以及获取服务运行状态的功能。

2 分布式集群脚本安装与部署前准备

2.1 安装部署脚本框架

#!/bin/bash
#
HOST_LIST="node01 node02 node03"# 关闭firewalld和selinux# 安装JDK# 安装配置zookeeper,并启动服务# 安装配置kafka,并启动服务

2.2 多主机执行指令函数封装

$@代表脚本或命令行中所有的参数、$#表示传递给脚本的参数数量。

HOST_LIST="node01 node02 node03"
USER_PASS="000000"
CMD_NUM=0
# 多主机执行主机指令封装
function remote_execute
{for host in $HOST_LIST;doCMD_NUM=`expr $CMD_NUM + 1`echo "$CMD_NUM ++++command < $@ > in host: $host"sshpass -p$USER_PASS ssh -o StrictHostKeyChecking=no root@$host $@if [ $? -eq 0 ];thenecho "successful.command < $@ > "elseecho "sorry.command < $@ > "fidone
}remote_execute "df -h"

2.3 利用exec管理安装部署日志

利用exec指令管理脚本中的日志记录。通过判断每条指令执行的成功与否,成功则输出结果,失败则记录错误。对于日志记录,通常使用追加重定向的方式记录到特定log文件中。

所有后续的输出(无论是正常输出还是错误输出)都会被追加到 ./output.log 文件中,而不是显示在终端上。

if [-e ./output.log ];thenrm -rf ./output.log
fiexec 1>> ./output.log 2>&1
  1. exec:执行一个命令,替换当前shell进程。
  2. 1>>:这是重定向操作符,用于将文件描述符1(通常是标准输出stdout)追加到文件中。如果文件不存在,它会被创建。
  3. ./output.log:这是要追加输出的目标文件路径。
  4. 2>&1:这是另一个重定向操作符,它将文件描述符2(通常是标准错误stderr)重定向到文件描述符1的当前位置。这意味着标准错误会被发送到标准输出的同一个位置,通常是同一个文件或同一个终端。

不用每一次都重定向到log日志中。

2.4 永久关闭selinux和firewalld

1.执行脚本后,防火墙和SELinux成功关闭和禁用。

2.通过命令执行结果确认firewalld和SELinux的禁用状态。

# 关闭firewalld和selinux
function stop_firewalld
{
remote_execute "systemctl stop firewalld"
remote_execute "systemctl disable firewalld"
remote_execute "setenforce 0"
remote_execute "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux"
}
stop_firewalld

2.5 多主机传输文件函数封装

scp进行传输文件示例


LOCAL_DIR="/opt/tmp"
PACKAGE_DIR="/opt/package"
APP_DIR="/opt/source"
JDK_NAME="jdk-8u212-linux-x64.tar.gz"
for host in $HOST_LIST;doscp -o StrictHostKeyChecking=no $LOCAL_DIR/$JDK_NAME root@$host:$PACKAGE_DIR
done

实现文件传输功能:

function remote_transfer
{SRC_FILE=$1DST_DIR=$2# 函数必须有2个参数,第一个参数是本地文件或目录,第二个参数为远端主机目录if [ $# -lt 2 ];thenecho "Usage:$0 <file|dir <dst_dir>>"exit 1fifor host in $HOST_LIST;doscp -o StrictHostKeyChecking=no $SRC_FILE root@$host:$DST_DIRdone
}remote_transfer output.log /tmp

完善脚本,对不存在的目录或文件进行提示或创建:

function remote_transfer
{SRC_FILE=$1DST_DIR=$2# 函数必须有2个参数,第一个参数是本地文件或目录,第二个参数为远端主机目录if [ $# -lt 2 ];thenecho "Usage:$0 <file|dir <dst_dir>>"exit 1fi# 判断第一个参数是否存在,如果不存在则直接退出并提示给用户if [ ! -e $SRC_FILE ];thenecho "ERROR - $SEC_FIEL is not exist,Please check...."exit 1fifor host in $HOST_LIST;doecho "+++++++++++Transfer FILE TO HOST: $host+++++++++++"CMD_NUM=`expr $CMD_NUM + 1`# 判断目录参数是否存在,如果不存在则直接创建ssh -o StrictHostKeyChecking=no root@$host "if [ ! -e $DST_DIR ];then mkdir $DST_DIR -p;fi"scp -r -o StrictHostKeyChecking=no $SRC_FILE root@$host:$DST_DIR/if [ $? -eq 0 ];thenecho "Remote Host:$host - $CMD_NUM - INFO -SCP $SRC_FILE TO dir $DST_DIR success"elseecho "Remote Host:$host - $CMD_NUM - ERROR -SCP $SRC_FILE TO dir $DST_DIR filed"fidone
}remote_transfer output.log /tmp/log

验证:

cat /tmp/log/output.log

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt无边框窗口,关闭后再show,鼠标等事件不响应问题解决办法
  • elasticsearch的使用(二)
  • MYSQL知识点(持续更新)
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(4)--TX/RX接口的数据位宽和时钟设计
  • 【Python机器学习】支持向量机——在复杂数据上应用核函数
  • 27集28集 ESP32 AIchat cmake编译解密-《MCU嵌入式AI开发笔记》
  • 谷粒商城实战笔记-nginx问题记录
  • 服务器测试之RAID知识梳理
  • MySQL的三大关键日志:Bin Log、Redo Log与Undo Log
  • 【开端】JAVA Mono<Void>向前端返回没有登陆或登录超时 暂无权限访问信息组装
  • Zookeeper的监听机制及原理解析
  • 算法【前缀和与差分】
  • LeNet5模型搭建
  • 华为OD-D卷小明找位置
  • 学习记录(9):Prompt提示词技巧
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 10个确保微服务与容器安全的最佳实践
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • iOS 系统授权开发
  • Java面向对象及其三大特征
  • mongo索引构建
  • PHP面试之三:MySQL数据库
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • zookeeper系列(七)实战分布式命名服务
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 算法---两个栈实现一个队列
  • 微信小程序:实现悬浮返回和分享按钮
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • $.proxy和$.extend
  • $jQuery 重写Alert样式方法
  • (1)Jupyter Notebook 下载及安装
  • (13):Silverlight 2 数据与通信之WebRequest
  • (14)Hive调优——合并小文件
  • (3)选择元素——(17)练习(Exercises)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (7) cmake 编译C++程序(二)
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (多级缓存)缓存同步
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)jdk与jre的区别
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .form文件_SSM框架文件上传篇
  • .jks文件(JAVA KeyStore)
  • .Net下的签名与混淆
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Bean注解详解
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @PreAuthorize与@Secured注解的区别是什么?
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解
  • [Angular 基础] - 自定义指令,深入学习 directive