SaltStack_rhel6.5

SaltStack


一.saltstack是什么:

1.介绍:

Salt是一种和以往不同的基础设施管理方法,它是建立在大规模系统高速通讯能力可以大幅提升的想法上。这种方法使得Salt成为一个强大的能够解决基础设施中许多特定问题的多任务系统。远程执行引擎是Salt的核心,它能够为多组系统创建高速、安全的双向通讯网络。基于这个通许系统,Salt提供了一个非常快速、灵活并且容易使用的配置管理系统,称之为“Salt States”。

Salt的骨干是远程执行引擎,它为系统组创建了一个高速,安全和双向的通信网络。 在这个通信系统之上,Salt提供了一个极其快速,灵活且易于使用的配置管理系统,称为Salt States。

  • 一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)
  • 一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据

开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单

2.核心功能

  • 使命令发送到远程系统是并行的而不是串行的
  • 使用安全加密的协议
  • 使用最小最快的网络载荷
  • 提供简单的编程接口

二.saltstack配置

1.环境

HostnameIPOSIdentifity
vm1172.25.6.1RHEL6.5master
vm2172.25.6.2RHEL6.5minion
vm3172.25.6.3RHEL6.5minion

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值