[记录]Shell并发模式批量安装saltstack的脚本
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的脚本相关推荐
- shell一键自动化批量安装服务
非交互式生成秘钥及实现批量管理 1.创建用户及密码(所有的机器都要执行) useradd ydl echo 123456|passwd --stdin ydl id ydl su - ydl 2.生成 ...
- kickstart模式实现批量安装centos7.x系统
1.1 安装系统的方法 l 光盘(ISO文件,光盘的镜像文件)===>>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜像刻录到U盘==& ...
- saltstack学习-9:批量安装nginx服务并定时更新配置(pillar)
环境介绍: slatmaster:10.80.0.162 minion01:10.80.0.163 minion02:10.80.0.164 目标:在两台minion上安装nginx服务,并定时同步m ...
- curl批量调用linux,shell的简单批量curl接口脚本
shell脚本可以说作用非常大,在服务器领域,用shell操作事务可比手动点击要方便快捷得多了.虽然只是文字界面,但是其强大的处理功能,会让各种操作超乎想象.而且,也可以将这些习惯移植到日常的工作当中 ...
- linux获取目标主机shell,expect案例-批量获取主机并分发密钥
2019年录制SHell新课地址 贴切企业脚本编写思路讲解,带你玩Shell脚本编程实战. 本套课程从实际项目案例出发,近100个Shell实例讲解,由浅入深,循序渐进,带你玩转Shell编程的方方面 ...
- PXE+Kickstart实现无人值守批量安装Linux
PXE+Kickstart实现无人值守批量安装Linux 一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的 ...
- linux不断安装操作系统,无人值守批量安装linux操作系统
无人值守批量安装linux操作系统(实验总结) 每天都看对着电脑的操作系统,有时候出现了什么问题实在解决不了,我们肯定会选择重做系统的,当然一台两台系统我们还是可以一一搞定,可是我们是否想过要是一次性 ...
- 并发模式:生产者和消费者
在我15年的职业生涯中,生产者和消费者的问题是我仅遇到过几次. 在大多数编程情况下,我们正在做的事情是以同步方式执行功能,其中JVM或Web容器自行处理多线程的复杂性. 但是,在编写某些需要的用例时. ...
- Windows更新补丁下载、批量安装的几种方法
Windows更新补丁下载.批量安装的几种方法 对于广大电脑爱好者而言,打补丁已经是"家常便饭".每次重装系统后,之前系统更新过的补丁也随之毁于一旦,不得不再次连接到微软的网站,将 ...
最新文章
- 一致性协议raft详解(一):raft整体介绍
- linux bash 获取 国内常见网站的IP列表
- 在多label 的代码里面添加augmentation功能遇到的问题
- 如何化身BAT面试收割机?不愧是大佬
- 10 signs that you’re not cut out to be an IT manager
- Ubuntu18.04 32位下载
- 如何释放计算机内存吗,教您如何有效释放计算机内存空间!
- 神经网络中Batch和Epoch之间的区别是什么?
- Win10锁屏壁纸图片保存
- 对坐标的曲线积分求做功_对坐标的曲线积分对弧长的曲线积分 二重积分
- linux安装java7_Linux安装jdk-7u25-linux-i586
- matlab的fft与ifft,fft与ifft区别
- Linux命令--chroot
- windows +linux(ubuntu) 2020.7 双系统最新安装心得
- 电脑浏览器打不开html文档,win7浏览器打不开本地html文件的原因及解决方法
- KRPANO资源分析工具
- java jtable_Java:JTable中的控制台输出
- ElasticSearch搜索引擎API笔记
- 什么是电弧光?电弧光保护的重要性
- PostgreSQL 区块链条管理举例
热门文章
- 虚拟机和Docker的最大区别
- Cordova应用的JavaScript代码和自定义插件代码的调试
- OpenFOAM安装+ParaView安装+环境配置(deb直接安装详细记录-Ubuntu14.04+OpenFOAM4.1)
- c语言算法加数据结构等于,数据结构算法(多项式加法)的C语言完美实现
- 安装python3.7.0的步骤_CentOS7下简单安装python3.7.0步骤
- html 字符串最后加空格,js给字符串每个字符中间加空格
- 计算机网络wfq,计算机网络基础试题-a卷-信科09.doc
- c语言值传递 地址传递 引用传递参数,C++参数传递(值传递,引用传递)
- Java布局怎么加图片组件_java – 将图像缩略图添加到网格中的布局...
- 每个tabpage中都有一个dategridview_其实每个人都是一个孩子,仅此而已