centos安装方法
公共仓库安装(SaltStack 2015.5.5),从0.9.4版本开始支持EPEL源安装,官方文档说使用EPEL仓库安装会有各种依赖问题需要解决目前使用阿里云的yum仓库安装没有出现问题。官方文档提到的问题主要有:最新版的SaltStack不会及时在EPEL中更新,bpython-jinja2从EPEL移至"RHEL Server Optional Channel",cSaltStack 2015.8需要python-crypto(2.6.1及以上)和python-tornado4.2.1及以上但是Redhat5和6的EPEL中没有,所以在安装过程中会出现如下报错:
Error: Package: salt-2015.5.2-3.el6.noarch (epel)
Requires: python-jinja2
Error: Package: salt-2015.5.2-3.el6.noarch (epel)
Requires: PyYAML
Error: Package: salt-2015.5.2-3.el6.noarch (epel)
Requires: python-crypto
master安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repoyum install salt-master -y #安装master端/etc/init.d/salt-master start #启动masterchkconfig salt-master on #设置master为开机启动
minion安装&配置
yum install salt-minion -yvim /etc/salt/minion将#master: salt修改为master: 192.168.56.6 #其中192.168.56.6为master ip请根据实际情况进行修改当然要想简单也可以采用如下方法sed -in 's\#master: salt\master: 192.168.56.6\g' /etc/salt/minionchkconfig salt-minion on #设置开机启动
master管理
虽然我们上一步在minion端设置了master的Ip想让master进行管理,但是但是但是,并不是你设置了我的ip我就要管你,我得同意才可以。(咳咳这有点像追女孩子)。
查看待管理主机
salt-key #此操作在master端进行![]()
从上图中,我们不难看出,等待管理的主机有两台分别是salt-minion1.com和salt-minion2.comsalt-key -A #接收全部salt-key -a 指定主机 #可以接收指定主机,支持通配符操作salt-key -D #删除全部已管理的主机(十分不建议这么做)salt-key -d 指定主机 #不在管理指定主机![]()
之后我们在执行salt-key,就可以看到两台主机已加入被管理的列表中![]()
Redhat6安装方法:
从2015.8.0版本后Salt在RHEL5、6、7上的安装可以使用SaltStack仓库
下载并安装SaltStack仓库的公钥并导入
#下载公钥
[root@centos67 ~]# wget https://repo.saltstack.com/yum/rhel6/SALTSTACK-GPG-KEY.pub
#查看本机安装的公钥
[root@centos67 ~]# rpm -qa gpg-pubkey*
gpg-pubkey-de57bfbe-53a9be98
gpg-pubkey-c105b9de-4e0fd3a3
#查看公钥信息
[root@centos67 ~]# rpm -qi gpg-pubkey-de57bfbe-53a9be98
#删除公钥
[root@centos67 ~]# rm -f SALTSTACK-GPG-KEY.pub
编辑SaltStack yum仓库配置文件/etc/yum.repos.d/saltstack.repo添加如下信息
[root@centos67 ~]# vim /etc/yum.repos.d/saltstack.repo
####################
# Enable SaltStack's package repository
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS 6
baseurl=https://repo.saltstack.com/yum/rhel6
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/rhel6/SALTSTACK-GPG-KEY.pub
[root@centos67 ~]# yum clean expire-cache
已加载插件fastestmirror, security
Cleaning repos: base epel extras saltstack-repo updates
接下来就可以按照在centos中安装master和minion的步骤操作了。
问题与解决:
1.当master无法远程执执行命令时(Minion did not return. [No response] ):查看minion的日志(/var/log/salt/minion),如果日志中报
The Salt Master has cached the public key for this node,
this salt minion will wait for 10 seconds before attempting to re-authenticate,表明master没有确认证书,要关闭防火墙、selinux,或者,将master所管理的minion全部删除,并且把minion的minion_d、pki文件删除,重启minion,master重新添加。
2.当master无法启动时,报address already used,表明地址被占用,或者程序没有正常关闭,此时将进程杀掉,重新启动即可。
master的迁移:
1.必须保证master的key、以及已经添加成功或者拒绝的minion的所有key
将原来的master/etc/salt/pki/master,这个文件打包,然后考入新的master相目录下即可,
然后修改minion配置文件的master的ip,然后通过原先的master重启服务。
salt提供了一个启动的模块 salt "*" service.restart 服务名
returner
默认情况下,发给salt-minion的命令执行结果将返回给master,salt-stack returner的接口允许将结果发送给任意系统。
在执行命令的同时,salt-stack会将匹配到的主机生成一个列表,等返回结果时,与列表做对比,这样就能知道哪些服务器没有返回数据。
内置的returner模块列表

就以syslog_return、mysql为例
1. salt "*" test.ping --return syslog
在minion的日志(/var/log/message):python2.6: {"fun_args": [], "jid": "20170413143645199187", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "minion1"}
这样就记录到了执行结果
2.minion将执行结果存到mysql数据库中
(1)在minion的配置文件中添加数据库信息

2.在minion上安装python的mysql模块(pymysql)
3.创建数据库

4.
安装mysql模块
salt "*" cmd.run 'yum install pymysql'
这种情况每个minion都会连接mysql,压力比较大,基本不怎么用
even
even是一个本地的ZeroMQPUB Interace,even是一个开放的系统,用于发送信息通知salt或其他的操作系统。
每个event都有一个标签,事件标签允许快速置顶过滤事件,除了标签之外,每个事件都有一个数据结构,这个
数据结构是一个dict类型,其中包含关于事件的信息。
监听在master上的所有结果,然后把结果写入mysql
文件系统
配置文件的修改以及文件的传输:
1.修改配置文件
2.创建目录
3.写sls文件
vim /etc/salt/master 取消配置文件中的注释即可。
file_roots:
base:
- /srv/salt/
dev:
prod:
/srv/salt/ 这个目录需要创建,在/srv/salt/ 创建自己所需的文件
eg:mkdir -p etc/script 然后讲一个实验脚本放进去
在master上执行: salt "*" cmd.script salt://etc/script/test.sh -------salt://就代表/srv/salt目录。。
同步配置文件:
cd /srv/salt/
创建一个hosts.sls文件
/tmp/hosts: -----------要把文件同步到什么位置
file.managed: --------使用文件系统的管理模块
- source: salt://etc/hosts --------要同步的文件(要提前把/etc/hosts文件拷贝过来)
- user: root
- group: root
- mode: 600 ------权限
然后在创建一个top.sls文件
base:
'*': -----------要同步的服务器
- hosts--------要使用哪一个sls文件,这个hosts就是指的hosts.sls文件。
执行: salt '*' state.sls + 要执行的文件(这个文件必须是那个包含要同步文件的那个sls文件) 或者 salt '*' state.highstate
如果是修改配置文件的话,直接修改master中/srv/salt/的配置文件即可,然后执行同步命令就行。
Grains
类似于puppet、facter功能
主要是采集一些基本信息,可以在客户端定义,汇报到服务端,也可以从服务端定义推下去再把结果报上来。
使用方法:
salt "*" grains.ls 获取所有信息的名字
salt "*" grains.items 获取所有信息的名字以及内容
salt "*" grains.item os 查看os的内容
这则匹配:
salt -G 'os:CentOS' test.ping
salt -G 'cpuarch:x86_64' grains.items num_cpus
salt -G 'ec2_tags:enviornment:*production*'
自定义grains(grains提供的不够我们使用的,需要我们自定义)
主要是在minion上进行
grains: 固定写法
roles: 名字
- webserver 值,这个roles中有多个值就用列表的形式显示出来,
- memcache
deployment: datacenter4 名字:值
cabinet: 13
cab_u: 14-15
State
salt状态系统的核心是sls,sls表示状态系统将会是什么样的一种状态,而是以一种简单的格式来包含这些数据,这经常也被叫做配置管理。主要使用YAML语法
sls文件实际上只是一些,字典、列表、字符串、数字。
YAML语法:
1.每个缩进级别由两个空格组成,不要用tabs
2.如果是字典的话,冒号前面的就是键名,冒号后面就是值,中间用空格隔开。
3.逍遥表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表的一部分。
STATE模块
http://docs.saltstack.cn/topics/tutorials/walkthrough.html
安装nginx
这里确保可以直接通过yum安装nginx
nginx: 自己定义
pkg: 通过pkg安装
- installed 必须安装
service: 启动服务
- running
- enable: True 下面两个表示可以运行这个操作
- reload: True
- watch: 监控,当以下两个文件有变化时,进行同步
- pkg: nginx 监控的软件为nginx
- file: /etc/nginx/nginx.conf 这只是一个名字,和下面的名字相同就行
- file: /etc/nginx/conf.d/default.conf
/etc/nginx/nginx.conf:
file.managed: 管理一个文件
- source: salt://etc/nginx/nginx.conf 同步配置文件的位置
- user: root
- group: root
- mode: 644
/etc/nginx/conf.d/default.conf:
file.managed:
- source: salt://etc/nginx/conf.d/default.conf
- user: root
- group: root
- mode: 644
执行命令:salt "*" state.sls nginx
如果配置文件修改,在客户端执行salt-call state.sls ngix就可以了,这个可以在客户端中五分钟执行一次。放到crontab里。
pillar
pillar是salt非常重要的一个组件,它用于特定的minion定义任何所需要的数据,这些数据可以被salt的其他组件使用。每个minion只能看到自己特定的数据
pillar也是一个单独模块,也需要创建单独的目录,在master的配置文件中进行设置,可以使用默认的就行,取消注释。
用途:
1.传递敏感数据(使用独立的加密session)
schedule:
highstate:
function:state.highstate
minutes:1
语法:
必须写top.sls,也就是必须写路由。
base:
test1:
- match: nodegroups 匹配test1这个组
- nginx 执行nginx这个动作,执行pillar这个目录下的nginx
cd /srv/pillar/nginx/
vim init.sls
schedule:
nginx:
function:state.sls 执行的函数
minutes:1
args:
- 'nginx' 执行命令
salt '*' saltutil.refresh_pillar 刷新规则
salt '*' pillar.data 查看配置是否生效


