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. 0330复利计算java版

    package compounding; import java.util.Scanner; public class compounding1_1 { public static void main ...

  2. exce族函数详解

    exec函数族 函数族说明 fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的方 ...

  3. 新浪 ip 地址库

    API地址:http://int.dpool.sina.com.cn/iplookup/iplookup.php 帮助 1 2 3 4 5 6 7 8 function get_location($i ...

  4. 【UNIX环境高级编程】线程同步

    当多个线程共享相同的内存时,需要确保每个线程看到一致的数据视图.如果每个线程使用的变量都是其他线程不会读取和修改的,那么就不存在一致性问题.同样,如果变量是只读的也不会有一致性问题.但是,当一个线程可 ...

  5. 【.Net】vs2017 自带发布工具 ClickOnce发布包遇到的问题

    一.遇到的问题 在安装了vs2017 社区版(Community)之后  想打包安装程序(winform) 还是想用之前的 installshield来打包  发现居然打不了,在官网查了    ins ...

  6. 转---Post/Redirect/Get pattern

    今天重新认识了Post/Redirect/Get pattern, 感谢hip-hop的session, 一下帮助我理清了概念和思路. 谈到pattern,首先要清楚它为了什么而产生: PRG (参见 ...

  7. vdbench测试过程中遇到的小问题

    1.报Slave hd2-0 prematurely terminated 错误 首先根据提示查看hd2-0.stdout.html文件获取更多的错误信息,这个问题一般是未安装vdbench或者路径不 ...

  8. [BZOJ4540][HNOI2016]序列 莫队

    4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n ...

  9. 洛谷P4606 [SDOI2018]战略游戏 【圆方树 + 虚树】

    题目链接 洛谷P4606 双倍经验:弱化版 题解 两点之间必经的点就是圆方树上两点之间的圆点 所以只需建出圆方树 每次询问建出虚树,统计一下虚树边上有多少圆点即可 还要讨论一下经不经过根\(1\)的情 ...

  10. Redis的Sorted Set有序集合命令

    Sorted Set是Set的一个升级版本,它在Set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序.可以理解为有两列的mysql表, ...