>

高效入门SaltStack

- 编辑:乐百家599手机首页 -

高效入门SaltStack

5.起步服务

(1)服务端

[[email protected] ~]# salt-master start

www.lo599.com,在后端运转

[[email protected] ~]# salt-master start &
[3] 35438
[[email protected] ~]#

(2)客户端

[[email protected] ~]# salt-minion start &
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

[[email protected] ~]# salt-minion start &
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

[[email protected] ~]# salt-minion start
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
[ERROR   ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

minion在第一遍运维时,会在/etc/salt/pki/minion/(该路线在/etc/salt/minion里面安装)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在收受到minion的public key后,通过salt-key命令accept minion public key,那样在master的/etc/salt/pki/master/minions下的将会贮存以minion id命名的 public key,然后master就能够对minion发送指令了。

自定义pillar

在master的sls文件中定义,master配置需求钦赐pillar的目录。

pillar_roots: 
  base: 
  - /srv/pillar 

➜ pillar git:(master) ✗ pwd
/srv/pillar

➜ pillar git:(master) ✗ cat top.sls 
base:
  '*':
  - data
  - git

➜ pillar git:(master) ✗ cat data/init.sls
roles: webserver
➜ pillar git:(master) ✗ cat git.sls
{% if grains[‘os’] == ‘CentOs’ %}
git: git
{% elif grains[‘os’] == ‘Debian’ %}
git: git-core
{% endif %}

私下认可情形下,master配置文件中的全体数据都会增多到pillar中,且对具备的minion可用。假设要禁止那一个暗中同意值,能够设置master文件中的选项:
pillar_opts: False

pillar跟sls同样有友好的top.sls文件作为入口来公司别的的pillar。base中 “×”拟订具有minion具有pillar:mongodb、zookeeper、kafka、supervisor, 然后是种种minion组有自个儿的init.sls。kafka.sls中定义kafka对应的部分消息。

修改完pillar文件后须要用以下的指令刷新以下minion的音讯:

➜ pillar git:(master) ✗ sudo salt 'cn1' saltutil.refresh_pillar 
cn1: 
  True 

上边命令会触发全数minion从master下载top.sls文件以及中间定三个的states,然后编写翻译、施行。施行完以往,minion会将执行结果的摘要消息反映给master。

配置认证

服务端操作

[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 命令查看到曾经签订左券的客商端。此时大家在客商端的 /etc/salt/pki/minion 目录上边会多出三个minion_master.pub 文件。

测量检验表明
示例1: salt '*' test.ping //检查实验通信是不是平常,也能够钦点当中二个'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' //远程实行命令

[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 上一度被接受过的顾客端,能够经过 salt-key 查到,平时是我们曾经设定的 id 值。关于那有的内容,它协助通配、列表以及正则。 比方两台湾乘顾客端 client1、client2, 那我们能够写成 salt 'client*' salt 'client[2]' salt -L 'client1,client2' salt -E 'client(1|2)' 等花样,使用列表,即多少个机器用逗号分隔,並且亟需加-L,使用正则须求求带-E选项。 它还扶助 grains 和 pillar,分别加 -G 和 -I 选项。

[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

3.1 服务端安装

yum install -y epel-release

yum install -y salt-master salt-minion

[[email protected] ~]# yum install -y epel-release
[[email protected] ~]# yum install -y salt-master salt-minion

什么是saltstack?

Saltstack开源项目始于二零一一年,使用Python开采的一套C/S架构的运行工具,由Master和Minion组成,通过ZeroMQ进行通讯。
类型地址: https://github.com/saltstack/salt
官方网站地址: http://www.saltstack.com
官方文书档案: http://docs.saltstack.com OR http://docs.saltstack.cn
开采语言: Python
运营格局: C/S

说明:

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、命令下实践服务端的脚本

[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

乐百家服务器 1

 

客商端查看

[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

正文长久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147566.htm

乐百家服务器 2

1.介绍

Saltstack 比 Puppet 出来晚几年,是基于Python 开辟的,也是基于 C/S 架构,服务端 master 和客商端 minions ;Saltstack 和 Puppet 很像,能够说 Saltstatck 整合了 Puppet 和 Chef 的机能,更狠抓有力,更合乎大范围批量管理服务器,何况它比 Puppet 更易于配置。 三大效果与利益: 远程命令实行,配置管理(服务,文件,cron,顾客,组),云管理。

翻开state modules的事无巨细使用

# 1、查看所有states列表
sudo salt ‘cn1’ sys.list_state_modules

# 2、 查看指定state的所有function
sudo salt ‘cn1’ sys.list_state_functions cmd

# 3、查看指定states的用法
sudo salt ‘cn1’ sys.state_doc cmd

# 4、查看指定state指定function的用法
sudo salt ‘cn1’ sys.state_doc cmd.run
  1. Master:调整宗旨,salt命令运转和财富情形处理
  2. Minion : 需求管住的顾客端机器,会主动去连接Mater端,并从Master端得到能源气象
  3. 新闻,同步能源管理消息
  4. States:配置处理的指令集
  5. Modules:在指令行花月配置文件中动用的通令模块,能够在命令行中运营
  6. Grains:minion端的变量,静态的
  7. Pillar:minion端的变量,动态的比较私密的变量,能够经过安顿文件落到实处联机minions定义
  8. highstate:为minion端下发恒久增多状态,从sls配置文件读取.即同步状态配置
  9. salt_schedule:会自行保持顾客端配置

贯彻意况

策动三台机械,那三台机器都关闭 selinux,清空防火墙法则。

  • saltstack ==> 172.16.0.19 (服务端)
  • client1 ==> 172.16.0.20 (客户端)
  • client2 ==> 172.16.0.21 (客户端)

翻开版本和水源

[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

分别设置 hostname,设置达成xshell注销重复连接一下

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

编辑 hosts 文件
每台都设置,若机器太多,能够经过搭建 DNS,则不用在每台机器上安装这一个

[root@saltstack ~]# vi /etc/hosts
添加下面内容
172.16.0.19 saltstack
172.16.0.20 client1
172.16.0.21 client2

13.2 删除 cron

乐百家服务器,(1)修改 crontest.sls 文件 把 cron.present: 改成 cron.absent: 注意:两个不可能存活,要想删除二个 cron,那在此以前的 present 就得替换掉也许去除掉。

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

(2)推行命令

[[email protected] ~]# salt 'nb1' state.highstate
nb1:
----------
          ID: cron-test
    Function: cron.absent
        Name: /bin/touch /tmp/111.txt
      Result: True
     Comment: Cron /bin/touch /tmp/111.txt removed from root's crontab
     Started: 02:56:03.583557
    Duration: 29.663 ms
     Changes:   
              ----------
              root:
                  /bin/touch /tmp/111.txt

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]# 

(3)客商端验证

[[email protected] ~]# crontab -l
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.81
00      03      *       *       *       ntpdate 192.168.1.160
# Lines below here are managed by Salt, do not edit
[[email protected] ~]#

有啥相称?

所有操作目标参数:

Target Options: 
-E, --pcre                   正则匹配 
-L, --list                   列表匹配 
-G, --grain                  grains 匹配 
--grain-pcre                 grains 加正则匹配 
-N, --nodegroup              组匹配 
-R, --range                  范围匹配 
-C, --compound               综合匹配( 指定多个匹配) 
-I, --pillar                 pillar 值匹配 
-S, --ipcidr                 minions网段地址匹配 
base:
  '*':
   - apache
配备管理安装Apache

上边进行的演示是长途通过 yum 格局安装 Apache。步骤如下:
修改配置文件

[root@saltstack ~]# vi /etc/salt/master  406    // 打开如下内容的注释
file_roots:
  base:
    - /srv/salt/

注意:情形: base、dev(开辟条件)、test(测量试验碰到)、prod(生产条件)。

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

注意:若换成 '*',则表示在全部的顾客端实行 apache 模块。

[root@saltstack ~]# vi /srv/salt/apache.sls            
apache-service:
  pkg.installed:
    - names:                // 如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下边是要安装的包的名字。service.running 也是多个函数,来担保钦点的劳务运维,enable 代表开机运营。

重启服务

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

执行命令

[root@saltstack ~]# salt 'client1' state.highstate          // 执行时间比较长,因为要安装httpd

乐百家服务器 3

 

如上海教室所示,表达 Apache 远程安装已成功。

 

8.管理对象属性

Grains是SaltStack组件中极其重大的组件之 一,因为我们在做布置陈设的长河中会平日使用 它,Grains是SaltStack记录Minion的片段静态新闻的零件,我们得以省略地领会为Grains里面著录着 每台Minion的一对常用属性,比方CPU、内部存款和储蓄器、磁 盘、互连网音信等,我们可以通过grains.items查看某 台Minion的有所Grains消息,Minions的Grains信息是Minions运行的时候搜聚陈说给Master的,在骨子里 应用境遇中我们供给基于自个儿的事情须要去自定义 一些Grains

简易的扩展

增加铺排文件和客户
配置apache这样的劳动还索要加上其余的剧情,比方apache的配备文件,运转apache服务的客户和组。

# 目录结构:
ls /srv/salt/apache
init.sls
http.conf

cat init.sls
apache:                   
 pkg:                     
    - installed          
  service:               
    - running
    - watch:
      - pkg: apache
      - file: /etc/httpd/conf/httpd.conf
      - user: apache
  user.present:
    - did: 87
    - gid: 87
    - home: /var/www/html
    - shell: /bin/nologin
    - require:
      - group: apache
group.present:
  - gid: 87
  - require:
    - pkg: apache
/etc/httpd/conf/httpd.conf
  file.managed:
    - source: salt://apache/httpd.conf
    - user: root
    - group: root
    - mode: 644

top.sls能够这么定义:

一键搭建rsync服务

rsync服务端搭建配置文件介绍

[root@saltstack rsync]# cat rsync_server.sls 
rsync:    ##ID  这个ID必须是唯一的名字
  user.present:    ##user模块中present应用
    - fullname: rsync  ##用户名字
    - createhome: False  ##不创建家目录
    - shell: /sbin/nologin  ##禁止登录
    - empty_password: True  ##不需要密码
rsyncd.conf: ##ID
  file.managed:  ##file模块
    - name: /etc/rsyncd.conf  ##客户端文件存放路径
    - source: salt://rsync/rsyncd.conf   ##服务端文件路径
    - user: root    ##属主
    - group: root  ##属组
    - mode: 644 ##权限
backup:
  file.directory: ##file模块
    - 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:  ##使用cmd.run模块
    - name: rsync --daemon
Boot from open:
  cmd.run:
    - name: echo "/usr/bin/rsync --daemon" >>/etc/rc.local

开班布署
服务端配置
编辑/srv/salt/目录下的top.sls 文件

[root@saltstack ~]# vi /srv/salt/top.sls        // 修改为下面内容
 base:
  'client1':
    - rsync.rsync_server
  'client2':
    - rsync.rsync_client

开创rsync服务端搭建配置文件

[root@saltstack ~]# mkdir /srv/salt/rsync
[root@saltstack ~]# cd /srv/salt/rsync/
[root@saltstack rsync]# vi rsync_server.sls                // 添加下面内容
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

创办rsync客户端搭建配置文件

[root@saltstack rsync]# vi rsync_client.sls              // 添加下面内容 
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

始建rsync服务配置文件(这里是rsync服务的安顿文件,上边的是salt安装rsync服务应用的搭建配置文件)

[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            // 服务端密码文件
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

验证rsync服务是或不是安装成功
rsync服务端查看服务是还是不是运营

[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

好极了,我们在rsync客商端推送三个文件到服务端是不是中标

[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服务端看下吧

[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

好的,顺遂装完,出去抽支烟和活动下颈椎吧。

 

11.2目录管理

(1)接着编辑以前的 top.sls 文件

修改为如下

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - apache
  'nb2':
    - filedir
[[email protected] ~]#

(2)新建 filedir.sls 文件

[[email protected] ~]# vim /srv/salt/filedir.sls
[[email protected] ~]# cat /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test/123
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True
[[email protected] ~]#

clean: True 源删除文件或目录,指标也会跟着删除,不然不会删除。能够默许设置为 False

(3)新建所要测验的源目录

/srv/salt/test/123一度存在,且有叁个文件

[[email protected] ~]# ls /srv/salt/test/123
1.txt
[[email protected] ~]# cat /srv/salt/test/123/1.txt 
file test

(4)试行命令

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: file-dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 01:38:38.129930
    Duration: 392.34 ms
     Changes:   
              ----------
              /tmp/testdir/1.txt:
                  ----------
                  diff:
                      New file
                  mode:
                      0644

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]#

(5)顾客端验证

[[email protected] ~]# ls /tmp
filetest.txt                     Jetty_0_0_0_0_16010_master____.6nvknp        Jetty_localhost_40934_datanode____.k20t6j
hadoop-root-journalnode.pid      Jetty_0_0_0_0_16030_regionserver____.45q9os  Jetty_nb2_50070_hdfs____xjgcrn
hadoop-unjar4050493136279788948  Jetty_0_0_0_0_8042_node____19tj0x            systemd-private-bd8f0cf7c19147208fb1f2948ed5483f-vmtoolsd.service-LQvsNz
hsperfdata_root                  Jetty_0_0_0_0_8480_journal____.8g4awa        testdir
[[email protected] ~]# ls /tmp/testdir/
1.txt
[[email protected] ~]# 

(6)测量试验增加和删除成效

在服务端新建newDir目录以及文件a,删除1.txt 文本

[[email protected] ~]# cd /srv/salt/test/123
[[email protected] 123]# mkdir newDir
[[email protected] 123]# echo "Hello" > newDir/a
[[email protected] 123]# rm -rf 1.txt

(7)再度实践命令

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: file-dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 01:45:59.688250
    Duration: 442.358 ms
     Changes:   
              ----------
              /tmp/testdir/newDir:
                  ----------
                  /tmp/testdir/newDir:
                      New Dir
              /tmp/testdir/newDir/a:
                  ----------
                  diff:
                      New file
                  mode:
                      0644
              removed:
                  - /tmp/testdir/1.txt

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]#

(8)再度应验

[[email protected] ~]# ls /tmp/testdir/
newDir
[[email protected] ~]# ls /tmp/testdir/newDir/
a
[[email protected] ~]#

专一的是要大功告成创办newDir目录,前提是newDir目录下要有文件;假设未有,客商端是不会创造newDir目录的。

grains&pillar

# file_roots:
#   base:
#     - /srv/salt/
#   dev:
#     - /srv/salt/dev/services
#     - /srv/salt/dev/states
#   prod:
#     - /srv/salt/prod/services
#     - /srv/salt/prod/states
起首安装

独家为三台机器增添Ali云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

服务端安装

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

客商端安装

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

客商端安装

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

2.希图干活

早为之所两台机械,这两台机器都关闭 selinux,清空 iptables 准则并保存。 master:192.168.1.160 slaver:192.168.1.161

更新软件源

[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[[email protected] ~]# yum makecache fast
Loaded plugins: fastestmirror
HuaDongBD                                                                                                                                            | 2.9 kB  00:00:00     
base                                                                                                                                                 | 3.6 kB  00:00:00     
extras                                                                                                                                               | 3.4 kB  00:00:00     
os                                                                                                                                                   | 3.6 kB  00:00:00     
updates                                                                                                                                              | 3.4 kB  00:00:00     
updates/7/x86_64/primary_db                                                                                                                          | 7.8 MB  00:00:07     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Metadata Cache Created
[[email protected] ~]#

指令行中使用

对操作系统是Ubuntu的服务器执行test.ping 
➜ salt sudo salt -G "os:Ubuntu" test.ping 
dk1: 
  True 
dk2: 
  True 

显示cpu架构是x86_64的服务器的cpu个数 
➜ salt sudo salt -G 'cpuarch:x86_64' grains.item num_cpus 
dk2: 
  ---------- 
  num_cpus: 
  4 
dk1: 
  ---------- 
  num_cpus: 
  4 
salt '10.252.137.141' cmd.run 'uname -a'

简述

saltstack

  • saltstack是三个新的基本功平台管理工科具,只需求花费数分钟就可以运营起来,能够支撑管理上万台服务器的局面,数分钟就可以达成多少传递。
  • saltstack是运用python语言开采的,同期也支撑restAPI方便一回开荒以及和它平台合併,同期官方也发布了一个Web管理分界面halite。

优点:

  • 率先,他速度快,基于新闻队列 线程,跑完多台器具,都以纳秒级其余
  • 附带,非常灵活,源码是python,方便清楚和自定义模块(python 语言相对于其余的perl、ruby等照旧很好精晓的)
  • 指令轻松,功用壮大

saltstack运长势势

  • Local
  • Master/Minion
  • Salt SSH

本文使用Master/Minion运转情势。

saltstack三大效果

  • 远程实践
  • 安插管理
  • 云管理

saltstack数据系统

  • Grains (静态数据)
  • pillar (动态数据)

saltstack配置管理

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

12.2 远程推行脚本

(1)接着编辑在此以前的 top.sls 文件

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - cmdtest
  'nb2':
    - shelltest
[[email protected] ~]# 

(2)新建 shelltest.sls 文件

[[email protected] ~]# vim /srv/salt/shelltest.sls
[[email protected] ~]# cat /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root
[[email protected] ~]# 

(3)新建 1.sh 脚本文本

[[email protected] ~]# vim /srv/salt/test/1.sh
[[email protected] ~]# cat /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi
[[email protected] ~]#

(4)推行命令

[[email protected] ~]# salt 'nb2' state.highstate
nb2:
----------
          ID: shell-test
    Function: cmd.script
      Result: True
     Comment: Command 'shell-test' run
     Started: 02:35:33.341722
    Duration: 585.072 ms
     Changes:   
              ----------
              pid:
                  48228
              retcode:
                  0
              stderr:
              stdout:

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
[[email protected] ~]# 

(5)顾客端验证

[[email protected] ~]# ll /tmp|grep shell
drwxr-xr-x 2 root root   6 Aug 21 02:35 shelltest
-rw-r--r-- 1 root root   0 Aug 21 02:35 shelltest.txt
[[email protected] ~]# 

透过地点的事例,大家落到实处了远程实施脚本;假如大家想一键远程安装 LAMP 也许LNMP,那么只需把本例中的 1.sh 脚本替换到 一键安装的脚本就行。

启动

sudo service salt-master start
sudo service salt-minion start

minion在第一遍运营时,会在/etc/salt/pki/minion/(该路线在/etc/salt/minion里面安装)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在收受到minion的public key后,通过salt-key命令accept minion public key,那样在master的/etc/salt/pki/master/minions下的将会寄放以minion id命名的 public key,然后master就能够对minion发送指令了。
证实命令如下:

远程施行

前边提到远程实践命令 test.ping,cmd.run,点前边的是模块,点前面包车型地铁是函数;那样总归是不太标准化,上边详细介绍怎么远程推行命令黄岩乱弹本。
1、远程实行命令
服务端配置
继而编辑/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 文件存在,则进行前面包车型大巴通令;能够应用 unless,两个正好相反。

施行命令:

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

乐百家服务器 4

 

顾客端验证

[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、远程试行脚本
服务端配置
进而编辑/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

实行命令:

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

乐百家服务器 5

 

客商端验证

[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

经过地点的事例,我们贯彻了远程推行脚本;即使大家想一键远程安装 LAMP 或者LNMP,那么只需把本例中的 1.sh 脚本替换到 一键设置的台本就行。

治本任务安顿
1、建立 cron
服务端配置
编排/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: '*'

注意,*亟待用单引号引起来。当然大家还是能够选取 file.managed 模块来管理cron,因为系统的 cron都以以安顿文件的样式存在的。

推行命令:

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

乐百家服务器 6

 

客商端验证

[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
服务端配置
咱俩只需修改 crontest.sls 文件

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

留心:两者不可能存活,要想删除一个 cron,那从前的 present 就得替换掉大概去除掉。

推行命令:

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

乐百家服务器 7

 

顾客端验证

[root@client1 ~]# crontab -l        // 可查看到该任务计划已删除
# Lines below here are managed by Salt, do not edit

 

12.远程进行

日前提到远程试行命令 test.ping,cmd.run,点前边的是模块,点前面的是函数;这样总归是不太标准化,下边详细介绍怎么远程实施命令黄岩乱弹本。

回顾的例证

cat top.sls
base:                       # 匹配状态树的base目录配置
  ‘*’:                        # 匹配minion
    - webserver         # 表示执行base目录下的webserver.sls状态文件或者webserver/init.sls文件

cat webserver.sls
apache:                   # ID声明,跟yum install apache指定的名称一样
  pkg:                      # 状态声明,说明要做什么状态操作,pkg使用系统本地的软件包管理工具
    - installed           # 函数声明,说明该sls文件指定的执行操作函数
  service:                #管理系统守护进程
    - running
    - require:
      - pkg: apache

# 更新所有minion的状态
sudo salt “*” state.highstate

注:这样就可以在所有的minion中安装apache了。

当然也可以不要top.sls,直接指定sls文件来执行
sudo salt ‘cn1’ state.sls webserver

或者使用apply function,apply会根据后面的参数来决定调用state.highstate还是state.sls
sudo salt ‘cn1’ state.apply webserver
  1. 正则表明式

    salt -E 'Minion*' test.ping #主机名以Minion开通

  2. 列表相称

    salt -L Minion,Minion1 test.ping

  3. Grians匹配

    salt -G 'os:CentOS' test.ping

grains 和 pillar

1、grains
grains 是在 minion(客户端)运转时收罗到的部分音信,比方操作系统类型、网卡ip等。
利用命令:

[root@saltstack ~]# salt 'client1' grains.ls      // 列出所有的 grains 项目名字
[root@saltstack ~]# salt 'client1' grains.items    // 列出所有的 grains 项目名以及值

grains的音讯并不是动态的,并不会随时改造,它只是在 minion 运行时搜集到的。grains 也足以做安排管理

自定义 grains的不二秘技有三种(顾客端自定义配置和服务端写脚本定义):
1.客商端配置(劣势:每台都得去布置,机器多了配置起来不便利)

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

或者

[root@client2 ~]# vi /etc/salt/minion  12
去掉这行内容的注释
default_include: minion.d/*.conf

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

重启minion服务

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

服务端获取 grains

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

[root@saltstack ~]# salt 'client*' grains.get myname        // 列出单个
client1:
    primum est
client2:
    primum est

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

grains 在中距离推行命令时很有益。大家能够坚守 grains 的一对指标来操作。比方把装有的 web 服务器的 grains 的 role 设置为 nginx,那那样我们就能够批量对 nginx 的服务器实行操作了:

[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.服务端写Python脚本

[root@saltstack ~]# mkdir /srv/salt/_grains
[root@saltstack ~]# cd /srv/salt/_grains/
[root@saltstack _grains]# vi mytest.py        // 添加下面内容
#!/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

乐百家服务器 8

 

客户端验证脚本是不是同步过去

[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

服务端刷新模块

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

服务端查看客户端自定义的三个监控项

[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

能够观望服务端写自定义监察和控制项的本子,能够一键一起到全部顾客端上,快速低价。

2、pillar
pillar 和 grains 不等同,是在 master 上定义的,况且是本着 minion 定义的一部分音讯。像有的比较根本的数目(密码)能够存在 pillar 里,还足以定义变量等。
第一大家查阅master端pillars组件是还是不是在拉开状态
查看/etc/salt/master pillar_ops: True 就象征pillars在张开状态,不然大家手动修改。
新的版本默许已经拉开,继续上面内容。

翻看钦命minion的 pillar 值:

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

服务端自定义配置 pillar

[root@saltstack ~]# vi /etc/salt/master  529    // 找到如下内容,去掉#号
pillar_roots:
  base:
    - /srv/pillar
[root@saltstack ~]#  mkdir /srv/pillar
[root@saltstack ~]# vi /srv/pillar/test.sls    // 自定义配置文件,内容如下
conf: /etc/mum.conf
myname: primum est
[root@saltstack ~]# vi /srv/pillar/top.sls    // 总入口文件,内容如下
base:
  'client1':
    - test

重启master

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

只顾:当改换完 pillar 配置文件后,大家能够经过刷新 pillar 配置来收获新的 pillar 状态:

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

验证:

[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 的匹配成对象。举例:

[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           // 内容如下
base:
  'client1':
    - test
    - apache

首先行表示那是大家的输入文件
其次行代表大家要协作的客商,‘client1’代表client1顾客端,“*”代表全部客户
其三丶四行代表相称到的客户能够看看的数据的安排文件的名字

这边大家能够直接写二个名字叫做apache的公文进行安顿,也足以写二个包罗init.sls的目录实行计划。这里运用满含init.sls文件的目录的样式的布局形式。

[root@saltstack ~]# cd /srv/pillar/
[root@saltstack pillar]# mkdir apache
[root@saltstack pillar]# cd apache/
[root@saltstack apache]# vim init.sls              // 添加如下内容
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的多寡,不过pillar未有。大家可以在pillar的sls脚本个中调用grains的变量,pillar和grains拥有同样的功效能够被别的零件调用。)

服务端查看自定义的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

 

14.3 突显存活的客户端

[[email protected] ~]# salt-run manage.up
- nb0
- nb1
- nb2
[[email protected] ~]# 

配置

master:
https://docs.saltstack.com/en/latest/ref/configuration/master.html
http://arlen.blog.51cto.com/7175583/1423997

minion:
https://docs.saltstack.com/en/latest/ref/configuration/minion.html
http://arlen.blog.51cto.com/7175583/1424008

Master与Minion认证

文件目录管理

1、文件处理
服务端配置
编纂/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 目录也等于是 /srv/salt/test 目录;name内定远程顾客端要转换的文本。

新建所要测量试验的源文件

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

实施命令:

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

乐百家服务器 9

 

顾客端验证

[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、目录管理
服务端配置
继之编辑/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 源删除文件或目录,指标也会跟着删除,不然不会删除。可以私下认可设置为 False。

新建所要测量试验的源目录

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

实行命令:

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

乐百家服务器 10

 

顾客端验证

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

测量试验增加和删除成效

[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

施行命令:

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

乐百家服务器 11

 

顾客端验证

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

1 directory, 2 files

只顾:由上图能够,成功在顾客端 /tmp/testdir/ 目录下开创了 mydir 目录以及 testdir.add 文件,并剔除 2.txt 文书。这里值得注意的是要旗开马到创办 mydir 目录,前提是 mydir 目录下要有文件,如这里的111.txt 文件,假设未有,客商端是不会成立 mydir 目录的。

 

3. 安装

在SaltsStack架构中服务端叫作Master,客商端叫作Minion,都以以守护进度的方式运行,平昔监听配置文件中定义的ret_port(saltstack客商端与服务端通讯的端口,肩负接收客商端发送过来的结果,暗中同意4506端口)和publish_port(saltstack的音讯表露系统,暗许4505端口)的端口。当迷你on运转时会自动再而三到布置文件中定义的Master地址ret_port端口进行连接认证。

  • Master:调整主题,salt命令运营和财富情状管理
  • Minion : 必要管住的客商端机器,会积极性去连接Mater端,并从Master端获得财富气象音信,同步能源管理音信
  • States:配置管理的指令集
  • Modules:在指令行竹秋布置文件中动用的吩咐模块,能够在指令行中运行
  • Grains:minion端的变量,静态的
  • Pillar:minion端的变量,动态的比较私密的变量,能够经过安插文件落到实处联机minions定义
  • highstate:为minion端下发长久增加状态,从sls配置文件读取.即同步状态配置
  • salt_schedule:会自动保持客户端配置

怎么选择grains?

在所有minion上切换到/目录以salt用户运行uname -a命令。
salt '10.252.137.141' cmd.run 'uname -a' cwd=/ user=salt
配置master

服务端和顾客端都要布置

[root@saltstack ~]# vi /etc/salt/minion  16
以下两种方式都可以,选择其中一种即可
# master改为服务端的主机名
master: saltstack    
# master改为服务端的IP
master: 172.16.0.19

个别修改三台机器minion文件中的的id为友好的主机名

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

启动saltstack服务
服务端

[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

Saltstack 连忙入门教程,Saltstack入门教程

主导术语

说明
master 控制中心,salt命令运行和资源状态管理端
minions 需要管理的客户端机器,会主动连接master端,并从master端得到资源状态信息,同步资源管理信息
states 配置管理的指令集
grains minion端的静态变量
pillar minion端的动态变量
highstate 给minion永久添加状态,从sls配置文件读取
salt schedule 自动保持客户端配置
yum -y install salt-master
service salt-master start

12.第11中学距离实行命令

(1)接着编辑此前的 top.sls 文件

[[email protected] ~]# vim /srv/salt/top.sls
[[email protected] ~]# cat /srv/salt/top.sls
base:
  'nb1':
    - cmdtest
  'nb2':
    - filedir
[[email protected] ~]# 

(2)新建 cmdtest.sls 文件

[[email protected] ~]# vim /srv/salt/cmdtest.sls
[[email protected] ~]# cat /srv/salt/cmdtest.sls
cmd-test:  
  cmd.run:
    - onlyif: test -f /tmp/1.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root
[[email protected] ~]# 

原则 onlyif 表示若 /tmp/1.txt文件存在,则实践后边的指令;能够动用 unless,两个正好相反。

[[email protected] ~]# echo "hello" > /tmp/1.txt
[[email protected] ~]# cat /tmp/1.txt 
hello
[[email protected] ~]#

(3)实施命令

[[email protected] ~]# salt 'nb1' state.highstate
nb1:
----------
          ID: cmd-test
    Function: cmd.run
        Name: touch /tmp/cmdtest.txt
      Result: True
     Comment: Command "touch /tmp/cmdtest.txt" run
     Started: 02:23:07.347360
    Duration: 565.866 ms
     Changes:   
              ----------
              pid:
                  7209
              retcode:
                  0
              stderr:
              stdout:
----------
          ID: cmd-test
    Function: cmd.run
        Name: mkdir /tmp/cmdtest
      Result: True
     Comment: Command "mkdir /tmp/cmdtest" run
     Started: 02:23:07.913505
    Duration: 208.682 ms
     Changes:   
              ----------
              pid:
                  7245
              retcode:
                  0
              stderr:
              stdout:

Summary
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
[[email protected] ~]#

(4)验证

[[email protected] ~]# ll /tmp|grep cmd
drwxr-xr-x 2 root root   6 Aug 21 02:23 cmdtest
-rw-r--r-- 1 root root   0 Aug 21 02:23 cmdtest.txt
[[email protected] ~]# 

sls中使用

#在top.sls中使用 

'os:Ubuntu': 
  - match: grain 
  - webserver 

在top.sls入口中对系统是Ubuntu的服务器执行webserver.sls里定义的状态信息。 
  1. CIDR匹配

    salt -S '10.252.137.0/24' test.ping

8.1由此Minion配置文件定义Grains

先介绍下比较简单的Grains自定义方法,就是通过Minion配置文件定义

Minions的Grains音讯是在Minions服务运营的时候陈述给Matser的,所以大家须要修改好Minion配置文 件后重启迷你on服务。在Minion的/etc/salt/minion配置文件中默许有局地注释行。这里就是在Minion上 的minion配置文件中什么定义Grains音信例子。上边只需依赖活动的要求依据以下格式去填写相应的 键值对就行,我们注意格式就行,SaltStack的布局文件的默许格式都是YAML格式:

# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets 4 custom grains, with
# the 'roles' grain having two values that can be matched against.
#grains:
#  roles:
#    - webserver
#    - memcache
#  deployment: datacenter4
#  cabinet: 13
#  cab_u: 14-15

为了统一保管Minion的Grains消息,须求把那几个注释复制到minion.d/grains文件中

自定义 grains,客商端上安顿

[[email protected] ~]# vi /etc/salt/minion

# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets 4 custom grains, with
# the 'roles' grain having two values that can be matched against.
grains:
  roles:
    - nginx
  env:
    - test
  myname:
    - hadron
#  deployment: datacenter4
#  cabinet: 13
#  cab_u: 14-15

重启salt-minion

[[email protected] ~]# ps -aux|grep salt-minion
root      38792  0.0  0.1 231928 15388 pts/0    S    02:32   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      38795  0.5  0.3 547648 28872 pts/0    Sl   02:32   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      43928  0.3  0.1 231928 15384 pts/0    S    02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      43933  1.8  0.3 547648 28784 pts/0    Sl   02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      45693  0.0  0.0 112648   960 pts/0    S    02:34   0:00 grep --color=auto salt-minion
root      50604  0.0  0.1 231928 15384 pts/0    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-minion start
root      50607  0.0  0.3 760916 29024 pts/0    Sl   Aug17   0:48 /usr/bin/python /usr/bin/salt-minion start
root      92074  0.0  0.1 231928 15388 pts/0    S    01:58   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      92077  0.0  0.3 547916 26832 pts/0    Sl   01:58   0:01 /usr/bin/python /usr/bin/salt-minion restart
[[email protected] ~]# kill 38792 43928 45693 50604
-bash: kill: (45693) - No such process
[[email protected] ~]# ps -aux|grep salt-minion
root      43933  1.2  0.3 547648 28784 pts/0    Sl   02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      46529  0.0  0.0 112648   956 pts/0    S    02:35   0:00 grep --color=auto salt-minion
root      92074  0.0  0.1 231928 15388 pts/0    S    01:58   0:00 /usr/bin/python /usr/bin/salt-minion restart
root      92077  0.0  0.3 547916 26832 pts/0    Sl   01:58   0:02 /usr/bin/python /usr/bin/salt-minion restart
[1]   Terminated              salt-minion start
[3]-  Terminated              salt-minion restart
[4]   Terminated              salt-minion restart
[[email protected] ~]# kill 92077 92074 43933
-bash: kill: (43933) - No such process
[[email protected] ~]# ps -aux|grep salt-minion
root      48215  0.0  0.0 112648   960 pts/0    S    02:36   0:00 grep --color=auto salt-minion
[2]   Terminated              salt-minion restart
[[email protected] ~]# salt-minion restart &
[1] 49052
[[email protected] ~]# 

服务端获取 grains

[[email protected] ~]# salt 'nb1' grains.item role env myname
nb1:
    ----------
    env:
        - test
    myname:
        - hadron
    role:
        - nginx
[[email protected] ~]# 
[[email protected] ~]# salt 'nb1' grains.item role
nb1:
    ----------
    role:
        - nginx
[[email protected] ~]#

留神:grains 在远距离试行命令时很实惠。我们能够遵守 grains 的局地目标来操作。比如把具有的 web 服务器的 grains 的 role 设置为 nginx,这那样大家就足以批量对 nginx 的服务器实行操作了:

[[email protected] ~]# salt -G role:nginx cmd.run 'hostname'
nb1:
    nb1
[[email protected] ~]# 

[[email protected] ~]# salt -G os:CentOS cmd.run 'hostname'
nb1:
    nb1
nb0:
    nb0
nb2:
    nb2
[[email protected] ~]#

使用pillar

Target:

#salt使用 -l 选项来使用pillar
➜ pillar git:(master) ✗ sudo salt -l ”roles:webserver” test.ping

sls文件中使用:

#如根据系统环境安装git
➜ salt git:(master) ✗ cat git_env.sls
git:
  pkg.installed:
    - name: {{pillar[‘git’]}}

#或者:
git:
  pkg.installed:
    - name: {{ salt[‘pillar.get’](‘git’, ‘git’) }}

sls文件寄存根路径在master配置文件中定义,默认为/srv/salt,该目录在操作系统上海市蜃楼,供给手动创设。

4.配置

处理对象Target

在saltstack系统中,大家的管理对象叫作Target。在Master上大家得以选取不相同的Target去管理不相同的Minion。那些Target能够是主机名、系统音信、定义的分组、以至是自定义绑定的对象。

导读 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS EC2实例),它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。号称世界上最快的消息队列ZeroMQ使得SaltStack能快速在成千上万台机器上进行各种操作。

14.4 命令下进行服务端的台本

[[email protected] ~]# vim /srv/salt/test/shell.sh
[[email protected] ~]# cat /srv/salt/test/shell.sh
#! /bin/bash
echo "hadron.cn" > /tmp/shell.txt
[[email protected] ~]# 

[[email protected] ~]# salt 'nb2' cmd.script salt://test/shell.sh
nb2:
    ----------
    pid:
        86257
    retcode:
        0
    stderr:
    stdout:
[[email protected] ~]# 

[[email protected] ~]# cat /tmp/shell.txt 
hadron.cn
[[email protected] ~]# 

Salt state树

# 在/etc/salt/master中配置file_roots
file_roots: 
  base: 
  - /srv/salt 

master配置文件中定义了两种景况,每一个情况都得以定义多个目录,但是要幸免争持,分别如下:

10.states文件

salt states的为主是sls文件,该公文使用YAML语法定义了有的k/v的数量。

sls文件存放根路线在master配置文件中定义,默感觉/srv/salt,该目录在操作系统上空中楼阁,须要手动成立。

在salt中得以透过salt://代替根路线,譬喻你能够透过salt://top.sls访问/srv/salt/top.sls。

在states中top文件也由master配置文件定义,默感到top.sls,该公文为states的进口文件。 二个总结的sls文件如下:

apache:
 pkg.installed
 service.running
   - require:
     - pkg: apache

表达:此SLS数据确定保障叫做”apache”的软件包(package)已经安装,并且”apache”服务(service)正在运维中。

  • 首先行,被堪称ID表达(ID Declaration)。ID表达注脚能够操控的名字。
  • 第二行和第四行是State说明(State Declaration),它们各自选取了pkg和service states。pkg state通过系统的包管理其管理非同一般包,service state管理连串服务(daemon)。 在pkg及service列上边是运转的点子。方法定义包和劳动应该如何做。此处是软件包应该棉被服装置,服务应该处于运营中。
  • 第六行使用require。本办法称为”必得指令”(Requisite Statement),注脚独有当apache软件包安装成功时,apache服务才开动起来

salt-master是由此写sls配置管理minion上海重机厂复指令的,服务处境等等。

salt states的基本是sls文件,该公文使用YAML语法定义了一些k/v的数额。sls文件贮存根路线在master配置文件中定义,默以为/srv/salt,该目录在操作系统上子虚乌有,须求手动创制。

[[email protected] ~]# mkdir -p /srv/salt/base

查看grains信息

sudo salt ‘qianlnk’ grains.items

若是创制完states并修改完top.sls之后,你能够在master上奉行上边发号施令:

15.问题

 [[email protected] ~]# salt-master start
[ERROR   ] An extra return was detected from minion nb1, please verify the minion, this could be a replay attack
[ERROR   ] An extra return was detected from minion nb1, please verify the minion, this could be a replay attack

施行叁回命令,重回三个值

 [[email protected] ~]# salt '*' cmd.run   'df -h'
nb1:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.3G   44G   9% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   24K  3.9G   1% /dev/shm
    tmpfs                3.9G  385M  3.5G  10% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
nb1:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.3G   44G   9% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   24K  3.9G   1% /dev/shm
    tmpfs                3.9G  385M  3.5G  10% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
nb0:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G   27G   22G  55% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   16K  3.9G   1% /dev/shm
    tmpfs                3.9G  394M  3.5G  11% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
    /dev/loop0           7.8G  7.8G     0 100% /var/ftp/iso-home
[[email protected] ~]#

标题发出的原故在node2节点上海重机厂新运维

 [[email protected] ~]# salt-minion start
^C[WARNING ] Stopping the Salt Minion
[WARNING ] Exiting on Ctrl-c
[[email protected] ~]# 

ctrl c终止第三次的salt-minion运转就能够。

目录

  • saltstack简介
  • 安装saltstack
  • grains&pillar
  • 管理对象Target
  • 布署水管道理States
  • 自定义module
/srv/salt
├── apache
│   └── init.sls
└── top.sls

6.安排认证

(1)在服务端上操作 新开辟贰个nb0终端

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

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

[[email protected] ~]# salt-key -a nb2
The following keys are going to be accepted:
Unaccepted Keys:
nb2
Proceed? [n/Y] y
Key for minion nb2 accepted.
You have mail in /var/spool/mail/root
[[email protected] ~]#

[[email protected] ~]# salt-key
Accepted Keys:
nb0
nb1
nb2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[[email protected] ~]# 

只顾: 在==大范围计划Minion==的时候能够安装自动接受内定等待认证的 key

在改换/etc/salt/master前,先备份一下

[[email protected] ~]# cp /etc/salt/master /etc/salt/master.bak

通过vi打开/etc/salt/master

[[email protected] ~]# vi /etc/salt/master

找到#auto_accept: False一行,修改False为True

# Enable auto_accept, this setting will automatically accept all incoming
# public keys from the minions. Note that this is insecure.
#auto_accept: False

照旧通过sed命令修改

[[email protected] ~]# sed -i 's/#auto_accept: False/auto_accept: True/g' /etc/salt/master

ctrl c结束salt-master,然后再开发银行

[[email protected] ~]# salt-master start 
^C[WARNING ] Stopping the Salt Master
[WARNING ] Stopping the Salt Master

Exiting on Ctrl-c
[WARNING ] Stopping the Salt Master

Exiting on Ctrl-c

Exiting on Ctrl-c
[[email protected] ~]# salt-master start

(2)测量试验表明

[[email protected] ~]# salt '*' test.ping
nb2:
    True
nb1:
    True
nb0:
    True
[[email protected] ~]#

这里的 * 必得是在 master 上早就被接受过的顾客端,可以经过 salt-key 查到

远程试行命令

[[email protected] ~]# salt '*' cmd.run   'df -h'
nb0:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G   26G   22G  55% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   16K  3.9G   1% /dev/shm
    tmpfs                3.9G  402M  3.5G  11% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
    /dev/loop0           7.8G  7.8G     0 100% /var/ftp/iso-home
nb1:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.3G   44G   9% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   12K  3.9G   1% /dev/shm
    tmpfs                3.9G  377M  3.5G  10% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
nb2:
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   48G  4.9G   43G  11% /
    devtmpfs             3.9G     0  3.9G   0% /dev
    tmpfs                3.9G   12K  3.9G   1% /dev/shm
    tmpfs                3.9G  401M  3.5G  11% /run
    tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1           1014M  139M  876M  14% /boot
    /dev/mapper/cl-home   24G   33M   24G   1% /home
    tmpfs                781M     0  781M   0% /run/user/0
[[email protected] ~]# 

先是大家要知道在设置SaltStack的时候Master 跟Minion端都分别安装了怎么文件,那样方便我们去领会SaltStack日后的一对一般操作。大家能够通过以下命令查看SaltStack安装配备的时候分别安 装了怎么样命令(yum安装格局)。

[[email protected] ~]# rpm -ql salt-master
/etc/salt/master            #salt master 配置文件
/usr/bin/salt               #salt master  核心操作命令
/usr/bin/salt-cp            #salt  文件传输命令
/usr/bin/salt-key           #salt  证书管理命令
/usr/bin/salt-master        #salt master  服务命令
/usr/bin/salt-run           #salt master runner 命令
/usr/bin/salt-unity
/usr/lib/systemd/system/salt-master.service
/usr/share/man/man1/salt-cp.1.gz
/usr/share/man/man1/salt-key.1.gz
/usr/share/man/man1/salt-master.1.gz
/usr/share/man/man1/salt-run.1.gz
/usr/share/man/man1/salt-unity.1.gz
/usr/share/man/man7/salt.7.gz
[[email protected] ~]#

[[email protected] ~]# salt --version
salt 2015.5.10 (Lithium)
[[email protected] ~]#

测试

> sudo salt "qianlnk" test.ping
qianlnk:
  True

> sudo salt "qianlnk" cmd.run 'uptime'
qianlnk:
  13:34:25 up 14 days, 2:37, 1 user, load average: 0.04, 0.18, 0.16

target可以是以下内容:

14.1正片文件到客商端

[[email protected] ~]# salt 'nb1' cp.get_file salt://apache.sls /tmp/cp.txt
nb1:
    /tmp/cp.txt
[[email protected] ~]#

[[email protected] ~]# cat /tmp/cp.txt 
apache-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
[[email protected] ~]# 

master接受minion的key

> sudo salt-key -L                
Accepted Keys:
Denied Keys:
Unaccepted Keys:
qianlnk
Rejected Keys:

> sudo salt-key -a qianlnk
The following keys are going to be accepted:
Unaccepted Keys:
qianlnk
Proceed? [n/Y] y
Key for minion qianlnk accepted.

> sudo salt-key -L        
Accepted Keys:
qianlnk
Denied Keys:
Unaccepted Keys:
Rejected Keys:

由此上面发号施令能够查阅全部的function:
salt '10.252.137.141' sys.doc cmd

本文由乐百家服务器发布,转载请注明来源:高效入门SaltStack