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的脚本的更多相关文章

  1. Linux记录-Shell自动化部署批量建立用户和批量SSH配置(转载)

    if [ ! $# -eq 2 ] ; then echo "请输入用户名和密码以空格分开!" exit else name="$1" passwd=" ...

  2. centos环境自动化批量安装jdk软件脚本

    自动化安装jdk软件部署脚本 准备工作: 1.在执行脚本的服务器上生成免密码公钥: 安装expect命令 yum install -y expect ssh-keygen 三次回车 2.将jdk-7u ...

  3. 自己用ansible加shell 写的自动安装kubernetes的脚本

    脚本地址:https://github.com/shatianxiaozi/auto_install_k8s.git 1. 下载 git clone https://github.com/shatia ...

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

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

  5. 005-(已测试成功的方案)kickstart模式实现批量安装centos7.x系统

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

  6. SaltStack 批量安装软件

    这里我们用 SaltStack 服务端对多台客户端远程批量安装 httpd,步骤如下: [root@localhost ~]$ vim /etc/salt/master # 编辑配置文件,打开base ...

  7. Saltstack sls文件:批量安装服务

    一.使用saltstack 批量安装nginx 1.创建salt目录 mkdir /srv/{salt,pillar} 2.再/srv/salt/下创建sls文件 vim nginx_install. ...

  8. Linux记录-shell 100例(转载)

    1.编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2.通过位置变量创建 Linux 系统账户及 ...

  9. Hbase入门教程--单节点伪分布式模式的安装与使用

    Hbase入门简介 HBase是一个分布式的.面向列的开源数据库,该技术来源于 FayChang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像 ...

随机推荐

  1. Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar

    原文:Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar 前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先 ...

  2. autotools工具使用 good

    学习GNU/LINUX开发的编程人员,上手之后不久就会在编译开源软件的时候碰到configure脚本,过段时间还会知道configure脚本是 autoconf生成的:但是真正想用起来autoconf ...

  3. Using 3D engines with Qt(可以整合到Qt里,不影响)

    A number of popular 3D engines can be integrated with Qt: Contents [hide]  1 Ogre 2 Irrlicht 3 OpenS ...

  4. Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)

    在这个“大数据”的时代,传统的跨平台C++库Qt已经将魔爪丧心病狂的伸向了“云计算”.在2012年的Qt开发者大会上,Qt发布了BaaS(Backend as a Service)服务——Engini ...

  5. Qt使用MinGW编译,如何忽略警告

    Qt编译时经常出现以下警告: warning: unused parameter 'arg1' [-Wunused-parameter] warning: unused variable 'i' [- ...

  6. c# 获取cook

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...

  7. NPOI 超简单的导出导入

      首先说说,第一次遇到过匿名导出的那个时候是在我在北京第一家公司,简单的声明一个对象就可以导出,那时候感觉高大上,自己也想研究研究,但是因为头将代码后来加密了根本看不到.好吧,研究了研究放弃了,后来 ...

  8. SYN5605型 多通道时间间隔测量仪

      SYN5605型 多通道时间间隔测量仪 时间间隔测量设备多通道时间间隔测量32路时间间隔测量仪使用说明视频链接; http://www.syn029.com/h-pd-80-0_310_6_-1. ...

  9. Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现

    css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...

  10. Netty源码分析--初始化Options,添加处理器(四)

    接上篇,我们继续进入AbstractBootstrap类的 initAndRegister() 方法 进入init()方法 设置父级Channel的options, 进入到上节提到的NioServer ...