SaltStack
一.saltstack是什么:
1.介绍:
Salt是一种和以往不同的基础设施管理方法,它是建立在大规模系统高速通讯能力可以大幅提升的想法上。这种方法使得Salt成为一个强大的能够解决基础设施中许多特定问题的多任务系统。远程执行引擎是Salt的核心,它能够为多组系统创建高速、安全的双向通讯网络。基于这个通许系统,Salt提供了一个非常快速、灵活并且容易使用的配置管理系统,称之为“Salt States”。
Salt的骨干是远程执行引擎,它为系统组创建了一个高速,安全和双向的通信网络。 在这个通信系统之上,Salt提供了一个极其快速,灵活且易于使用的配置管理系统,称为Salt States。
- 一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)
- 一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据
开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单
2.核心功能
- 使命令发送到远程系统是并行的而不是串行的
- 使用安全加密的协议
- 使用最小最快的网络载荷
- 提供简单的编程接口
二.saltstack配置
1.环境
Hostname | IP | OS | Identifity |
---|---|---|---|
vm1 | 172.25.6.1 | RHEL6.5 | master |
vm2 | 172.25.6.2 | RHEL6.5 | minion |
vm3 | 172.25.6.3 | RHEL6.5 | minion |
2.yum仓库的搭建
2-1本地源
将需要的资源放在rhel6包里,将rhel6放在共享目录中,设置655权限
在虚拟机上配置yum源
vim /etc/yum.repos.d/yum.repo
[saltstack]
name=saltstack
baseurl=http://172.25.6.250/saltstack/rhel6
gpgcheck=0
yum repolist 检测
2-2网路镜像
浙江大学开源镜像站http://mirrors.zju.edu.cn/
安装EPEL的yum源
rpm-ivh: mirrors.zju.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
官方http://docs.saltstack.cn/topics/installation/rhel.html
rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub
Save the following file to /etc/yum.repos.d/saltstack.repo
:
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
Run sudo yum clean expire-cache
.
Run sudo yum update
.
3.解析文件:
salt需要设置解析,否则无法识别
vim /etc/hosts
172.25.6.1 vm1
172.25.6.2 vm2
172.25.6.3 vm3
172.25.6.4 vm4
4.安装salt
4-1.原码安装:
pip install salt
4-2.yum安装:
[root@vm1 ~]# yum install -y salt-master
[root@vm2 ~]# yum install -y salt-minion
[root@vm3 ~]# yum install -y salt-minion
4-3.配置minion节点:
vim /etc/salt/minion
17 master: vm1 ##指向主节点
4-4.启动服务:
vim /etc/salt/minion
17 master: 172.25.254.1 ##指向主节点
master:
[root@vm1 ~]# /etc/init.d/salt-minion start
[root@vm1 ~]# netstat -anltp
4505 推送给slave
4506 接收slave接收到报告
minion:
[root@vm2 ~]# /etc/init.d/salt-minion start
[root@vm3 ~]# /etc/init.d/salt-minion start
4-5.关联:
手动:
salt-key -L #查看状态
salt-key -f vm2 #查看秘钥
salt-key -a vm2 #匹配节点
salt-key -A #匹配所有节点
自动:
vim /etc/salt/master
#auto_accept: True #去掉#,即可自动签发
4-6.关联原理:
事实上,主从做了个公钥相互交换
查看下主从交换了公钥
yum install tree -y
[root@vm1 ~]# cd /etc/salt/pki/master/
tree .
[root@vm1 ~]# cd /etc/salt/pki/master/
[root@vm1 master]# tree .
[root@vm1 master]# tree .
├── master.pem
├── master.pub
├── minions
│ ├── host2
│ └── host3
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
主节点查看公钥
[root@vm1 master]# md5sum master.pub
ab49d70ee5b54f52854d3d3f6deca87c master.pub ##这是主节点公钥
从节点查看主节点公钥,
[root@vm3 minion]# md5sum minion_master.pub
ab49d70ee5b54f52854d3d3f6deca87c minion_master.pub
[root@vm3 minion]# pwd
/etc/salt/pki/minion
vm3从节点自己的公钥
[root@vm3 minion]# md5sum minion.pub
a660f8b4517e6fa032888ce6ff9455cb minion.pub
[root@vm3 minion]# pwd
/etc/salt/pki/minion
主节点有vm3的公钥
[root@vm1 minions]# md5sum vm3
a660f8b4517e6fa032888ce6ff9455cb vm3
[root@vm1 minions]# pwd
/etc/salt/pki/master/minions
vm2和vm3情况相同。主从彼此都交换了自己的公钥
lsof -i :4505 ##显示主从之间正在此保持连接中
4-7.命令测试:
探测主机是否存活:
其他测试命令:
[root@vm1 ~]# salt 'vm2' sys.list_functions test
vm2:
- test.arg
- test.arg_repr
- test.arg_type
- test.assertion
- test.attr_call
- test.collatz
- test.conf_test
- test.cross_test
- test.echo #给出模块的用法和示例
- test.exception
- test.false
- test.fib #斐波那契数列生成函数
- test.get_opts
- test.kwarg
- test.module_report
- test.not_loaded
- test.opts_pkg
- test.outputter
- test.ping
- test.provider
- test.providers
- test.rand_sleep
- test.rand_str
- test.retcode
- test.sleep
- test.stack
- test.true
- test.try_
- test.tty
- test.version
- test.versions
- test.versions_information
- test.versions_report
五.推送apache
任务目标:推送给vm2一个apache服务
1.设置salt文件目录文件目录
[root@vm1 ~]# vim /etc/salt/master ##设定文件目录
file_roots:
base:
- /srv/salt
[root@vm1 ~]# mkdir /srv/salt ##创建
[root@vm1 ~]# /etc/init.d/salt-master restart
在salt主目录中创建apache目录,存放apache相关配置信息文件
[root@vm1 ~]# cd /srv/salt/
[root@vm1 salt]# ls
[root@vm1 salt]# mkdir apache
[root@vm1 salt]# cd apache/
2.安装apache、php
2-1.编写推送配置文件
[root@vm1 apache]# vim http.sls
##必须以.sls结尾,在apache目录之内,前缀名任意,文件内容注意格式,严谨
【格式一】
apache-install: ##尽量别直接写成apache,有可能会冲突
pkg.installed: ##要安装的安装包
- pkgs: ##包:
- httpd
- php
【格式二】
httpd:
pkg.installed
php:
pkg.installed
两者任选其一即可
检查下vm2有没有安装httpd服务,装了的话删除
若已经安装了,使用 yum remove 软件名
卸载
[root@vm2 ~]# rpm -ql httpd php
package httpd is not installed
package php is not installed
测试:
[root@vm1 apache]# salt vm2 state.sls apache.http test=true
推送:
[root@vm1 apache]# salt vm2 state.sls apache.http
……
- Summary for vm2
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
再回过头看vm2,httpd和php服务已经安装
[root@vm2 ~]# rpm -q httpd php
httpd-2.2.15-29.el6_4.x86_64
php-5.3.3-26.el6.x86_64
2-2.设置自启动
在/srv/slat/apache/新建目录fiels,存放apache的主配置文件
[root@vm1 apache]# ls
http.sls
[root@vm1 apache]# mkdir files
[root@vm1 apache]# cd files/
[root@vm1 files]# pwd
/srv/salt/apache/files
[root@vm1 files]# ls
httpd.conf #vm2:把推送过去的httpd主配置文件传给主host1
查看主传来的httpd.conf的md5码,和vm2:/etc/httpd/conf/httpd.conf md5码相同
[root@vm1 files]# md5sum httpd.conf
27a5c8d9e75351b08b8ca1171e8a0bbd httpd.conf
[root@vm2 ~]# md5sum /etc/httpd/conf/httpd.conf
27a5c8d9e75351b08b8ca1171e8a0bbd /etc/httpd/conf/httpd.conf
修改sls文件,设置自启动
[root@vm1 files]# cd ..
[root@vm1 apache]# pwd
/srv/salt/apache
[root@vm1 apache]# ls
files http.sls
[root@vm1 apache]# vim http.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
file.managed: ##文件管理
- name: /etc/httpd/conf/httpd.conf ##目标地址
- source: salt://apache/files/httpd.conf ##文件来源
- user: root ##用户身份
- group: root ##组身份
- mode: 644 ##访问权限
service.running: ##开机自启动
- name: httpd ##服务名称
- enable: true ##开启自启
- reload: true ##设置reload重置
- watch:
- file: apache-install
推送
[root@vm1 apache]# salt vm2 state.sls apache.http
……
Summary for vm2
------------
Succeeded: 3 (changed=1)
Failed: 0
------------
Total states run: 3
Total run time: 385.570 ms
vm2查看httpd状态:
[root@vm2 ~]# ss -antlp
[root@vm2 ~]# ps ax
2-3.更改监听端口为8080
[root@vm1 apache]# vim files/httpd.conf
# Listen 80
Listen 8080
测试:
[root@vm1 apache]# salt vm2 state.sls apache.http test=true
推送:
[root@vm1 apache]# salt vm2 state.sls apache.http
在vm2上查看端口
[root@vm2 ~]# ss -antlp | grep :8080
2-4.加入index.html
创建index.html文件,向其中写入内容
[root@vm1 apache]# pwd
/srv/salt/apache
[root@vm1 apache]# ls
files http.sls
[root@vm1 apache]# echo 172.25.6.1 > ./files/index.html
编写http.sls推送文件
[root@vm1 apache]# vim http.sls
在文件管理后面加入index.html的相关配置信息
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
- name: /var/www/html/index.html
- source: salt://apache/files/index.html
- user: root
- group: root
- mode: 777
[root@vm1 apache]# salt vm2 state.sls apache.http #推送
客户端vm2测试:
[root@vm1 apache]# curl 172.25.6.2:8080
172.25.6.1
3.推送原理:
根据订阅接受,先查看是否变更,再执行
[root@vm1 apache]# tree -C ../
../
`-- apache
|-- files
| `-- httpd.conf
`-- http.sls
2 directories, 2 files
三.推送Nginx
任务目标:向vm3推送nginx服务
1.依赖性
存在依赖问题:先解决
创建pkgs目录,存放解决依赖性的配置文件,可为所有的salt文件共享
[root@vm1 apache]# cd ..
[root@vm1 salt]# ls
apache
[root@vm1 salt]# mkdir pkgs
[root@vm1 salt]# cd pkgs
[root@vm1 pkgs]# vim make.sls
nginx-make:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
2.nginx设置
2-1.nginx推送
创建nginx目录,存放nginx的salt配置
[root@vm1 salt]# mkdir nginx
[root@vm1 salt]# cd nginx/
[root@vm1 nginx]# mkdir files
[root@vm1 nginx]# cd files/
[root@vm1 files]# cp /mnt/nginx-1.14.0.tar.gz .
[root@vm1 files]# cd ..
[root@vm1 nginx]# vim install.sls
include: ##包含运行的文件
- pkgs.make
nginx-install: ##安装nginx
file.managed: ##文件管理(文件同步操作)
- name: /mnt/nginx-1.14.0.tar.gz ##地址(或者写到第一行当名字,就可以不用这行了,格式如上文)
- source: salt://nginx/files/nginx-1.14.0.tar.gz ##来源
cmd.run: ##cmd执行
- name: cd /mnt && tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$C FLAGS -g"/g' auto/cc/gcc && sed -i.bak 's/#define NGINX_VER "nginx\/" NGINX_VERSION/#define NGINX_VER "nginx"/g' src/core/nginx.h && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module &>/dev/null && make &>/dev/null && make install &>/dev/null
- creates: /usr/local/nginx ##检测/usr/local/nginx文件,有的话不执行,没有监测到再执行,防止文件重写
- require:
- pkg: nginx-make
[root@vm1 nginx]# salt vm3 state.sls nginx.install
……
Summary for vm3
------------
Succeeded: 3 (changed=1)
Failed: 0
------------
Total states run: 3
Total run time: 16.473 s
在推送的过程中可在minion中使用 ps -ax
查看正在进行的进程
2-2.设置自启动:
把推送过去安装后的配置文件传给master
[root@vm3 nginx-1.14.0]# scp /usr/local/nginx/conf/nginx.conf vm1:/srv/salt/nginx/files/
更改配置文件信息
[root@vm1 salt]# cd nginx/
[root@vm1 nginx]# cd files/
[root@vm1 files]# vim nginx.conf
4 user nginx nginx;
5 worker_processes auto;
对于没有进行推送的vm3来说,没有nginx用户
创建nginx用户:
[root@vm1 files]# cd /srv/salt/
[root@vm1 salt]# mkdir user
[root@vm1 salt]# cd user/
[root@vm1 user]# vim adduser.sls
nginx:
user.present:
- uid: 800
- shell: /sbin/nologin
继续编写nginx目录中的文件
编写推送服务文件service.sls
[root@vm1 user]# cd /srv/salt/nginx/
[root@vm1 nginx]# vim service.sls ##这个文件管理服务
include:
- nginx.install
- user.adduser
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/files/nginx.conf
/usr/local/nginx/html/index.html:
file.managed:
- source: salt://nginx/files/index.html
nginx-service:
file.managed:
- name: /etc/init.d/nginx
- source: salt://nginx/files/nginx
- mode: 755
service.running:
- name: nginx
- enable: true
- reload: true
- require:
- user: nginx
- watch:
- file: /usr/local/nginx/conf/nginx.conf
创建启动脚本和默认发布页面index.html
[root@vm1 nginx]# cd files/
[root@vm1 files]# pwd
/srv/salt/nginx/files
[root@vm1 files]# ls
nginx-1.14.0.tar.gz nginx.conf
[root@vm1 files]# echo 这里是nginx主页 > index.html
[root@vm1 files]# cat index.html
这里是nginx主页
[root@vm1 files]# mv /mnt/nginx . ##需要从外部获取,或是安装一个yum版nginx复制过来
[root@vm1 salt]# salt vm3 state.sls nginx.service
……
Summary for vm3
------------
Succeeded: 8 (changed=4)
Failed: 0
------------
Total states run: 8
Total run time: 1.059 s
2.3检测:
运行无错误后,在vm3上进行查看
ps -ax | grep nginx
查看进程
id nginx
查看用户
curl vm3
查看主页
或者用浏览器访问
三.集群推送
1.编写集群推送文件:
[root@vm1 salt]# ls
apache nginx pkgs user
[root@vm1 salt]# pwd
/srv/salt
[root@vm1 salt]# vim top.sls ##这个文件管理vm2和vm3的服务
base:
'vm2': ##vm2的服务
- apache.http
'vm3': ##vm3的服务
- nginx.service
2.执行
运行top.sls脚本,实现一键推送
[root@vm1 salt]# salt '*' state.highstate ##状态推送
……
Summary for vm3
------------
Succeeded: 8
Failed: 0
------------
……
Summary for vm2
------------
Succeeded: 3
Failed: 0
------------
四.集群nginx+httpd+haproxy
1.添加vm1从机
在vm1上安装minion,作为自己的从集
[root@vm1 salt]# yum install -y salt-minion
[root@vm1 salt]# vim /etc/salt/minion
16 #master: salt
17 master: vm1
[root@vm1 salt]# salt-key -L
Accepted Keys:
vm2
vm3
Denied Keys:
Unaccepted Keys:
vm1
Rejected Keys:
[root@vm1 salt]# salt-key -a vm1
The following keys are going to be accepted:
Unaccepted Keys:
vm1
Proceed? [n/Y] y
Key for minion vm1 accepted.
2.yum安装haproxy,获取相关文件
[root@vm1 salt]# yum install -y haproxy
[root@vm1 salt]# mkdir haproxy
[root@vm1 salt]# cd haproxy/
[root@vm1 haproxy]# vim install.sls
haproxy-install:
pkg.installed:
- pkgs:
- haproxy
file.managed:
- name: /etc/haproxy/haproxy.cfg
- source: salt://haproxy/files/haproxy.cfg
service.running:
- name: haproxy
- enable: true
- reload: true
- watch:
- file: haproxy-install
修改配置文件信息
[root@vm1 haproxy]# cd files/
[root@vm1 files]# cp /etc/haproxy/haproxy.cfg .
[root@vm1 files]# vim haproxy.cfg
3.配置多个推送文件:
[root@vm1 salt]# cd /srv/salt/
[root@vm1 salt]# vim top.sls
base:
'vm1':
- haproxy.install
'vm2':
- apache.http
'vm3':
- nginx.service
推送
[root@vm1 salt]# salt '*' state.highstate
……
Summary for vm2
------------
Succeeded: 3
Failed: 0
------------
Total states run: 3
Total run time: 378.128 ms
……
Summary for vm3
------------
Succeeded: 8
Failed: 0
------------
Total states run: 8
Total run time: 425.716 ms
……
Summary for vm1
------------
Succeeded: 3 (changed=2)
Failed: 0
------------
Total states run: 3
Total run time: 444.456 ms
4.测试:
使用命令 curl vm1
测试负载均衡
五.Grains匹配
1.介绍:
Grains是静态参数
Grains是SaltStack当中的一个数据系统,当Minion启动时Grains会把Minion的数据收集起来,比如操作系统版本、CPU 位数等。由于采用的是静态收集,只有当Minion发生重启时数据才会发生变化,在Grains的实际运用中常用于对多台Minion做操作时进行一些条件匹配,比如有上百台Minion服务器,只需要对操作系统为CentOS的做一些操作等
2.常见用法:
使用 salt 主机名 grains.items
命令查看目标主机所有的信息
[root@vm1 salt]# salt vm2 grains.items
[root@vm1 salt]# salt vm2 grains.item ipv4 ##查找vm2的ip
[root@vm1 salt]# salt vm2 grains.item ipv6 ##查找vm2的ip6
[root@vm1 salt]# salt vm2 grains.item uuid ##查找vm2的uuid
[root@vm1 salt]# salt vm2 grains.item os #查找vm2的操作系统
3.Grains匹配
3-1.过滤
格式 salt -G '目标内容' 执行动作
例如:
salt -G 'os:RedHat' cmd.run 'touch /mnt/1' ##在操作系统为redhat的主机上/mnt/新建文件1
salt -G 'os:RedHat' cmd.run 'ip addr' ##操作系统为redhat的主机上显示执行命令ip addr
salt -G 'os:RedHat' cmd.run 'ip addr show eth0' ##操作系统为redhat的主机上显示eth0信息
3-2.添加用户身份:
在 /etc/salt/minion
配置文件中更改用户身份
[root@vm2 ~]# vim /etc/salt/minion
grains:
roles:
- apache
[root@vm2 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion:root:vm2 daemon: OK
Starting salt-minion:root:vm2 daemon: OK
[root@vm3 html]# vim /etc/salt/minion
grains:
roles:
- nginx
[root@vm3 html]# /etc/init.d/salt-minion restart
Stopping salt-minion:root:vm3 daemon: OK
Starting salt-minion:root:vm3 daemon: OK
效果检测:
vm3 主机添加user
[root@vm3 html]# vim /etc/salt/minion
user:
lel
[root@vm3 html]# /etc/init.d/salt-minion restart
一键推送文件top.sls
[root@vm1 salt]# vim top.sls
base:
'vm1':
- haproxy.install
'roles:apache':
- match: grain
- apache.http
'roles:nginx':
- match: grain
- nginx.service
[root@vm1 salt]# salt '*' state.highstate
也是可以的
六.Pillar
1.介绍:
pillar是动态参数。
相对于Grains的静态参数,Pillar可以配置更灵活的参数,熟练地运用Pillar可以十分强大的发挥Saltstack的威力。
Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。
存储位置:存储在master端存放需要提供给minion的信息
敏感信息:每个minion只能访问master分配给自己的信息
2.grain和pillar区别
1.grains存储的是静态、不常变化的内容,pillar则相反
2.grains是存储在minion本地,而pillar存储在master本地
3.minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改
3.清理Grains的参数设置
vm1:
vim /etc/salt/minion
#grains:
# roles:
# haproxy ##注意没短杠
[root@vm1 salt]# vim /etc/salt/master
file_roots: ##524行
base:
- /srv/salt/
vm2:
vim /etc/salt/minion
grains:
roles:
apache
/etc/init.d/salt-minion restart
vm3:
vim /etc/salt/minion
grains:
roles:
nginx
/etc/init.d/salt-minion restart
4.matser配置pillar工作目录
[root@vm1 salt]# mkdir /srv/pillar
[root@vm1 salt]# cd /srv/pillar/
[root@vm1 pillar]# mkdir web
[root@vm1 pillar]# vim web/server.sls
{% if grains['roles'] == 'apache' %}
webserver: apache
{% elif grains['roles'] == 'nginx' %}
webserver: nginx
{% endif %}
[root@vm1 pillar]# vim top.sls
base:
'*':
- web.server
[root@vm1 pillar]# tree -C ./
./
|-- top.sls
`-- web
`-- server.sls
完成后刷新动态参数
[root@vm1 pillar]# salt '*' saltutil.refresh_pillar
测试
[root@vm1 pillar]# salt '*' pillar.item webserver
host2:
----------
webserver:
apache
host3:
----------
webserver:
nginx
host1: ##当然没有角色,web/server.sls就没定义host1
----------
webserver:
上边的 /srv/pillar/web/server.sls
可以写成这样
{% if grains['fqdn'] == 'vm2' %}
webserver: apache
{% elif grains['fqdn'] == 'vm3' %}
webserver: nginx
{% endif %}
测试:
七.其他一些命令
[root@vm1 pillar]# salt 'vm' service.get_all ##查看vm3开启的所有服务
[root@vm1 pillar]# salt 'vm3' service.start nginx ## 启动vm3的nginx
[root@vm1 pillar]# salt 'vm3' service.stop nginx ## 关闭vm3的nginx
[root@vm1 ~]# salt-cp '*' /etc/passwd /tmp/ ##复制/etc/passwd 到所有节点/tmp下
[root@vm1 ~]# salt '*' cmd.run 'rm -fr /tmp/passwd' ##删除所有节点/tmp/passwd
[root@vm1 ~]# salt '*' state.show_top ##查看最近动过的服务
[root@vm1 ~]# salt '*' state.single pkg.installed tree ##所有node安装tree
八.执行命令的查看,保存,执行结果状态
1.minion端会给master和数据库主机发份return
这里把数据库安装在host1上,你也可以装在其他主机上上不要紧
[root@vm1 pillar]# yum install -y mysql-server
[root@vm1 pillar]# /etc/init.d/mysqld start ##启动数据库
[root@vm1 pillar]# mysql_secure_installation ##初始化设置密码westos
[root@vm1 pillar]# cd /mnt/
[root@vm1 mnt]# mysql -pwestos < test.sql ##把准备好的主句库导进去
[root@vm1 mnt]# mysql -pwestos ##授权
mysql> grant all on salt.* to salt@'%' identified by 'westos';
Query OK, 0 rows affected (0.00 sec)
其中一minion节点host2安装python-MYSQL模块,配置minion文件
[root@vm2 ~]# yum install MySQL-python -y
817 mysql.host: '172.25.6.1'
818 mysql.user: 'salt'
819 mysql.pass: 'westos'
820 mysql.db: 'salt'
821 mysql.port: '3306'
[root@vm2 ~]# /etc/init.d/salt-minion restart
在master上执行条命令
[root@vm1 mnt]# salt 'vm2' test.ping --return mysql
vm2:
True
登陆数据库查看,执行了两ping’命令
[root@vm1 mnt]# mysql -h 172.25.6.1 -u salt -pwestos
mysql> select * from salt.salt_returns;
查看最近执行的命令 salt-run jobs.list_jobs
2.设置返还给master,不给数据库,由matser去发送给数据库
[root@vm1 pillar]# vim /etc/salt/master
[root@vm1 pillar]# /etc/init.d/salt-master restart
!!如果无法启动,则在每行前面加1个空格即可,bug
MySQL-python这个模块要装在master上
[root@vm1 pillar]# yum install MySQL-python -y
[root@vm1 pillar]# salt vm3 cmd.run 'df -h'
在客户机上查看
[root@zwh saltstack]# mysql -h 172.25.6.1 -u salt -pwestos
MySQL [(none)]> select * from salt.salt_returns;
九.自定义模块
1.编写自己的模块远程执行
[root@vm1 pillar]# cd /srv/salt/
[root@vm1 salt]# mkdir _modules ##必须是这个名字_modules ,否则无法同步
[root@vm1 salt]# cd _modules/
[root@vm1 _modules]# vim my_disk.py
#!/usr/bin/env python
def if():
cmd = 'df -h'
return __salt__['cmd,run'](cmd)
2.同步这个模块到vm3
salt vm3 saltutil.sync_modules
3.vm3查看该模块
4.执行同步过去的模块
salt vm3 my_disk.df
十.Jinja模板
这里实例httpd服务
1.简单设置
进入到salt目录中的apache中,配置好相关文件
[root@vm1 _modules]# cd /srv/salt/apache/
[root@vm1 apache]# ls
files http.sls
[root@vm1 apache]# tree .
.
|-- files
| |-- httpd.conf
| `-- index.html
`-- http.sls
2.调用jinja模块
编辑配置文件 http.sls
3.配置文件引用
编辑apache的主配置文件 vim files/httpd.conf
!!就这行引用,固定格式
为了实验效果,建议 yum remove httpd -y
卸载vm2上的apache
4.推送:
[root@vm1 apache]# salt vm2 state.sls apache.http
官方站点:http://www.saltstack.com/
官方文档:http://docs.saltstack.com/
中文站点:http://www.saltstack.cn/
中文手册:http://docs.saltstack.cn/