环境: rhel6.5 server1master
server2 minion server3 minion
配置yum安装包:rhel6
[root@server1 ~]# yum install salt-master
[root@server1 ~]# /etc/init.d/salt-master start
[root@server2 ~]# yum install salt-minion
[root@server2 ~]# vim /etc/salt/minion
master: 172.25.135.1
[root@server2 ~]# /etc/init.d/salt-minion start
[root@server1 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
server2
Proceed? [n/Y] y
Key for minion server2 accepted.
[root@server1 ~]# salt-key -L
Accepted Keys:
server2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server1 ~]# salt server2 test.ping
server2:
True
[root@server1 ~]# salt server2 cmd.run hostname
server2:
server2
[root@server1 ~]# salt server2 cmd.run df
server2:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_server0-lv_root 18102140 2078072 15104516 13% /
tmpfs 510200 16 510184 1% /dev/shm
/dev/vda1 495844 34532 435712 8% /boot
[root@server1 ~]# salt server2 cmd.run poweroff #测试关机
server2:
[root@server1 ~]# vim /etc/salt/master
saltstack 安装和基本配置使用
[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# ls
[root@server1 salt]# mkdir apache
[root@server1 salt]# cd apache/
[root@server1 apache]# vim install.sls
httpd:
pkg.installed #写个简单的http安装
[root@server1 apache]# salt server2 state.sls apache.install
[root@server1 apache]# mkdir files
[root@server2 ~]# scp /etc/httpd/conf/httpd.conf server1:/srv/salt/apache/files
[root@server1 apache]# cd files/
[root@server1 files]# ls
httpd.conf
[root@server1 files]# vim httpd.conf #简单修改一下80端口为8080
[root@server1 apache]# ls
files install.sls
[root@server1 apache]# vim install.sls
apache-install:
pkg.installed:

  • pkgs:

    • httpd
    • php
    • php-mysql

    file.managed:

  • name: /etc/httpd/conf/httpd.conf
  • source: salt://apache/files/httpd.conf
  • mode: 644
  • user: root
  • group: root

    service.running:

  • name: httpd
  • enable: Ture
  • watch:
    • file: apache-install
      [root@server1 apache]# salt server2 state.sls apache.install #server2上apache自动修改端口为8080
      [root@server1 salt]# mkdir pkgs #自动推送源码nginx
      [root@server1 salt]# cd pkgs
      [root@server1 pkgs]# vim make.sls
      gcc-make:
      pkg.installed:
  • pkgs:
    • gcc
    • pcre-devel
    • openssl-devel

[root@server1 pkgs]# ls
make.sls
[root@server1 pkgs]# cd ..
[root@server1 salt]# ls
apache nginx pkgs
[root@server1 salt]# cd nginx/
[root@server1 nginx]# ls
files install.sls
[root@server1 nginx]# vim install.sls
include:

  • pkgs.make

nginx-install:
file.managed:

  • name: /mnt/nginx-1.14.0.tar.gz
  • source: salt://nginx/files/nginx-1.14.0.tar.gz

    cmd.run:

  • name: cd /mnt && tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && sed -i.bak 's/#define NGINX_VER "nginx\/" NGINX_VERSION/#define NGINX_VER "nginx"/g' src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CCFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio &>/dev/null && make &>/dev/null && make install &>/dev/null && cd .. && rm -fr nginx-1.14.0
  • creates: /usr/local/nginx
    [root@server1 nginx]# salt server3 state.sls nginx.install
    写启动脚本修改一些
    [root@server1 nginx]# vim service.sls
    include:
    • nginx.install

/usr/local/nginx/conf/nginx.conf:
file.managed:

  • source: salt://nginx/files/nginx.conf

/etc/init.d/nginx:
file.managed:

  • source: salt://nginx/files/nginx
  • mode: 755

nginx:
service.running:

  • reload: True
  • watch:
    • file: /usr/local/nginx/conf/nginx.conf
      [root@server1 files]# ls
      nginx nginx-1.14.0.tar.gz nginx.conf #将启动脚步和配置文件放到nginx中的files文件夹内
      [root@server1 salt]# vim top.sls
      base:
      "server2":
      • apache.service
        "server3":
      • nginx.service
        [root@server1 salt]# salt '*' state.highstate
        负载均衡haproxy
        [root@server1 salt]# yum install salt-minion
        [root@server1 salt]# vim /etc/salt/minion #修改master端口
        [root@server1 salt]# /etc/init.d/salt-minion start
        [root@server1 salt]# salt-key -a server1
        [root@server1 salt]# mkdir haproxy
        [root@server1 salt]# cd haproxy/
        [root@server1 haproxy]# mkdir files
        [root@server1 haproxy]# cd files/
        [root@server1 files]# ls #包和配置文件拷贝过来
        haproxy-1.6.11.tar.gz haproxy.cfg haproxy.init
        [root@server1 haproxy]# vim install.sls
        include:
      • pkgs.make

haproxy-install:
file.managed:

  • name: /mnt/haproxy-1.6.11.tar.gz
  • source: salt://haproxy/files/haproxy-1.6.11.tar.gz
    cmd.run:
  • name: cd /mnt && tar zxf haproxy-1.6.11.tar.gz && cd haproxy-1.6.11 && make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy &> /dev/null && make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy install
  • creates: /usr/local/haproxy

/etc/haproxy:
file.directory:

  • mode: 755

/usr/sbin/haproxy:
file.symlink:

  • target: /usr/local/haproxy/sbin/haproxy
    [root@server1 haproxy]# vim service.sls
    include:
    • haproxy.install
    • users.haproxy

/etc/haproxy/haproxy.cfg:
file.managed:

  • source: salt://haproxy/files/haproxy.cfg

haproxy-service:
file.managed:

  • name: /etc/init.d/haproxy
  • source: salt://haproxy/files/haproxy.init
  • mode: 755
    service.running:
  • name: haproxy
  • relpad: True
  • watch:
    • file: /etc/haproxy/haproxy.cfg

[root@server1 salt]# mkdir users
[root@server1 users]# vim haproxy.sls
haproxy-group:
group.present:

  • name: haproxy
  • gid: 200

haproxy-user:
user.present:

  • name: haproxy
  • uid: 200
  • gid: 200
  • shell: /sbin/nologin
  • home: /usr/local/haproxy
  • createhome: False
    [root@server1 salt]# vim top.sls
    base:
    "server1":
    • haproxy.service
      "server2":
    • apache.service
      "server3":
    • nginx.service
      [root@server1 haproxy]# ls
      files install.sls service.sls
      [root@server1 haproxy]# cd files/
      [root@server1 files]# ls
      haproxy-1.6.11.tar.gz haproxy.cfg haproxy.init
      [root@server1 files]# vim haproxy.cfg #修改配置文件
      saltstack 安装和基本配置使用saltstack 安装和基本配置使用
      [root@server1 files]# salt '*' state.highstate #推送完毕,给server2
      和server3发布目录写个测试页面
      [root@server1 files]# for i in {1..6}; do curl 172.25.135.1; done #测试
      nginx
      apache
      nginx
      apache
      nginx
      apache
      批量主机定义:
      [root@server1 salt]# salt server3 grains.item os
      server3:

      os:
      RedHat
      [root@server1 salt]# salt server2 grains.item os
      server2:

      os:
      RedHat
      [root@server1 salt]# salt -G 'os:redhat' cmd.run hostname
      server2:
      server2
      server1:
      server1
      server3:
      server3
      [root@server2 ~]# vim /etc/salt/minion
      grains:
      roles:

  • apache

[root@server2 ~]# /etc/init.d/salt-minion restart
[root@server3 ~]# cd /etc/salt/
[root@server3 salt]# vim grains
roles: nginx
[root@server1 salt]# salt server2 grains.item roles
server2:

roles:
    - apache

[root@server1 salt]# salt server3 grains.item roles
server3:

roles:
    nginx

[root@server1 salt]# vim top.sls
base:
"server1":

  • haproxy.service
    "roles:apache":
  • match: grain
  • apache.service
    "roles:nginx":
  • match: grain
  • nginx.service
    [root@server1 salt]# salt '*' state.highstate

[root@server1 salt]# mkdir _grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
#! /usr/bin/env python
def my_grains():
grains = {};
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
[root@server1 _grains]# salt server2 saltutil.sync_grains
[root@server1 _grains]# salt server2 grains.item hello
server2:

hello:
    world

[root@server1 salt]# cd /etc/salt
[root@server1 salt]# mkdir /srv/pillar/
[root@server1 pillar]# /etc/init.d/salt-master restart
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# ls
[root@server1 web]# vim install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3'%}
webserver: nginx
{% endif %}

[root@server1 web]# cd ..
[root@server1 pillar]# ls
web
[root@server1 pillar]# vim top.sls
base:
'*':

  • web.install
    [root@server1 pillar]# salt '*' pillar.items
    server2:

    webserver:
    httpd
    server1:

    server3:

    webserver:
    nginx
    [root@server1 pillar]# salt '' saltutil.refresh_pillar
    server2:
    True
    server3:
    True
    server1:
    True
    [root@server1 pillar]# salt '
    ' pillar.items webserver
    server3:

    webserver:
    nginx
    server1:

    webserver:
    server2:

    webserver:
    httpd
    [root@server1 pillar]# salt -I 'webserver:nginx' test.ping
    server3:
    True
    [root@server1 pillar]# salt -S 172.25.135.0/24 test.ping
    server3:
    True
    server2:
    True
    server1:
    True
    金佳模版:
    [root@server1 salt]# cd apache/
    [root@server1 apache]# vim install.sls
    apache-install:
    pkg.installed:

  • pkgs:

    • httpd
    • php
    • php-mysql

    file.managed:

  • name: /etc/httpd/conf/httpd.conf
  • source: salt://apache/files/httpd.conf
  • mode: 644
  • user: root
  • group: root
  • template: jinja
  • context:
    port: 80
    bind: {{ grains['ipv4'][1] }}
    [root@server1 apache]# vim files/httpd.conf #修改监听端口
    Listen {{ bind }}:{{ port }}
    [root@server1 apache]# salt server2 state.sls apache.install
    拓展模块:
    [root@server1 salt]# mkdir _modules/
    [root@server1 _modules]# vim my_disk.py
    #! /usr/bin/env python

def df():
cmd = 'df -h'
return salt'cmd.run'

[root@server1 _modules]# salt '*' saltutil.sync_modules
server1:

  • modules.my_disk
    server2:
  • modules.my_disk
    server3:
  • modules.my_disk
    server4:
  • modules.my_disk
    [root@server1 _modules]# salt server2 my_disk.df
    server2:
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg_server0-lv_root 18G 2.1G 15G 13% /
    tmpfs 499M 16K 499M 1% /dev/shm
    /dev/vda1 485M 34M 426M 8% /boot
    [root@server1 _modules]# vim /etc/salt/master
    syndic_master: 172.25.135.4
    [root@server1 _modules]# salt-key -d server4
    [root@server4 ~]# /etc/init.d/salt-minion stop
    [root@server4 ~]# chkconfig salt-minion off
    [root@server4 ~]# yum install salt-master
    [root@server4 ~]# vim /etc/salt/master
    order_masters: True

[root@server4 ~]# /etc/init.d/salt-master start
[root@server4 ~]# salt-key -L
[root@server4 ~]# salt-key -A
[root@server1 _modules]# yum install salt-syndic
[root@server1 _modules]# /etc/init.d/salt-master restart
[root@server1 _modules]# salt-key -L
[root@server1 _modules]# /etc/init.d/salt-syndic start
[root@server4 ~]# salt '' my_disk.df
[root@server4 ~]# salt '
' test.ping
salt-ssh 推送
[root@server1 _modules]# yum install salt-ssh
[root@server1 _modules]# vim /etc/salt/roster
server2:
host: 172.25.135.2
user: root
passwd: redhat
server3:
host: 172.25.135.3
user: root
passwd: redhat

停掉server2和server3上salt-minion
[root@server1 _modules]# salt-ssh '*' test.ping