Centos 7下saltstack安裝配置詳解

簡(jiǎn)述

saltstack

  • saltstack是一個(gè)新的基礎(chǔ)平臺(tái)管理工具,只需要花費(fèi)數(shù)分鐘即可運(yùn)行起來诡蜓,可以支撐管理上萬臺(tái)服務(wù)器的規(guī)模,數(shù)秒鐘即可完成數(shù)據(jù)傳遞。
  • saltstack是使用python語言開發(fā)的班巩,同時(shí)也支持restAPI方便二次開發(fā)以及和它平臺(tái)集成,同時(shí)官方也發(fā)布了一個(gè)Web管理界面halite嘶炭。

優(yōu)點(diǎn):

  • 首先抱慌,他速度快,基于消息隊(duì)列+線程眨猎,跑完多臺(tái)設(shè)備抑进,都是毫秒級(jí)別的
  • 其次,非常靈活宵呛,源碼是python单匣,方便理解和自定義模塊(python 語言相對(duì)于其他的perl、ruby等還是很好理解的)
  • 命令簡(jiǎn)單宝穗,功能強(qiáng)大

saltstack運(yùn)行方式

  • Local
  • Master/Minion
  • Salt SSH

本文使用Master/Minion運(yùn)行方式户秤。

saltstack三大功能

  • 遠(yuǎn)程執(zhí)行
  • 配置管理
  • 云管理

saltstack數(shù)據(jù)系統(tǒng)

  • Grains (靜態(tài)數(shù)據(jù))
  • pillar (動(dòng)態(tài)數(shù)據(jù))

saltstack配置管理

  • SLS(YAML、Jinja)
  • Highstate
  • States Module

實(shí)現(xiàn)環(huán)境

準(zhǔn)備三臺(tái)機(jī)器逮矛,這三臺(tái)機(jī)器都關(guān)閉 selinux鸡号,清空防火墻規(guī)則。

  • saltstack ==> 172.16.0.19 (服務(wù)端)
  • client1 ==> 172.16.0.20 (客戶端)
  • client2 ==> 172.16.0.21 (客戶端)

查看版本和內(nèi)核

[root@saltstack ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core) 
[root@saltstack ~]# uname -rm
3.10.0-514.6.1.el7.x86_64 x86_64

分別設(shè)置 hostname须鼎,設(shè)置完畢xshell注銷重新連接一下

[root@saltstack ~]# hostnamectl set-hostname saltstack
[root@client1 ~]# hostnamectl set-hostname client1
[root@client2 ~]# hostnamectl set-hostname client2

編輯 hosts 文件
每臺(tái)都設(shè)置鲸伴,若機(jī)器太多,可以通過搭建 DNS晋控,則不用在每臺(tái)機(jī)器上設(shè)置這個(gè)

[root@saltstack ~]# vi /etc/hosts
添加下面內(nèi)容
172.16.0.19 saltstack
172.16.0.20 client1
172.16.0.21 client2
開始安裝

分別為三臺(tái)機(jī)器添加阿里云epel源

[root@saltstack ~]# mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
[root@saltstack ~]# mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
[root@saltstack ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

服務(wù)端安裝

[root@saltstack ~]# yum -y install salt-master salt-minion

客戶端安裝

[root@client1 ~]# yum -y install salt-minion

客戶端安裝

[root@client2 ~]# yum -y install salt-minion
配置master

服務(wù)端和客戶端都要配置

[root@saltstack ~]# vi /etc/salt/minion +16
以下兩種方式都可以汞窗,選擇其中一種即可
# master改為服務(wù)端的主機(jī)名
master: saltstack    
# master改為服務(wù)端的IP
master: 172.16.0.19 

分別修改三臺(tái)機(jī)器minion文件中的的id為自己的主機(jī)名

[root@client1 ~]# vi /etc/salt/minion +78
id: client1
[root@client2 ~]# vi /etc/salt/minion +78
id: client2

啟動(dòng)saltstack服務(wù)
服務(wù)端

[root@saltstack ~]# systemctl enable salt-master
[root@saltstack ~]# systemctl enable salt-minion
[root@saltstack ~]# systemctl start salt-master
[root@saltstack ~]# systemctl start salt-minion

客戶端

[root@client1 ~]# systemctl enable salt-minion
[root@client1 ~]# systemctl start salt-minion
配置認(rèn)證

服務(wù)端操作

[root@saltstack ~]# salt-key -a client1
The following keys are going to be accepted:
Unaccepted Keys:
client1
Proceed? [n/Y] y     
Key for minion client1 accepted.

[root@saltstack ~]# salt-key -a client2
The following keys are going to be accepted:
Unaccepted Keys:
client2
Proceed? [n/Y] y
Key for minion client2 accepted.
[root@saltstack ~]# salt-key -a saltstack
The following keys are going to be accepted:
Unaccepted Keys:
saltstack
Proceed? [n/Y] y
Key for minion saltstack accepted.

[root@saltstack ~]# salt-key 
Accepted Keys:
client1
client2
saltstack
Denied Keys:
Unaccepted Keys:
Rejected Keys:

說明:-a :accept ,-A:accept-all赡译,-d:delete仲吏,-D:delete-all◎蚍伲可以使用 salt-key 命令查看到已經(jīng)簽名的客戶端裹唆。此時(shí)我們?cè)诳蛻舳说?/etc/salt/pki/minion 目錄下面會(huì)多出一個(gè)minion_master.pub 文件。

測(cè)試驗(yàn)證
示例1: salt '*' test.ping //檢測(cè)通訊是否正常只洒,也可以指定其中一個(gè) 'client1'

[root@saltstack ~]# salt '*' test.ping
saltstack:
    True
client2:
    True
client1:
    True
[root@saltstack ~]# salt 'client1' test.ping
client1:
    True

示例2: salt '*' cmd.run 'df -h' //遠(yuǎn)程執(zhí)行命令

[root@saltstack ~]# salt '*' cmd.run 'df -hT'
client2:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        17G   13G  4.2G  76% /
    devtmpfs       devtmpfs   97M     0   97M   0% /dev
    tmpfs          tmpfs     111M   12K  111M   1% /dev/shm
    tmpfs          tmpfs     111M  8.8M  102M   8% /run
    tmpfs          tmpfs     111M     0  111M   0% /sys/fs/cgroup
    /dev/sda1      xfs       297M  202M   96M  68% /boot
    tmpfs          tmpfs      23M     0   23M   0% /run/user/0
saltstack:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        17G  6.8G   11G  40% /
    devtmpfs       devtmpfs  475M     0  475M   0% /dev
    tmpfs          tmpfs     489M   16K  489M   1% /dev/shm
    tmpfs          tmpfs     489M   14M  476M   3% /run
    tmpfs          tmpfs     489M     0  489M   0% /sys/fs/cgroup
    /dev/sda1      xfs       297M  202M   96M  68% /boot
    tmpfs          tmpfs      98M     0   98M   0% /run/user/0
    tmpfs          tmpfs      98M     0   98M   0% /run/user/994
client1:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        17G   13G  4.1G  77% /
    devtmpfs       devtmpfs   97M     0   97M   0% /dev
    tmpfs          tmpfs     111M   12K  111M   1% /dev/shm
    tmpfs          tmpfs     111M   13M   98M  12% /run
    tmpfs          tmpfs     111M     0  111M   0% /sys/fs/cgroup
    /dev/sda1      xfs       297M  202M   96M  68% /boot
    tmpfs          tmpfs      23M     0   23M   0% /run/user/0

說明: 這里的 * 必須是在 master 上已經(jīng)被接受過的客戶端许帐,可以通過 salt-key 查到,通常是我們已經(jīng)設(shè)定的 id 值毕谴。關(guān)于這部分內(nèi)容成畦,它支持通配距芬、列表以及正則。 比如兩臺(tái)客戶端 client1羡鸥、client2蔑穴, 那我們可以寫成 salt 'client*' salt 'client[2]' salt -L 'client1,client2' salt -E 'client(1|2)' 等形式,使用列表惧浴,即多個(gè)機(jī)器用逗號(hào)分隔存和,而且需要加-L,使用正則必須要帶-E選項(xiàng)衷旅。 它還支持 grains 和 pillar捐腿,分別加 -G 和 -I 選項(xiàng)。

[root@saltstack ~]# salt -E 'client(1|2)' cmd.run 'ls'
client1:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
[root@saltstack ~]# salt -L 'client1,client2' cmd.run 'ls'
client1:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
[root@saltstack ~]# salt 'client[2]' cmd.run 'ls'
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
[root@saltstack ~]# salt 'client*' cmd.run 'ls'
client2:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
client1:
    anaconda-ks.cfg
    initial-setup-ks.cfg
    one-click-install-lnmp.sh
grains 和 pillar

1柿顶、grains
grains 是在 minion(客戶端)啟動(dòng)時(shí)收集到的一些信息茄袖,比如操作系統(tǒng)類型、網(wǎng)卡ip等嘁锯。
使用命令:

[root@saltstack ~]# salt 'client1' grains.ls      // 列出所有的 grains 項(xiàng)目名字
[root@saltstack ~]# salt 'client1' grains.items    // 列出所有的 grains 項(xiàng)目名以及值

grains的信息并不是動(dòng)態(tài)的宪祥,并不會(huì)時(shí)時(shí)變更,它只是在 minion 啟動(dòng)時(shí)收集到的家乘。grains 也可以做配置管理

自定義 grains的方法有兩種(客戶端自定義配置和服務(wù)端寫腳本定義):
1.客戶端配置(缺點(diǎn):每臺(tái)都得去配置蝗羊,機(jī)器多了配置起來不方便)

[root@client1 ~]# vi /etc/salt/grains     // 添加如下,注意冒號(hào)后有空格
role: nginx
env: test
myname: primum est

或者

[root@client2 ~]# vi /etc/salt/minion +12
去掉這行內(nèi)容的注釋
default_include: minion.d/*.conf

[root@client2 ~]# cd /etc/salt/minion.d/
[root@client2 minion.d]# vi custom_grains.conf            // 添加下面內(nèi)容
grains:
  role:  
    nginx
  env:  
    test
  myname:  
    primum est

重啟minion服務(wù)

[root@client1 ~]# systemctl restart salt-minion
[root@client2 ~]# systemctl restart salt-minion

服務(wù)端獲取 grains

[root@saltstack ~]# salt 'client*' grains.item role env myname        // 列出多個(gè)
client1:
    ----------
    env:
        test
    myname:
        primum est
    role:
        nginx
client2:
    ----------
    env:
        test
    myname:
        primum est
    role:
        nginx

[root@saltstack ~]# salt 'client*' grains.get myname        // 列出單個(gè)
client1:
    primum est
client2:
    primum est

[root@saltstack ~]# salt 'client*' grains.item myname
client2:
    ----------
    myname:
        primum est
client1:
    ----------
    myname:
        primum est

grains 在遠(yuǎn)程執(zhí)行命令時(shí)很方便仁锯。我們可以按照 grains 的一些指標(biāo)來操作耀找。比如把所有的 web 服務(wù)器的 grains 的 role 設(shè)置為 nginx,那這樣我們就可以批量對(duì) nginx 的服務(wù)器進(jìn)行操作了:

[root@saltstack ~]# salt -G role:nginx cmd.run 'hostname'
client2:
    client2
client1:
    client1
[root@saltstack ~]# salt -G os:CentOs cmd.run 'hostname'
client2:
    client2
client1:
    client1

2.服務(wù)端寫Python腳本

[root@saltstack ~]# mkdir /srv/salt/_grains
[root@saltstack ~]# cd /srv/salt/_grains/
[root@saltstack _grains]# vi mytest.py        // 添加下面內(nèi)容
#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import os

def my_test():
    grains = {}
    grains['say'] = 'hello world'
    return grains

def my_test1():
    grains = {}
    with os.popen('free -m') as f:
        grains['mem_usage'] = f.read()
    return grains

同步到客戶端

[root@saltstack _grains]# salt 'client*' saltutil.sync_all

客戶端驗(yàn)證腳本是否同步過去

[root@client1 ~]# ll /var/cache/salt/minion/extmods/grains/
總用量 8
-rw------- 1 root root 266 4月  27 11:13 mytest.py
-rw------- 1 root root 613 4月  27 11:13 mytest.pyc

服務(wù)端刷新模塊

[root@saltstack _grains]# salt 'client*' sys.reload_modules 
client1:
    True
client2:
    True

服務(wù)端查看客戶端自定義的兩個(gè)監(jiān)控項(xiàng)

[root@saltstack _grains]# salt 'client*' grains.item say
client1:
    ----------
    say:
        hello world
client2:
    ----------
    say:
        hello world
[root@saltstack _grains]# salt 'client*' grains.item mem_usage
client2:
    ----------
    mem_usage:
                      total        used        free      shared  buff/cache   available
        Mem:            220         103          31           4          85          78
        Swap:          2046         176        1870
client1:
    ----------
    mem_usage:
                      total        used        free      shared  buff/cache   available
        Mem:            220         106          30           2          83          76
        Swap:          2046         178        1868

可以看到服務(wù)端寫自定義監(jiān)控項(xiàng)的腳本业崖,可以一鍵同步到所有客戶端上野芒,快捷方便。

2双炕、pillar
pillar 和 grains 不一樣狞悲,是在 master 上定義的,并且是針對(duì) minion 定義的一些信息妇斤。像一些比較重要的數(shù)據(jù)(密碼)可以存在 pillar 里效诅,還可以定義變量等。
首先我們查看master端pillars組件是否在開啟狀態(tài)
查看/etc/salt/master pillar_ops: True 就代表pillars在開啟狀態(tài)趟济,否則我們手動(dòng)修改。
新的版本默認(rèn)已經(jīng)開啟咽笼,繼續(xù)下面內(nèi)容顷编。

查看指定minion的 pillar 值:

[root@saltstack ~]# salt 'client1' pillar.items
client1:
    ----------

服務(wù)端自定義配置 pillar

[root@saltstack ~]# vi /etc/salt/master +529    // 找到如下內(nèi)容,去掉#號(hào)
pillar_roots:
  base:
    - /srv/pillar
[root@saltstack ~]#  mkdir /srv/pillar
[root@saltstack ~]# vi /srv/pillar/test.sls    // 自定義配置文件剑刑,內(nèi)容如下
conf: /etc/mum.conf
myname: primum est
[root@saltstack ~]# vi /srv/pillar/top.sls    // 總?cè)肟谖募蔽常瑑?nèi)容如下
base:
  'client1':
    - test

重啟master

[root@saltstack ~]# systemctl restart salt-master

注意:當(dāng)更改完 pillar 配置文件后双肤,我們可以通過刷新 pillar 配置來獲取新的 pillar 狀態(tài):

[root@saltstack ~]# salt '*' saltutil.refresh_pillar
client1:
    True
saltstack:
    True
client2:
    True

驗(yàn)證:

[root@saltstack ~]# salt 'client1' pillar.items
client1:
    ----------
    conf:
        /etc/mum.conf
    myname:
        primum est

[root@saltstack ~]# salt 'client1' pillar.item myname
client1:
    ----------
    myname:
        primum est

[root@saltstack ~]# salt 'client1' pillar.item conf
client1:
    ----------
    conf:
        /etc/mum.conf

pillar 同樣可以用來作為 salt 的匹配對(duì)象。比如:

[root@saltstack ~]# salt -I 'conf:/etc/mum.conf' test.ping
client1:
    True
[root@saltstack ~]# salt -I 'conf:/etc/mum.conf' cmd.run 'w'
client1:
     17:19:45 up  7:45,  1 user,  load average: 0.05, 0.03, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/1    172.16.0.1       11:14   25.00s  0.68s  0.68s -bash

另外一種定義pillar的方式钮惠,也適用于state
首先編輯/srv/pillar/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/pillar/top.sls           // 內(nèi)容如下
base:
  'client1':
    - test
    - apache

第一行代表這是我們的入口文件
第二行代表我們要匹配的用戶茅糜,‘client1’代表client1客戶端,“*”代表所有用戶
第三丶四行代表匹配到的用戶可以看到的數(shù)據(jù)的配置文件的名字

這里我們可以直接寫一個(gè)名字叫做apache的文件進(jìn)行配置,也可以寫一個(gè)包含init.sls的目錄進(jìn)行配置素挽。這里采用包含init.sls文件的目錄的形式的配置方法蔑赘。

[root@saltstack ~]# cd /srv/pillar/
[root@saltstack pillar]# mkdir apache
[root@saltstack pillar]# cd apache/
[root@saltstack apache]# vim init.sls              // 添加如下內(nèi)容
system-type:
  {% if grains.os == 'CentOS' %}
    name: Centos-Linux
  {% else %}
    name: unknown
  {% endif %}

apache-name:
  {% if grains.os_family == 'RedHat' %}
    apache: httpd
  {% elif grains.os_family == 'Arch' %}
    apache: apache
  {% elif grains.os_family == 'Debian' %}
    apache: apache2
  {% endif %}

{% if grains.os == 'CentOS' %} 類似于django的模板語言(我們可以采用python腳本定義grains的數(shù)據(jù),但是pillar沒有预明。我們可以在pillar的sls腳本當(dāng)中調(diào)用grains的變量缩赛,pillar和grains具有同樣的功能可以被其他組件調(diào)用。)

服務(wù)端查看自定義的pillar信息

[root@saltstack apache]# salt 'client1' pillar.item apache-name
client1:
    ----------
    apache-name:
        ----------
        apache:
            httpd
[root@saltstack apache]# salt 'client1' pillar.item system-type
client1:
    ----------
    system-type:
        ----------
        name:
            Centos-Linux

<br />

配置管理安裝Apache

下面進(jìn)行的演示是遠(yuǎn)程通過 yum 方式安裝 Apache撰糠。步驟如下:
修改配置文件

[root@saltstack ~]# vi /etc/salt/master +406    // 打開如下內(nèi)容的注釋
file_roots:
  base:
    - /srv/salt/

注意:環(huán)境: base酥馍、dev(開發(fā)環(huán)境)、test(測(cè)試環(huán)境)阅酪、prod(生產(chǎn)環(huán)境)旨袒。

[root@saltstack ~]# mkdir /srv/salt
[root@saltstack ~]# vi /srv/salt/top.sls        
base:
  'client1':
    - apache

注意:若換成 '*',則表示在所有的客戶端執(zhí)行 apache 模塊术辐。

[root@saltstack ~]# vi /srv/salt/apache.sls            
apache-service:
  pkg.installed:
    - names:                // 如果只有一個(gè)服務(wù)砚尽,那么就可以寫成 –name: httpd 不用再換一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

注意:apache-service 是自定義的 id 名。pkg.installed 為包安裝函數(shù)术吗,下面是要安裝的包的名字尉辑。service.running 也是一個(gè)函數(shù),來保證指定的服務(wù)啟動(dòng)较屿,enable 表示開機(jī)啟動(dòng)隧魄。

重啟服務(wù)

[root@saltstack ~]# systemctl restart salt-master

執(zhí)行命令

[root@saltstack ~]# salt 'client1' state.highstate          // 執(zhí)行時(shí)間比較長(zhǎng),因?yàn)橐惭bhttpd

如上圖所示隘蝎,說明 Apache 遠(yuǎn)程安裝已成功购啄。

<br />

文件目錄管理

1、文件管理
服務(wù)端配置
編輯/srv/salt/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改為如下
base:
  'client1':
    - filetest

新建 filetest.sls 文件

[root@saltstack ~]# vi /srv/salt/filetest.sls        
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644

注意:第一行的 file-test 為自定的名字嘱么,表示該配置段的名字狮含,可以在別的配置段中引用它;source指定文件從哪里拷貝曼振,這里的 test 目錄相當(dāng)于是 /srv/salt/test 目錄几迄;name指定遠(yuǎn)程客戶端要生成的文件。

新建所要測(cè)試的源文件

[root@saltstack ~]# mkdir -p /srv/salt/test/123
[root@saltstack ~]# vim /srv/salt/test/123/1.txt
saltstack ....
this is a test ....

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# ll /tmp/filetest.txt 
-rw-r--r-- 1 root root 34 4月  26 10:58 /tmp/filetest.txt
[root@client1 ~]# cat /tmp/filetest.txt 
saltstack ....
this is a test ...

2冰评、目錄管理
服務(wù)端配置
接著編輯/srv/salt/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改為如下
base:
  'client1':
    - filedir

新建 filedir.sls 文件

[root@saltstack ~]# vi /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test1/234
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True

注意:clean: True 源刪除文件或目錄映胁,目標(biāo)也會(huì)跟著刪除,否則不會(huì)刪除甲雅〗馑铮可以默認(rèn)設(shè)置為 False坑填。

新建所要測(cè)試的源目錄

[root@saltstack ~]# mkdir -p /srv/salt/test1/234/
[root@saltstack ~]# vi /srv/salt/test1/234/2.txt
filedir..........test
and add delete select alter

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# ll /tmp/testdir/
總用量 4
-rw-r--r-- 1 root root 50 4月  26 11:11 2.txt

測(cè)試增刪功能

[root@saltstack ~]# mkdir /srv/salt/test1/234/mydir
[root@saltstack ~]# touch /srv/salt/test1/234/mydir/111.txt
[root@saltstack ~]# touch /srv/salt/test1/234/testdir.add
[root@saltstack ~]# rm -rf /srv/salt/test1/234/2.txt 

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# tree /tmp/testdir/
/tmp/testdir/
|-- mydir
|   `-- 111.txt
`-- testdir.add

1 directory, 2 files

注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下創(chuàng)建了 mydir 目錄以及 testdir.add 文件弛姜,并刪除 2.txt 文件脐瑰。這里值得注意的是要成功創(chuàng)建 mydir 目錄,前提是 mydir 目錄下要有文件廷臼,如這里的111.txt 文件苍在,如若沒有,客戶端是不會(huì)創(chuàng)建 mydir 目錄的中剩。

<br />

遠(yuǎn)程執(zhí)行

前面提到遠(yuǎn)程執(zhí)行命令 test.ping忌穿,cmd.run,點(diǎn)前面的是模塊结啼,點(diǎn)后面的是函數(shù)掠剑;這樣總歸是不太規(guī)范化,下面詳細(xì)介紹怎么遠(yuǎn)程執(zhí)行命令和腳本郊愧。
1朴译、遠(yuǎn)程執(zhí)行命令
服務(wù)端配置
接著編輯/srv/salt/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改為如下
base:
  'client1':
    - cmdtest

新建 cmdtest.sls 文件

[root@saltstack ~]# vi /srv/salt/cmdtest.sls
cmd-test:
  cmd.run:
    - onlyif: test -f /tmp/filetest.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root

注意:條件 onlyif 表示若 /tmp/filetest.txt 文件存在,則執(zhí)行后面的命令属铁;可以使用 unless眠寿,兩者正好相反。

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# ll /tmp/
總用量 156
drwxr-xr-x  2 root  root      6 4月  26 11:45 cmdtest
-rw-r--r--  1 root  root      0 4月  26 11:45 cmdtest.txt
-rw-r--r--  1 root  root     34 4月  26 10:58 filetest.txt
drwxr-xr-x  3 root  root     38 4月  26 11:14 testdir

2焦蘑、遠(yuǎn)程執(zhí)行腳本
服務(wù)端配置
接著編輯/srv/salt/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls    // 修改為如下
base:
  'client1':
    - shelltest

新建 shelltest.sls 文件

[root@saltstack ~]# vi /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root

新建 1.sh 腳本文件

[root@saltstack ~]# vi /srv/salt/test/1.sh
#!/bin/sh
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# ll /tmp/
drwxr-xr-x  2 root  root      6 4月  26 12:08 shelltest
-rw-r--r--  1 root  root      0 4月  26 12:08 shelltest.txt

通過上面的例子盯拱,我們實(shí)現(xiàn)了遠(yuǎn)程執(zhí)行腳本;如果我們想一鍵遠(yuǎn)程安裝 LAMP 或者 LNMP例嘱,那么只需把本例中的 1.sh 腳本替換成 一鍵安裝的腳本就行狡逢。

<br />
管理任務(wù)計(jì)劃
1、建立 cron
服務(wù)端配置
編輯/srv/salt/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls     // 修改為如下
#base:
#  'client1':
#    - apache
#base:
#  'client1':
#    - filetest
#base:
#  'client1':
#    - filedir
#base:
#  'client1':
#    - cmdtest
#base:
#  'client1':
#    - shelltest
#base:
#  'client1':
#    - shelltest
base:
  'client1':
    - crontest

編輯 crontest.sls 文件

[root@saltstack ~]# vim /srv/salt/crontest.sls
cron-test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'

注意拼卵,*需要用單引號(hào)引起來奢浑。當(dāng)然我們還可以使用 file.managed 模塊來管理 cron,因?yàn)橄到y(tǒng)的 cron都是以配置文件的形式存在的腋腮。

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
* 20 1-10 3,5 * /bin/touch /tmp/111.txt

2雀彼、刪除 cron
服務(wù)端配置
我們只需修改 crontest.sls 文件

[root@saltstack ~]# vim /srv/salt/crontest.sls
cron.present    改為    cron.absent

注意:兩者不能共存,要想刪除一個(gè) cron即寡,那之前的 present 就得替換掉或者刪除掉徊哑。

執(zhí)行命令:

[root@saltstack ~]# salt 'client1' state.highstate

客戶端驗(yàn)證

[root@client1 ~]# crontab -l        // 可查看到該任務(wù)計(jì)劃已刪除
# Lines below here are managed by Salt, do not edit

<br />

一鍵搭建rsync服務(wù)

rsync服務(wù)端搭建配置文件介紹

[root@saltstack rsync]# cat rsync_server.sls 
rsync:    ##ID  這個(gè)ID必須是唯一的名字
 user.present:    ##user模塊中present應(yīng)用
   - fullname: rsync  ##用戶名字
   - createhome: False  ##不創(chuàng)建家目錄
   - shell: /sbin/nologin  ##禁止登錄
   - empty_password: True  ##不需要密碼
rsyncd.conf: ##ID
 file.managed:  ##file模塊
   - name: /etc/rsyncd.conf  ##客戶端文件存放路徑
   - source: salt://rsync/rsyncd.conf   ##服務(wù)端文件路徑
   - user: root    ##屬主
   - group: root  ##屬組
   - mode: 644 ##權(quán)限
backup:
 file.directory: ##file模塊
   - name: /backup ##創(chuàng)建目錄名
   - user: rsync
   - group: rsync
   - mode: 755
   - makedirs: True  ##如果沒有自動(dòng)創(chuàng)建
rsync.password:  
 file.managed:
   - name: /etc/rsync.password
   - source: salt://rsync/rsyncd.password
   - user: root
   - group: root
   - mode: 600
daemon:
 cmd.run:  ##使用cmd.run模塊
   - name: rsync --daemon
Boot from open:
 cmd.run:
   - name: echo "/usr/bin/rsync --daemon" >>/etc/rc.local

開始部署
服務(wù)端配置
編輯/srv/salt/目錄下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls        // 修改為下面內(nèi)容
 base:
  'client1':
    - rsync.rsync_server
  'client2':
    - rsync.rsync_client

創(chuàng)建rsync服務(wù)端搭建配置文件

[root@saltstack ~]# mkdir /srv/salt/rsync
[root@saltstack ~]# cd /srv/salt/rsync/
[root@saltstack rsync]# vi rsync_server.sls                // 添加下面內(nèi)容
rsync:   
  user.present:    
    - fullname: rsync  
    - createhome: False  
    - shell: /sbin/nologin  
    - empty_password: True  
rsyncd.conf: ##ID
  file.managed:  
    - name: /etc/rsyncd.conf  
    - source: salt://rsync/rsyncd.conf   
    - user: root    
    - group: root  
    - mode: 644 
backup:
  file.directory: 
    - name: /backup 
    - user: rsync
    - group: rsync
    - mode: 755
    - makedirs: True  
rsync.password:  
  file.managed:
    - name: /etc/rsync.password
    - source: salt://rsync/rsyncd.password
    - user: root
    - group: root
    - mode: 600
daemon:
  cmd.run:  
    - name: rsync --daemon
Boot from open:
  cmd.run:
    - name: echo "/usr/bin/rsync --daemon" >>/etc/rc.local

創(chuàng)建rsync客戶端搭建配置文件

[root@saltstack rsync]# vi rsync_client.sls              // 添加下面內(nèi)容 
rsync.passwd:
  file.managed:
    - name: /etc/rsync.password
    - source: salt://rsync/rsync.password
    - user: root
    - group: root
    - mode: 600
backup:
  file.directory:
    - name: /backup
    - user: root
    - group: root
    - mode: 755
    - makedirs: True

創(chuàng)建rsync服務(wù)配置文件(這里是rsync服務(wù)的配置文件,上面的是salt安裝rsync服務(wù)應(yīng)用的搭建配置文件)

[root@saltstack rsync]# vi rsyncd.conf           // rsync配置文件
uid =rsync     
gid =rsync     
use chroot=no
max chonnections =200
timeout = 300
pid file =/var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]                
path = /backup 

[root@saltstack rsync]# vi rsyncd.password            // 服務(wù)端密碼文件
rsync_backup:123456

[root@saltstack rsync]# vi rsync.password             // 客戶端密碼文件
123456

[root@saltstack rsync]# ll
總用量 20
-rw-r--r-- 1 root root 274 4月  26 15:17 rsync_client.sls
-rw-r--r-- 1 root root 376 4月  26 15:11 rsyncd.conf
-rw-r--r-- 1 root root  20 4月  26 15:15 rsyncd.password
-rw-r--r-- 1 root root   7 4月  26 15:15 rsync.password
-rw-r--r-- 1 root root 723 4月  26 15:16 rsync_server.sls

驗(yàn)證rsync服務(wù)是否安裝成功
rsync服務(wù)端查看服務(wù)是否啟動(dòng)

[root@client1 ~]# ll /etc/rsync.password 
-rw------- 1 root root 20 4月  26 15:24 /etc/rsync.password
[root@client1 ~]# cat /etc/rsync.password 
rsync_backup:123456
[root@client1 ~]# ps -ef|grep rsync
root      12636      1  0 15:24 ?        00:00:00 rsync --daemon
root      12710   2400  0 15:25 pts/0    00:00:00 grep --color=auto rsync

好極了聪富,我們?cè)趓sync客戶端推送一個(gè)文件到服務(wù)端是否成功

[root@client2 ~]# cd /backup/
[root@client2 backup]# echo 'this msg from new install rsync client used by test' > test.txt
[root@client2 backup]# ls test.txt 
test.txt
[root@client2 backup]# rsync -avz /backup/  rsync_backup@172.16.0.20::backup --password-file=/etc/rsync.password
sending incremental file list
./
test.txt

sent 132 bytes  received 30 bytes  324.00 bytes/sec
total size is 52  speedup is 0.32

貌似推送成功了实柠,快去rsync服務(wù)端看下吧

[root@client1 ~]# cd /backup/
[root@client1 backup]# ll
總用量 4
-rw-r--r-- 1 rsync rsync 52 4月  26 15:46 test.txt
[root@client1 backup]# cat test.txt 
this msg from new install rsync client used by test

好的,順利裝完善涨,出去抽支煙和活動(dòng)下頸椎吧窒盐。

<br />

Saltstack 常用命令

1、拷貝文件到客戶端

[root@saltstack ~]# salt 'client2' cp.get_file salt://apache.sls /tmp/cp.txt
client2:
    /tmp/cp.txt

客戶端查看

[root@client2 ~]# ll /tmp
總用量 4
-rw-r--r-- 1 root root 151 4月  26 14:04 cp.txt

2钢拧、拷貝目錄到客戶端

[root@saltstack ~]# salt 'client2' cp.get_dir salt://test /tmp
client2:
    - /tmp/test/1.sh
    - /tmp/test/123/1.txt

客戶端查看

root@client2 ~]# ll /tmp/
總用量 4
-rw-r--r-- 1 root root 151 4月  26 14:04 cp.txt
drwxr-xr-x 3 root root  29 4月  26 14:14 test

3蟹漓、顯示存活的客戶端

[root@saltstack ~]# salt-run manage.up
- client1
- client2
- saltstack

4、命令下執(zhí)行服務(wù)端的腳本

[root@saltstack ~]# vim /srv/salt/test/shell.sh
#! /bin/sh
echo "salt server do run shell script on client" > /tmp/shell.txt

[root@saltstack ~]# salt 'client2' cmd.script salt://test/shell.sh

客戶端查看

[root@client2 ~]# ll /tmp/
-rw-r--r-- 1 root root  42 4月  26 14:20 shell.txt
[root@client2 ~]# cat /tmp/shell.txt 
salt server do run shell script on client

文檔參考
https://docs.saltstack.com/en/latest/ref/modules/all/index.html 官網(wǎng)
http://docs.saltstack.cn/ref/states/all/index.html 中文官網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末源内,一起剝皮案震驚了整個(gè)濱河市葡粒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膜钓,老刑警劉巖嗽交,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颂斜,居然都是意外死亡夫壁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門沃疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盒让,“玉大人,你說我怎么就攤上這事司蔬∫厍眩” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵俊啼,是天一觀的道長(zhǎng)肺缕。 經(jīng)常有香客問我,道長(zhǎng)授帕,這世上最難降的妖魔是什么同木? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮豪墅,結(jié)果婚禮上泉手,老公的妹妹穿的比我還像新娘。我一直安慰自己偶器,他們只是感情好斩萌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屏轰,像睡著了一般颊郎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霎苗,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天姆吭,我揣著相機(jī)與錄音,去河邊找鬼唁盏。 笑死内狸,一個(gè)胖子當(dāng)著我的面吹牛检眯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昆淡,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锰瘸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了昂灵?” 一聲冷哼從身側(cè)響起避凝,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眨补,沒想到半個(gè)月后管削,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撑螺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年含思,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片实蓬。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茸俭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出安皱,到底是詐尸還是另有隱情调鬓,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布酌伊,位于F島的核電站腾窝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏居砖。R本人自食惡果不足惜虹脯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奏候。 院中可真熱鬧循集,春花似錦、人聲如沸蔗草。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咒精。三九已至镶柱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間模叙,已是汗流浹背歇拆。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人故觅。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓厂庇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親输吏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宋列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)地址[http://tech.mainwise.cn/?p=438] 更新于 3.25 23:16 salt簡(jiǎn)...
    J書越來越垃圾了閱讀 30,862評(píng)論 9 36
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)评也,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 時(shí)隔五年灭返,再次踏上游輪之旅盗迟。五年前還屬于小眾高端旅游項(xiàng)目,如今價(jià)格降低了一半有余熙含,受眾面更廣罚缕。同行人的數(shù)量和素質(zhì)也...
    黃童彤閱讀 251評(píng)論 0 0
  • 漫畫:龐雜的世界 (完)
    TheWind風(fēng)子閱讀 632評(píng)論 1 9