centos 7安装
yum -y install epel-release
yum clean all
yum makecache
yum -y install salt-minion
sed -i 's/#master: salt/master: 10.248.2.18/g' /etc/salt/minion
sed -i 's/#id:/id: cgo-wh1-proxy-01/g' /etc/salt/minion
/bin/systemctl restart salt-minion.service
systemctl enable salt-minion.service
 
yum -y install salt-master
 
 
 centos 6
 yum groupinstall 'Development Tools'
 ###
 安装EPEL
 ###
 cd /usr/local/src/
 wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
 rpm -ivh epel-release-6-8.noarch.rpm
 
 
 ###
 主服务器
 ###
 yum install salt-master -y
 chkconfig salt-master on
 service salt-master start
 
 
 ###
 从服务器
 ###
 yum install salt-minion -y
 chkconfig salt-minion on
 service salt-minion start
 
 
 ###
 主服务器的Iptables
 ###
 iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
 iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT
 #在主控端添加TCP 4505、TCP 4506的规则,而在被控端无须配置防火墙,原理是被控端直接与主控端的zeromq建立长链接,接收广播到的任务信息并执行,具体操作是添加两条iptables规则:
 
 
###
配置主控端:
###
#绑定Master通信IP
interface: 10.249.17.78
#自动认证,避免手动运行salt-key来确认证书信
auto_accept: True
#指定Saltstack文件根目录位置
# file_roots:
#   base:
#     - /srv/salt/
#   dev:
#     - /srv/salt/dev/services
#     - /srv/salt/dev/states
#   prod:
#     - /srv/salt/prod/services
#     - /srv/salt/prod/states
#
#file_roots:
#  base:
#    - /srv/salt

#重启saltstack salt-master服务使新配置生效
 service salt-master restart
 
 
###
配置被控端:
###
#指定master主机IP地址
master: 10.249.17.78
#修改被控端主机识别id,建议使用操作系统主机名来配置
id: django_web
 
 
#重启saltstack salt-minion服务使新配置生效
 service salt-minion restart
 
 
 删除dead状态minion
 salt-run manage.down removekeys=True

删除某个key
 salt-key -d cut-wh1-proxy-01
 
 
 验证被添加的客户端
 root@Saltstack src]# salt-key -L
Accepted Keys:
django_web
Denied Keys:
Unaccepted Keys:
Rejected Keys:
 
salt -E 'django_web+' test.ping  
#测试多个客户端

salt -L 'django_web,test' test.ping
#写明每个客户端

#运行远程命令
salt 'django_web' cmd.run 'free -m'
 
参数:
-E,--pcre,通过正则表达式进行匹配。

-L,--list,以主机id名列表的形式进行过滤
#获取主机系统信息
 time salt -L 'django_web' grains.item osfullname

-G,--grain,根据被控主机的grains(10.4节详解)信息进行匹配过滤,格式为'<grainvalue>:<glob expression>',例如,过滤内核为Linux的主机可以写成'kernel:Linux',如果同时需要正则表达式的支持可切换成--grain-pcre参数来执行。
[root@Saltstack src]# salt -G 'osrelease:6.5' cmd.run 'python -V'
django_web:
    Python 2.6.6

-I,--pillar,根据被控主机的pillar(10.5节详解)信息进行匹配过滤,格式为“对象名称:对象值”,例如,过滤所有具备'apache:httpd' pillar值的主机。示例:探测具有“nginx:root:/data”信息的主机连通性
 salt -I 'nginx:root:/data' test.ping
 
-N,--nodegroup,根据主控端master配置文件中的分组名称进行过滤。探测web2group被控主机的连通性,其命令为:salt -N web2group test.ping
 
-C,--compound,根据条件运算符not、and、or去匹配不同规则的主机信息,。示例:探测SN2013开头并且操作系统版本为CentOS的主机连通性,命令如下:salt -C 'E@^SN2013.* and G@os:Centos' test.ping
 其中,not语句不能作为第一个条件执行,不过可以通过以下方法来规避,示例:探测非SN2013开头的主机连通性,其命令为:salt-C '*and notE@^SN2013.*' test.ping。

-S,--ipcidr,根据被控主机的IP地址或IP子网进行匹配
[root@Saltstack src]# salt -S 10.249.17.0/24 test.ping
django_web:
    True
 
#python调用API接口
>>> import salt.client
>>> client = salt.client.LocalClient()
>>> client.cmd('django_web','cmd.run',['free -m'])
 
#复制文件
#在master里新建文件夹:

mkdir /srv/salt

#salt的主目录在/srv/salt下面,这个可以在配置文件里设定,下面就是把script/test.sh这个文件推送到客户端去
 salt 'django_web' cp.get_file salt://script/test.sh /home/test.sh
 
#这个是推送文件夹
 salt '*' cp.get_dir salt://script/ /home/
 
 #python调用API接口
>>> import salt.client
>>> client = salt.client.LocalClient()
>>> client.cmd('django_web','cp.get_file',['salt://script/test.sh','/home/test.sh'])
 
 
 #cron模块实现被控主机的crontab操作
 #查看指定被控主机、root用户的crontab清单
 salt 'django_web' cron.raw_cron root
 
 #为指定的被控主机、root用户添加/usr/local/weekly任务作业
 salt 'django_web' cron.set_job root '*' '*' '*' '*' 1 /usr/local/weekly
 
 #删除指定的被控主机、root用户crontab的/usr/local/weekly任务作业
 salt 'django_web' cron.rm_job root /usr/local/weekly
 
 #API调用:
 client.cmd('django_web', 'cron.set_job',['root','*','*','*','*','*','/usr/echo'])
 
#dnsutil模块实现被控主机通用DNS相关操作
#添加指定被控主机hosts的主机配置项
salt 'django_web' dnsutil.hosts_append /etc/hosts 127.0.0.1 ad1.yuk.com,ad2.yuk.com

#删除指定被控主机hosts的主机配置项
salt 'django_web' dnsutil.hosts_remove /etc/hosts ad2.yuk.com
salt 'django_web' dnsutil.hosts_remove /etc/hosts ad1.yuk.com

#file模块
被控主机文件常见操作,包括文件读写、权限、查找、校验等
#校验所有被控主机文件的加密信息、支持md5、sha1、sha224、sha256、sha384、sha512加密算法
salt '*' file.get_sum /etc/passwd md5

#修改所有被控主机/etc/passwd文件的属组、用户权限,等价于chown root:root /etc/passwd
salt '*' file.chown /etc/passwd root root

#复制所有被控主机本地/path/to/src文件到本地的/path/to/dst文件
salt '*' file.copy /path/to/src /path/to/dst

#复制所有被控主机本地/home/test.sh文件到本地的/home/install/test.sh
salt '*' file.copy /home/test.sh /home/install/test.sh

#检查所有被控主机/etc目录是否存在,存在则返回True,检查文件是否存在使用file.file_exists方法
salt '*' file.directory_exists /etc

#获取所有被控主机/etc/passwd的stats信息
salt '*' file.stats /etc/passwd

#获取所有被控主机/etc/passwd的权限mode,如755、644
salt '*' file.get_mode /etc/passwd

#修改所有被控主机/etc/passwd的权限mode为0644
salt '*' file.set_mode /etc/passwd 0644

#在所有被控主机创建/opt/test目录
salt '*' file.mkdir /opt/test

#将所有被控主机/home/test.sh文件的test值修改成TEST
salt '*' file.sed /home/test.sh 'test' 'TEST'

#给所有被控主机的/home/test.sh文件追加内容"maxclient 100"
salt '*' file.append  /home/test.sh "maxclient 100"

#删除所有被控主机的/home/test.sh文件
salt '*' file.remove /home/test.sh

API调用:
client.cmd('*', ' file.remove ',['/tmp/foo'])

#iptables模块

示例:#在所有被控端主机追加(append)、插入(insert)iptables规则,其中INPUT为输入链
salt '*' iptables.append filter INPUT rule='-m state --state RELATED,ESTABLISHED-j ACCEPT'
salt '*' iptables.insert filter INPUT position=3 rule='-m state --stateRELATED,ESTABLISHED -j ACCEPT'

#在所有被控端主机删除指定链编号为3(position=3)或指定存在的规则
salt '*' iptables.delete filter INPUT position=3
salt '*' iptables.delete filter INPUT rule='-m state --state RELATED,ESTABLISHED-j ACCEPT'

#保存所有被控端主机规则到本地硬盘(/etc/sysconfig/iptables)
salt '*' iptables.save /etc/sysconfig/iptables

#API调用:
client.cmd('SN2013-08-022', 'iptables.append',['filter','INPUT','rule=\'-p tcp --sport 80 -j ACCEPT\''])

#network模块
#在指定被控主机'django_web'获取dig、ping、traceroute目录域名信息
salt 'django_web' network.dig www.qq.com
salt 'django_web' network.ping www.qq.com
salt 'django_web' network.traceroute www.qq.com

#获取指定被控主机'django_web'的MAC地址
salt 'django_web' network.hwaddr eth0

#检测指定被控主机'django_web'是否属于10.0.0.0/16子网范围,属于则返回True
salt 'django_web' network.in_subnet 10.0.0.0/16

#获取指定被控主机'django_web'的网卡配置信息
salt 'django_web' network.interfaces

#获取指定被控主机'django_web'的IP地址配置信息
salt 'django_web' network.ip_addrs

#获取指定被控主机'django_web'的子网信息
salt 'django_web' network.subnets

#API调用:
client.cmd('django_web', 'network.ip_addrs')

#pkg包管理模块   功能:被控主机程序包管理,如yum、apt-get等。
#为所有被控主机安装PHP环境,根据不同系统发行版调用不同安装工具进行部署,如redhat平台的yum,等价于yum -y install php
salt '*' pkg.install php

#卸载所有被控主机的PHP环境
salt '*' pkg.remove php

#升级所有被控主机的软件包
salt '*' pkg.upgrade

#Service服务模块
#开启(enable)、禁用(disable)nginx开机自启动服务
salt '*' service.enable nginx
salt '*' service.disable nginx

#针对nginx服务的reload、restart、start、stop、status操作
salt '*' service.reload nginx
salt '*' service.restart nginx
salt '*' service.start nginx
salt '*' service.stop nginx
salt '*' service.status nginx

#API调用:
client.cmd('django_web', 'service.stop',['nginx'])

通过上面介绍的10个常用模块,基本上已经覆盖日常运维操作。Saltstack还提供了
user(系统用户模块)、group(系统组模块)、partition(系统分区模块)、
puppet(puppet管理模块)、sys-tem(系统重启、关机模块)、timezone(时区管理模块)、nginx(Nginx管理模块)、mount(文件系统挂载模块),
等等,更多内容见官网介绍:http://docs.saltstack.com/ref/modules/all/in-dex.html#all-salt-modules。
当然,我们也可以通过Python扩展功能模块来满足需求。

# grains常用操作命令
匹配内核版本为2.6.32-431.el6.x86_64的主机:
salt -G 'kernelrelease:2.6.32-431.el6.x86_64' cmd.run 'uname -a'

#获取所有主机的grains项信息:
salt '*' grains.ls

#也可以获取主机单项grains数据,如获取操作系统的IPV4地址
salt 'django_web' grains.item ipv4

#获取主机'django_web'的所有grains信息
salt 'django_web' grains.items

#定义grains数据
定义grains数据的方法有两种,其中一种为在被控主机定制配置文件,
另一种是通过主控端扩展模块API实现,区别是模块更灵活,
可以通过Python编程动态定义,而配置文件只适合相对固定的键与值。下面分别举例说明。

1. 被控端主机定制grains数据
SSH登录一台被控主机,如django_web,配置文件定制的路径为/etc/salt/minion.d,参数为default_include:minion.d / *.conf,具体操作如下:
cat /etc/salt/minion.d/django.conf
grains:
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13
#在master使用命令,这个要在minion配置完等一会才可以实现
salt 'django_web' grains.item roles de-ployment cabinet

#主控端扩展模块定制grains数据--------这个没做成功
首先在主控端编写Python代码,然后将该Python文件同步到被控主机,最后刷新生效(即编译Python源码文件成字节码pyc)。在主控端bash
目录(见/etc/salt/master配置文件的file_roots项,默认的base配置在/srv/salt)下生成_grains目录,执行install -d /srv/salt/_grains开始编写代码,
实现获取被控主机系统允许最大打开文件数(ulimit-n)的grains数据。

install -d /srv/salt/_grains后自动生成下面的文件
[root@Saltstack _grains]# cat sysprocess.py
import os,sys,commands
def Grains_openfile():
    '''        return os max open file of grains value    '''
grains = {}
#init default value    
_open_file=65536
try:
    getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
except Exception,e:
    pass
    if getulimit[0]==0:
        _open_file=int(getulimit[1])
    grains['max_open_file'] = _open_file
    return grains

上面代码的说明如下。   
•grains_openfile()定义一个获取最大打开文件数的函数,函数名称没有要求,符合Python的函数命名规则即可;   
•grains={}初始化一个grains字典,变量名一定要用grains,以便Saltstack识别;   
•grains['max_open_file']=_open_file将获取的Linux ulimit-n的结果值赋予grains['max_open_file'],其中“max_open_file”就是grains的项_open_file就是grains的值。

最后同步模块到指定被控端主机并刷新生效,因为grains比较适合采集静态类的数据,比如硬件、内核信息等。当有动态类的功能需求时,需要提行刷新,具体操作如下:
同步模块 salt 'django_web' saltutil.sync_all,看看‘django_web’主机上发生了什么?文件已经同步到minion cache目录中,
如下:
/var/cache/salt/minion/extmods/grains/grains_openfile.py
/var/cache/salt/minion/files/base/_grains/grains_openfile.py
/var/cache/salt/minion/extmods/grains/为扩展模块文件最终存放位置,
刷新模块后将在同路径下生成字节码pyc;/var/cache/salt/min-ion/files/base/_grains/为临时存放位置。

salt '*' pkg.install vim  所有主机安装vim

SaltStack 使用笔记的更多相关文章

  1. saltstack学习笔记1 --安装

    salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...

  2. 1.saltstack基础笔记

    环境: master: 节点node1:阿里云:121.42.195.15 centos6.6 minion: 节点node2:腾讯云:182.254.157.19 centos6.6 一.salts ...

  3. Saltstack学习笔记--安装

    实验环境: 两台RHEL 7.2 192.168.75.135          master .minion 192.168.75.136          minion 确保机器的防火墙及seli ...

  4. saltstack实战笔记

    #运维管理工具 ansible #支持ssh,不需要客户端 saltstack #也是只是ssh,不需要客户端的 安装架构是,master /minion 安装salt的依赖模块 python zer ...

  5. SaltStack学习笔记之安装zabbix_agentd(jinja和pillar)

    一.环境说明 机器 IP 主机名 Master 192.168.0.23 minion.saltstack.com Minion 192.168.0.35 minion-node2.saltstack ...

  6. saltstack学习笔记--grains基本操作

    查看当前已经定义的监控项: [root@master ~]# salt "192.168.75.135" grains.items 192.168.75.135:     ---- ...

  7. 2.saltstack笔记之目标,模块,返回写入数据库

    作者:刘耀 QQ:22102107 一.目标(targeting Minions) 1.匹配Minions Id 匹配所有 (*) [root@node1 salt]# salt '*' test.p ...

  8. saltstack笔记

    Saltstack类似于puppet salt的核心功能使用命令 发送到远程系统是并行的而不是串行的使用安全加密的协议使用最小最快的网络载荷提供简单的编程接口 Python编写,相当轻量级通讯层采用z ...

  9. saltstack入门个人笔记

    offical website reference1 reference2 install apt-get install python-software-properties apt install ...

随机推荐

  1. 补发9.26“天天向上”团队Scrum站立会议

    组长:王森 组员:张金生 张政 栾骄阳 时间:2016.09.26 地点:612寝 组员 已完成 未完成 王森 可行性分析 找出设计亮点 张金生 寻找UI素材 设计用户操作 张政 搭建环境 基础逻辑框 ...

  2. Linux的压缩/解压缩文件处理 zip & unzip

    Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...

  3. 使用salt-cloud创建虚拟机

    salt-cloud也是基于openstack来做的,它可以支持多种云的使用.比如:Aliyun.Azure.DigitalOcean.EC2.Google Compute Engine.HP Clo ...

  4. BZOJ 2006 超级钢琴(堆+主席树)

    很好的一道题. 题意:给出长度为n的数列,选择k个互不相同的区间,满足每个区间长度在[L,R]内,求所有选择的区间和的总和最大是多少.(n,k<=5e5). 首先将区间和转化为前缀和之差,那么我 ...

  5. P1039 侦探推理

    题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...

  6. window与linux查看端口被占用

    本文摘写自: 百度经验 https://www.cnblogs.com/ieayoio/p/5757198.html 一.windows:开始---->运行---->cmd,或者是wind ...

  7. py2exe使用总结

    假如你用python写了个小程序,想给别人用或者给别人演示,但他电脑里没装python.wxpython等,这时候你可以试试py2exe,它是一个将python脚本转换成windows上的可执行程序( ...

  8. 【BZOJ1226】学校食堂(动态规划,状态压缩)

    [BZOJ1226]学校食堂(动态规划,状态压缩) 题面 BZOJ 洛谷 题解 发现\(b\)很小,意味着当前这个人最坏情况下也只有后面的一小部分人在他前面拿到饭. 所以整个结果的大致顺序是不会变化的 ...

  9. 【BZOJ3122】随机数生成器(BSGS,数论)

    [BZOJ3122]随机数生成器(BSGS,数论) 题面 BZOJ 洛谷 题解 考虑一下递推式 发现一定可以写成一个 \(X_{i+1}=(X_1+c)*a^i-c\)的形式 直接暴力解一下 \(X_ ...

  10. SpringMVC 之 表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...