[记录]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:一个结构化数据的分布式存储系统".就像 ...
随机推荐
- duilib菜单开发遇见“0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突”
我的程序是这样一个逻辑. 首先创建用户列表,点击列表项弹出菜单,点击菜单上“设备选项”,弹出设备列表,上面显示这个用户拥有的设备. 菜单的创建参考了这为博主的教程:http://www.cnblogs ...
- oracle data guard备库备份恢复
客户有套data guard环境,主库在阿里云上,备库在本地机房,现在想定期做备份,但是因为一些原因,备份阿里云上的主库实现会有些问题,所以只能备份本地的备库.目前需求就是测试备库的备份文件是否可以进 ...
- Spring MVC的工作原理,我们来看看其源码实现
前言 开心一刻 晚上陪老丈人吃饭,突然手机响了,我手贱按了免提……哥们:快出来喝酒!哥几个都在呢!我:今天不行,我现在陪老丈人吃饭呢.哥们:那你抓紧喝,我三杯白酒,把我岳父放倒了才出来的,你也快点.看 ...
- linux 系统中将数据写入文档不能立即保存问题的解决方法
应用场景: 设备跑的是Linux系统,与PC上位机进行通信,上位机可以给Linux发送设备配置信息,Linux将配置信息写入文件中以备设备断电重启时使用. bug现象: 设备正常运行,设备配置信息为A ...
- TCanvas 类属性及方法
delphi TCanvas类 类关系 TObject-> TPersistent 对那些作图对象,可使用TCanvas对象作为画布.标准的window控件,例如编辑控件和列表框控件,当 ...
- BI-学习之 商业智能平台的引入(传统关系型数据库的问题)
早在 SQL Server 2005里面就有了这种 完整的商业智能平台了,那时候Nosql什么的都还停留在概念性的提出阶段,发展至2009年才一下子蹦了出来变得众所周知了.当然这个要扯就扯远了,咱们还 ...
- 关于 win32 下磁盘的遍历方法
最近要写个在线专杀的东东,虽然是专杀(本来只要清除几个特定的文件和杀几个特定的进程,然后把用户的注册表恢复正常,很多病毒木马最喜欢干的一件事情就是写 映像劫持 然后机器一重启,安全相关的软件全部玩完了 ...
- 【工具】Axure 8.0 序列号
之前用的 Axure 8.0 到期最近了,重找了一个序列号,发现可用,记录一下,分享如下: 授权人:University of Science and Technology of China (CLA ...
- 基于python实现的三方组件----Celery
一.基于python实现的三方组件----Celery 1.作用 用于异步周期任务的处理 2.Celery的组成 (1)任务 app (2)记录任务的缓存(通常用redis或rabbitMQ) 任务记 ...
- AI行为树的工作原理
很久没写博客了,最近在项目刚部署到测试服,需要进行压测,老大相当专业的用了行为树来组织压测机器人的代码,这段时间陆陆续续在网上看了不少关于行为树的文章,其中有一篇我觉得写得非常到位,它原文是英文,链接 ...