[记录]Shell并发模式批量安装saltstack的脚本
SaltStack+Shell:
salt-master的配置:
#cat /etc/salt/master
user: root
auto_accept: True salt-minion的配置(支持多master的配置):
#cat /etc/salt/minion
#minion唯一标识
id: $minion_ip
module_dirs:
- /etc/salt/module
master:
- 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>&1
if [ $? -eq 255 ];then
echo $i >> /home/abc/iplist/nologin.ip
else
echo $i >> /home/abc/iplist/login_ok.ip
fi
#暂停一秒,缓冲时间
sleep 1
#再写入一个空行,使挂起的循环继续执行
echo "" >&4
}& #放入后台执行
done #等待所有后台进程执行完成
wait
#删除文件描述符
exec 4>&-
exit 0 ==============================================================================================================
==============================================================================================================
#cat install_salt.sh
#执行安装并配置salt-minion的脚本
#!/bin/bash thead_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++))
do
echo ""
done >&4 for 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-minion
ssh $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的配置并指定master
ssh $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为自己的ip
ssh $i "sudo sed -i 's/^id:\(.*\)/id: $i/g' /etc/salt/minion"
else
#开启id的配置并指定为自己的ip
ssh $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" ]];then
ssh $i "sudo apt-get install salt-minion -y"
ssh $i "sudo grep -E "^master:" /etc/salt/minion"
if [ $? -eq 0 ];then
ssh $i "sudo sed -i 's/^master:\(.*\)/master: salt-master/g' /etc/salt/minion"
else
ssh $i "sudo sed -i 's/#master: salt/master: salt-master/g' /etc/salt/minion"
fi
ssh $i "sudo grep -E "^id:" /etc/salt/minion"
if [ $? -eq 0 ]; then
ssh $i "sudo sed -i 's/^id:\(.*\)/id: $i/g' /etc/salt/minion"
else
ssh $i "sudo sed -i 's/#id:\(.*\)/id: $i/g' /etc/salt/minion"
fi
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"
else
echo $i >> /home/abc/iplist/yeslogin_but_error.ip
fi
sleep 1
echo "" >&4
}&
done wait
exec 4>&-
exit 0 ==============================================================================================================
==============================================================================================================
#cat check_install_salt.sh
#检查是否安装成功的脚本,得到成功的主机数应该和在master上执行的#salt "*" test.ping | grep -v True|sort |uniq |wc -l命令得到的数量一样才对。
#!/bin/bash thead_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++))
do
echo ""
done >&4 for 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 ];then
echo $i >> /home/abc/iplist/install_error.ip
else
echo $i >> /home/abc/iplist/install_ok.ip
fi
sleep 1
echo "" >&4
}&
done wait
exec 4>&-
exit 0
如上图所示,salt支持使用这样的方式来指定特定的ip列表批量执行命令,类似于分组管理,iplist.ip文件格式是使用空格分割ip。
#salt -L "`iplist.ip`" cmd.run 'uptime'
[记录]Shell并发模式批量安装saltstack的脚本的更多相关文章
- Linux记录-Shell自动化部署批量建立用户和批量SSH配置(转载)
if [ ! $# -eq 2 ] ; then echo "请输入用户名和密码以空格分开!" exit else name="$1" passwd=" ...
- centos环境自动化批量安装jdk软件脚本
自动化安装jdk软件部署脚本 准备工作: 1.在执行脚本的服务器上生成免密码公钥: 安装expect命令 yum install -y expect ssh-keygen 三次回车 2.将jdk-7u ...
- 自己用ansible加shell 写的自动安装kubernetes的脚本
脚本地址:https://github.com/shatianxiaozi/auto_install_k8s.git 1. 下载 git clone https://github.com/shatia ...
- kickstart模式实现批量安装centos7.x系统
1.1 安装系统的方法 l 光盘(ISO文件,光盘的镜像文件)===>>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜像刻录到U盘==& ...
- 005-(已测试成功的方案)kickstart模式实现批量安装centos7.x系统
1.1 安装系统的方法 l 光盘(ISO文件,光盘的镜像文件)===>>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜像刻录到U盘==& ...
- SaltStack 批量安装软件
这里我们用 SaltStack 服务端对多台客户端远程批量安装 httpd,步骤如下: [root@localhost ~]$ vim /etc/salt/master # 编辑配置文件,打开base ...
- Saltstack sls文件:批量安装服务
一.使用saltstack 批量安装nginx 1.创建salt目录 mkdir /srv/{salt,pillar} 2.再/srv/salt/下创建sls文件 vim nginx_install. ...
- Linux记录-shell 100例(转载)
1.编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2.通过位置变量创建 Linux 系统账户及 ...
- Hbase入门教程--单节点伪分布式模式的安装与使用
Hbase入门简介 HBase是一个分布式的.面向列的开源数据库,该技术来源于 FayChang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像 ...
随机推荐
- Java底层知识学习:Bytecode and JMM
最近在跟着耗子哥的程序员练级指南学习Java底层知识,结合<深入理解Java虚拟机>这本书在看,写笔记,看资料,成长中…… 目前看完了第二章JMM和各内存区OOM的情况 一篇图文并茂介绍字 ...
- DELPHI美化界面(2009开始TPanel增加了ParentBackGround)
1.透明问题. 要重新调整界面确实很麻烦,以前用DELPHI开发的界面都很土,和WEB真是没办法比.(我以前用的是DELPHI7),现在回想起来,DELPHI难做的原因是:没有透明控件.所有控件都是不 ...
- 制作Qt应用程序的插件(使用QtPlugin),对比DLL它是全平台通用的
在Qt下,插件有两种形式,一种是用于QtCreator下,扩展IDE功能.另一种是用于扩展开发者的应用.本文要讲的是后者. 定义一个纯虚类作为插件接口 #include <QtPlugin> ...
- Screensiz.es站收集整理了移动端的相关尺寸。
Screensiz.es站收集整理了移动端的相关尺寸. Screensiz.es 彩蛋爆料直击现场 Screensiz.es站收集整理了移动端的相关尺寸.
- 【Linux】linux中删除指定日期之前的文件
要删除系统中就的备份文件,就需要使用命令了: #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30 ...
- git如何merge github forked repository里的代码更新
git如何merge github forked repository里的代码更新? 问题是这样的,github里有个项目ruby-gmail,我需要从fork自同一个项目的另一个repository ...
- vs中debug的一个小技巧 -- debug时忽略某段代码
#line 这是C#中的预处理命令 Visual Studio 2008 Visual Studio 2005 Visual Studio 2012 #line hidden 指令对调试器隐藏若干连续 ...
- KM算法 详解+模板
先说KM算法求二分图的最佳匹配思想,再详讲KM的实现.[KM算法求二分图的最佳匹配思想] 对于具有二部划分( V1, V2 )的加权完全二分图,其中 V1= { x1, x2, x3, ... , x ...
- java.lang.Integer cannot be cast to java.lang.String
错误原因是类型转换! 说Integer 类型不能转成String类型. 解决办法: 将错误中的(String)强制转换类型修改为 object.toString() toString方法是Ja ...
- Spring Boot2(一):使用Spring Boot2集成Mybatis基础搭建
Mybatis 初期使用比较麻烦,需要各种配置文件.实体类.Dao 层映射关联.还有一大推其它配置.mybatis-spring-boot-starter 就是 Spring Boot+ Mybati ...