SaltStack+Shell:
salt-master的配置:#cat /etc/salt/masteruser: rootauto_accept: Truesalt-minion的配置(支持多master的配置):#cat /etc/salt/minion#minion唯一标识id: $minion_ipmodule_dirs:- /etc/salt/modulemaster:- master1_ip- master2_ip- master3_ip
说明:1./etc/salt/pki/master/minions,该目录是master记录minion_id的目录,以此识别minion。2./etc/salt/pki/minion,该目录下是公私钥,若master识别不了可删除minion_master.pub文件重启minion。3.在建立多Master的配置中,主要的一点就是所有的Master使用同样的private key. 这些key将在Master第一次启动时自动生成。 因此在多Master环境建立时,需要从原始的(original)Master上拷贝其private key至第二个Master以提供它启动时自动生成的那个, 以此类推。Master的private key存储在Master本地的 pki_dir 目录下. 默认的目录是 /etc/salt/pki/master/master.pem 和/etc/salt/pki/master/master.pub两个文件. 将该key拷贝到新增的master上. 需要注意的是,在拷贝的时候,需要确保新增的master上并没有minion连接进来.==============================================================================================================
==============================================================================================================
#cat testlogin.sh
#检查主机是否有权限登录的脚本
#!/bin/bash#并发线程数
thead_num=50
#创建临时输入输出管道文件
tmp_fifo_file="/tmp/$$.fifo"
mkfifo $tmp_fifo_file
#绑定管道文件到文件描述符,自定义3-9
exec 4<>$tmp_fifo_file
#删除临时管道文件,也可不删除
rm -f $tmp_fifo_file#利用for循环向管道中输入并发数量的空行
for ((i=0;i<$thead_num;i++))
do#输出空行echo ""
done >&4 #输出重导向到定义的文件描述符4上for i in $(cat /home/abc/iplist/all.ip | grep -vE "#|^$")
do
read -u4
{ssh $i "hostname" 2>&1if [ $? -eq 255 ];thenecho $i >> /home/abc/iplist/nologin.ipelseecho $i >> /home/abc/iplist/login_ok.ipfi#暂停一秒,缓冲时间sleep 1#再写入一个空行,使挂起的循环继续执行echo "" >&4
}&      #放入后台执行
done#等待所有后台进程执行完成
wait
#删除文件描述符
exec 4>&-
exit 0==============================================================================================================
==============================================================================================================
#cat install_salt.sh
#执行安装并配置salt-minion的脚本
#!/bin/bashthead_num=50
tmp_fifo_file="/home/abc/$$.fifo"
mkfifo $tmp_fifo_file
exec 4<>$tmp_fifo_file
rm -f $tmp_fifo_file
for ((i=0;i<$thead_num;i++))
doecho ""
done >&4for i in $(cat /home/abc/iplist/login_ok.ip | grep -vE "#|^$")
do
read -u4
{OS=$(ssh $i "cat /etc/issue | awk '{print \$1}'| grep -vE \"^$\" | head -1" 2>&1)if [[ "x$OS" == "xCentOS" ]];then#安装salt-minionssh $i "sudo yum install salt-minion -y"#检查master的配置文件ssh $i "sudo grep -E "^master:" /etc/salt/minion"if [ $? -eq 0 ];then#替换master的配置ssh $i "sudo sed -i 's/^master:\(.*\)/master: salt-master/g' /etc/salt/minion"else#开启master的配置并指定masterssh $i "sudo sed -i 's/#master: salt/master: salt-master/g' /etc/salt/minion"fi#检查minion中id的配置ssh $i "sudo grep -E "^id:" /etc/salt/minion"if [ $? -eq 0 ]; then#替换id为自己的ipssh $i "sudo sed -i 's/^id:\(.*\)/id: $i/g' /etc/salt/minion"else#开启id的配置并指定为自己的ipssh $i "sudo sed -i 's/#id:\(.*\)/id: $i/g' /etc/salt/minion"fi#重启minion客户端ssh $i "ps -ef | grep salt-minion|grep -v grep|awk '{print \$2}'| sudo xargs kill -9 && sudo rm -f /etc/salt/pki/minion/minion_master.pub && sudo salt-minion -d"elif [[ "x$OS" == "xUbuntu" ]];thenssh $i "sudo apt-get install salt-minion -y"ssh $i "sudo grep -E "^master:" /etc/salt/minion"if [ $? -eq 0 ];thenssh $i "sudo sed -i 's/^master:\(.*\)/master: salt-master/g' /etc/salt/minion"elsessh $i "sudo sed -i 's/#master: salt/master: salt-master/g' /etc/salt/minion"fissh $i "sudo grep -E "^id:" /etc/salt/minion"if [ $? -eq 0 ]; thenssh $i "sudo sed -i 's/^id:\(.*\)/id: $i/g' /etc/salt/minion"elsessh $i "sudo sed -i 's/#id:\(.*\)/id: $i/g' /etc/salt/minion"fissh $i "ps -ef | grep salt-minion|grep -v grep|awk '{print \$2}'| sudo xargs kill -9 && sudo rm -f /etc/salt/pki/minion/minion_master.pub && sudo salt-minion -d"elseecho $i >> /home/abc/iplist/yeslogin_but_error.ipfisleep 1echo "" >&4
}&
donewait
exec 4>&-
exit 0==============================================================================================================
==============================================================================================================
#cat check_install_salt.sh
#检查是否安装成功的脚本,得到成功的主机数应该和在master上执行的#salt "*" test.ping | grep -v True|sort |uniq |wc -l命令得到的数量一样才对。
#!/bin/bashthead_num=50
tmp_fifo_file="/home/abc/$$.fifo"
mkfifo $tmp_fifo_file
exec 4<>$tmp_fifo_file
rm -f $tmp_fifo_file
for ((i=0;i<$thead_num;i++))
doecho ""
done >&4for i in $(cat /home/abc/iplist/login_ok.ip)
do
read -u4
{ssh $i "ps -ef | grep salt-minion| grep -v grep"if [ $? -eq 1 ];thenecho $i >> /home/abc/iplist/install_error.ipelseecho $i >> /home/abc/iplist/install_ok.ipfisleep 1echo "" >&4
}&
donewait
exec 4>&-
exit 0

  

如上图所示,salt支持使用这样的方式来指定特定的ip列表批量执行命令,类似于分组管理,iplist.ip文件格式是使用空格分割ip。

#salt -L "`iplist.ip`" cmd.run 'uptime'

转载于:https://www.cnblogs.com/wsjhk/p/8524547.html

[记录]Shell并发模式批量安装saltstack的脚本相关推荐

  1. shell一键自动化批量安装服务

    非交互式生成秘钥及实现批量管理 1.创建用户及密码(所有的机器都要执行) useradd ydl echo 123456|passwd --stdin ydl id ydl su - ydl 2.生成 ...

  2. kickstart模式实现批量安装centos7.x系统

    1.1 安装系统的方法 l  光盘(ISO文件,光盘的镜像文件)===>>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l  U盘:ISO镜像刻录到U盘==& ...

  3. saltstack学习-9:批量安装nginx服务并定时更新配置(pillar)

    环境介绍: slatmaster:10.80.0.162 minion01:10.80.0.163 minion02:10.80.0.164 目标:在两台minion上安装nginx服务,并定时同步m ...

  4. curl批量调用linux,shell的简单批量curl接口脚本

    shell脚本可以说作用非常大,在服务器领域,用shell操作事务可比手动点击要方便快捷得多了.虽然只是文字界面,但是其强大的处理功能,会让各种操作超乎想象.而且,也可以将这些习惯移植到日常的工作当中 ...

  5. linux获取目标主机shell,expect案例-批量获取主机并分发密钥

    2019年录制SHell新课地址 贴切企业脚本编写思路讲解,带你玩Shell脚本编程实战. 本套课程从实际项目案例出发,近100个Shell实例讲解,由浅入深,循序渐进,带你玩转Shell编程的方方面 ...

  6. PXE+Kickstart实现无人值守批量安装Linux

    PXE+Kickstart实现无人值守批量安装Linux 一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的 ...

  7. linux不断安装操作系统,无人值守批量安装linux操作系统

    无人值守批量安装linux操作系统(实验总结) 每天都看对着电脑的操作系统,有时候出现了什么问题实在解决不了,我们肯定会选择重做系统的,当然一台两台系统我们还是可以一一搞定,可是我们是否想过要是一次性 ...

  8. 并发模式:生产者和消费者

    在我15年的职业生涯中,生产者和消费者的问题是我仅遇到过几次. 在大多数编程情况下,我们正在做的事情是以同步方式执行功能,其中JVM或Web容器自行处理多线程的复杂性. 但是,在编写某些需要的用例时. ...

  9. Windows更新补丁下载、批量安装的几种方法

    Windows更新补丁下载.批量安装的几种方法 对于广大电脑爱好者而言,打补丁已经是"家常便饭".每次重装系统后,之前系统更新过的补丁也随之毁于一旦,不得不再次连接到微软的网站,将 ...

最新文章

  1. 一致性协议raft详解(一):raft整体介绍
  2. linux bash 获取 国内常见网站的IP列表
  3. 在多label 的代码里面添加augmentation功能遇到的问题
  4. 如何化身BAT面试收割机?不愧是大佬
  5. 10 signs that you’re not cut out to be an IT manager
  6. Ubuntu18.04 32位下载
  7. 如何释放计算机内存吗,教您如何有效释放计算机内存空间!
  8. 神经网络中Batch和Epoch之间的区别是什么?
  9. Win10锁屏壁纸图片保存
  10. 对坐标的曲线积分求做功_对坐标的曲线积分对弧长的曲线积分 二重积分
  11. linux安装java7_Linux安装jdk-7u25-linux-i586
  12. matlab的fft与ifft,fft与ifft区别
  13. Linux命令--chroot
  14. windows +linux(ubuntu) 2020.7 双系统最新安装心得
  15. 电脑浏览器打不开html文档,win7浏览器打不开本地html文件的原因及解决方法
  16. KRPANO资源分析工具
  17. java jtable_Java:JTable中的控制台输出
  18. ElasticSearch搜索引擎API笔记
  19. 什么是电弧光?电弧光保护的重要性
  20. PostgreSQL 区块链条管理举例

热门文章

  1. 虚拟机和Docker的最大区别
  2. Cordova应用的JavaScript代码和自定义插件代码的调试
  3. OpenFOAM安装+ParaView安装+环境配置(deb直接安装详细记录-Ubuntu14.04+OpenFOAM4.1)
  4. c语言算法加数据结构等于,数据结构算法(多项式加法)的C语言完美实现
  5. 安装python3.7.0的步骤_CentOS7下简单安装python3.7.0步骤
  6. html 字符串最后加空格,js给字符串每个字符中间加空格
  7. 计算机网络wfq,计算机网络基础试题-a卷-信科09.doc
  8. c语言值传递 地址传递 引用传递参数,C++参数传递(值传递,引用传递)
  9. Java布局怎么加图片组件_java – 将图像缩略图添加到网格中的布局...
  10. 每个tabpage中都有一个dategridview_其实每个人都是一个孩子,仅此而已