安装

rpm -Uvh http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

yum install salt-master salt-minion -y

/etc/init.d/salt-master start

/etc/init.d/salt-minion start

[root@linux-node1 master]# grep '^[a-z]' /etc/salt/minion

master: 10.0.0.7                #master的ip

1:三种运行方式

local

master/minion

salt  ssh

2:三大功能

远程执行、配置管理、云管理

2.1:配置管理

分为三个环境,base、dev、prod

[root@linux-node1 salt]# vim /etc/salt/master

[root@linux-node1 master]# mkdir -p /srv/salt

[root@linux-node1 master]# /etc/init.d/salt-master restart 
Stopping salt-master daemon:                               [确定]

Starting salt-master daemon:                                [确定]

首先创建top.sls文件:是一个入口文件

[root@linux-node1 master]# cd /srv/salt/

base:                                     #定义使用base环境

'*':                                       #定义主机,可以使用*,也可以直接指定主机名

- apache                           #状态文件名称,建议分目录

在/srv/salt/下面创建一个文件夹如init,把相同类型的功能的文件都放在同一个目录下面,在起下面创建一个apache.sls文件。

调用的时候使用这种方式: - init.apache  不需要加上后缀名

apache-install:                                  #ID声明,声明是干什么用的

pkg.installed:                                 #PKG是一个软件包状态模块,installed是其中的方法

- names:                                     #表明要装的包的名字,因为是装多个包

- httpd

- httpd-devel

[root@linux-node1 master]# salt '*' state.sls apache

#使用salt对所有的机器使用state这个模块下的sls方法来执行apache这个状态模块

#如果使用的分目录的方式,执行的方法是:salt '*' state.sls init.apache

实例:

[root@linux-node1 salt]# cd /srv/salt/

[root@linux-node1 salt]# mkdir init

[root@linux-node1 salt]# cd /srv/salt/ 
[root@linux-node1 salt]# cat top.sls

base:

'*':

- init.tree

[root@linux-node1 salt]# cd /srv/salt/init/ 
[root@linux-node1 init]# cat tree.sls 
tree-install: 
  pkg.installed: 
    - names: 
      - tree

- cmake

[root@linux-node1 salt]# salt '*' state.sls init.tree

linux-node2.example.com: 
---------- 
          ID: tree-install 
    Function: pkg.installed 
        Name: cmake 
      Result: True 
     Comment: The following packages were installed/updated: cmake 
     Started: 00:07:37.492640 
    Duration: 44100.373 ms 
     Changes:   
              ---------- 
              cmake: 
                  ---------- 
                  new: 
                      2.8.12.2-4.el6 
                  old: 
              libarchive: 
                  ---------- 
                  new: 
                      2.8.3-4.el6_2 
                  old: 
---------- 
          ID: tree-install 
    Function: pkg.installed 
        Name: tree 
      Result: True 
     Comment: Package tree is already installed. 
     Started: 00:08:21.607298 
    Duration: 1.081 ms 
     Changes:   
Summary 
------------ 
Succeeded: 2 (changed=1) 
Failed:    0 
------------

Total states run:     2

使用salt来管理文件

[root@linux-node1 files]# cat /srv/salt/top.sls

base:

'*':

- init.tree

- init.limit-conf

[root@linux-node1 files]# mkdir /srv/salt/init/files

[root@linux-node1 files]# cp /etc/security/limits.conf /srv/salt/init/files/

[root@linux-node1 files]# cat /srv/salt/init/limit-conf.sls

limit-conf-config:

file.managed:

- name: //etc/security/limits.conf

- source: salt://init/files/limits.conf

- user: root

- group: root

- mode: 644

[root@linux-node1 files]# salt '*' state.highstate

linux-node2.example.com:

----------

ID: tree-install

Function: pkg.installed

Name: cmake

Result: True

Comment: Package cmake is already installed.

Started: 00:31:45.787593

Duration: 1483.04 ms

Changes:

----------

ID: tree-install

Function: pkg.installed

Name: tree

Result: True

Comment: Package tree is already installed.

Started: 00:31:47.270901

Duration: 0.796 ms

Changes:

----------

ID: limit-conf-config

Function: file.managed

Name: //etc/security/limits.conf

Result: True

Comment: File //etc/security/limits.conf updated

Started: 00:31:47.326445

Duration: 21.848 ms

Changes:

----------

diff:

---

+++

@@ -39,8 +39,8 @@

#<domain>      <type>  <item>         <value>

#

-#*               soft    core            0

-#*               hard    rss             10000

+*               soft    core            0

+*               hard    rss             10000

#@student        hard    nproc           20

#@faculty        soft    nproc           20

#@faculty        hard    nproc           50

Summary

------------

Succeeded: 3 (changed=1)

Failed:    0

------------

Total states run:     3

2.1:远程控制

[root@linux-node1 master]#salt '*' cmd.run 'df -h'

grains

收集信息

匹配minion

[root@linux-node1 master]# salt '*' grains.get os

[root@linux-node1 master]# salt '*' grains.ls

[root@linux-node1 master]# salt '*' grains.items

[root@linux-node1 master]# salt '*' grains.get fqdn

[root@linux-node1 master]# salt '*' grains.get ip_interfaces:eth0

[root@linux-node1 master]#salt '*' grains.get os

[root@linux-node1 master]# salt -G os:CentOS cmd.run 'uptime'

vim /etc/salt/minion

/etc/init.d/salt-minion restart

salt -G 'roles:memcache' cmd.run 'echo hehe'

vim /etc/salt/grains

web: nginx

/etc/init.d/salt-minion restart

[root@linux-node1 salt]# vim /srv/salt/top.sls

pillar

给minion指定它想要的数据,在master端来进行操作

vim /etc/salt/master

[root@linux-node1 salt]# mkdir /srv/pillar

[root@linux-node1 salt]# /etc/init.d/salt-master restart 
Stopping salt-master daemon:                               [确定]

Starting salt-master daemon:                                [确定]

[root@linux-node1 salt]# cd /srv/pillar/

[root@linux-node1 pillar]# vim apache.sls

[root@linux-node1 pillar]# salt '*' pillar.items 
linux-node2.example.com: 
    ---------- 
    apache: 
        httpd 
linux-node1.example.com: 
    ---------- 
    apache:

httpd

[root@linux-node1 pillar]# salt -I 'apache:httpd' test.ping 
linux-node1.example.com: 
    Minion did not return. [No response] 
linux-node2.example.com:

Minion did not return. [No response]

[root@linux-node1 pillar]# salt '*' saltutil.refresh_pillar   #刷新一下pillar

linux-node2.example.com: 
    True 
linux-node1.example.com: 
    True 
[root@linux-node1 pillar]# salt -I 'apache:httpd' test.ping 
linux-node2.example.com: 
    True 
linux-node1.example.com:

True

salt  目标   模块   返回

目标的匹配

通配符

https://docs.saltstack.com/en/latest/topics/targeting/globbing.html#targeting-glob

salt '*..example.com ' test.ping

salt '*.example.*' test.ping

salt 'web?.example.net' test.ping

salt 'web[1-5]' test.ping

salt 'web[1,3]' test.ping

salt 'web-[x-z]' test.ping

主机名命名例子:nginx-node01.web.idc01.oldboy.com

正则表达式

salt -E 'salt -E 'linux-node(1|2).example.com' test.ping

在top.sls中这写

base:

'linux-node(1|2).example.com':

- match: pcre

- webserver

list列表

salt -L 'linux-node(1|2).example.com' test.ping

IP地址(SUBNET/IP ADDRESS MATCHING)

https://docs.saltstack.com/en/latest/topics/targeting/ipcidr.html

salt -S 192.168.40.20 test.ping 
salt -S 10.0.0.0/24 test.ping

NODE GROUPS

https://docs.saltstack.com/en/latest/topics/targeting/nodegroups.html

grains

https://docs.saltstack.com/en/latest/topics/targeting/grains.html

pillar

https://docs.saltstack.com/en/latest/topics/targeting/pillar.html

模块

服务的模块

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.service.html#module-salt.modules.service

salt '*' service.available sshd

salt '*' service.get_all

salt '*' service.reload <service name>

salt '*' service.restart <service name>

salt '*' service.start <service name>

salt '*' service.status <service name> [service signature]

salt '*' service.stop <service name>

网络的模块

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.network.html

磁盘的模块(salt.modules.disk)

http://docs.saltstack.cn/zh_CN/latest/ref/modules/all/salt.modules.disk.html?highlight=disk#module-salt.modules.disk

salt '*' network.active_tcp

salt '*' network.arp

salt '*' network.connect archlinux.org 80

salt '*' network.connect archlinux.org 80 timeout=3

salt '*' network.connect archlinux.org 80 timeout=3 family=ipv4

salt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3

salt '*' network.default_route

salt '*' network.dig archlinux.org

salt '*' network.getbufsize                                         #Return network buffer sizes as a dict

salt '*' network.get_hostname

salt '*' network.hw_addr eth0

salt '*' network.in_subnet 10.0.0.0/16

salt '*' network.interface eth0

salt '*' network.interface_ip eth0

salt '*' network.interfaces

salt '*' network.mod_hostname master.saltstack.com                   #Modify hostname

ACL认证

https://docs.saltstack.com/en/latest/ref/clientacl.html

[root@linux-node1 pillar]# vim /etc/salt/master

[root@linux-node1 ~]# chown -R oldboy.oldboy /var/log/salt/master 
[root@linux-node1 ~]# su - oldboy 
[oldboy@linux-node1 ~]$ salt '*' test.ping 
linux-node2.example.com: 
    True 
linux-node1.example.com:

True

返回

返回到数据库

这个数据库可以安装在任意的一台机器上,

[root@linux-node1 ~]# vim yum -y install mysql-server

在所有的minion端都要安装,因为是从客户端返回数据的

yum -y install  MySQL-python

http://docs.saltstack.cn/zh_CN/latest/ref/returners/all/salt.returners.mysql.html?highlight=return

[root@linux-node1 ~]# vim /etc/salt/master

master_job_cache: mysql 
mysql.host: '10.0.0.7' 
mysql.user: 'salt' 
mysql.pass: 'salt' 
mysql.db: 'salt'

mysql.port: 3306

在mysql数据库中进行操作:

CREATE DATABASE  `salt` 
  DEFAULT CHARACTER SET utf8 
  DEFAULT COLLATE utf8_general_ci; 
USE `salt`; 
-- 
-- Table structure for table `jids` 
-- 
DROP TABLE IF EXISTS `jids`; 
CREATE TABLE `jids` ( 
  `jid` varchar(255) NOT NULL, 
  `load` mediumtext NOT NULL, 
  UNIQUE KEY `jid` (`jid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
-- 
-- Table structure for table `salt_returns` 
-- 
DROP TABLE IF EXISTS `salt_returns`; 
CREATE TABLE `salt_returns` ( 
  `fun` varchar(50) NOT NULL, 
  `jid` varchar(255) NOT NULL, 
  `return` mediumtext NOT NULL, 
  `id` varchar(255) NOT NULL, 
  `success` varchar(10) NOT NULL, 
  `full_ret` mediumtext NOT NULL, 
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  KEY `id` (`id`), 
  KEY `jid` (`jid`), 
  KEY `fun` (`fun`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
-- 
-- Table structure for table `salt_events` 
-- 
DROP TABLE IF EXISTS `salt_events`; 
CREATE TABLE `salt_events` ( 
`id` BIGINT NOT NULL AUTO_INCREMENT, 
`tag` varchar(255) NOT NULL, 
`data` varchar(1024) NOT NULL, 
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
KEY `tag` (`tag`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--

grant all on salt.* to salt@'%' identified by 'salt';

[root@linux-node1 ~]# /etc/init.d/salt-master restart

接下来执行命令,查看记录在数据库中

mysql> use salt;

mysql> select * from salt_returns;

配置管理

可以在/etc/salt/master中看top.sls的信息,默认是在base环境下的。

[root@linux-node1 salt]# vim /etc/salt/master

file_roots: 
  base: 
    - /srv/salt/base 
  test: 
    - /srv/salt/test 
  prod:

- /srv/salt/prod

[root@linux-node1 salt]# /etc/init.d/salt-master restart 
Stopping salt-master daemon:                               [确定] 
Starting salt-master daemon:                               [确定] 
[root@linux-node1 salt]# mkdir /srv/salt/base 
[root@linux-node1 salt]# mkdir /srv/salt/test

[root@linux-node1 salt]# mkdir /srv/salt/prod

[root@linux-node1 salt]# ll /srv/salt/ 
总用量 12 
drwxr-xr-x 2 root root 4096 11月  7 10:14 base 
drwxr-xr-x 2 root root 4096 11月  7 10:13 prod 
drwxr-xr-x 2 root root 4096 11月  7 10:13 test 
[root@linux-node1 salt]# tree 

├── base 
│   ├── apache.sls 
│   └── top.sls 
├── prod

└── test

Saltstack-初体验的更多相关文章

  1. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  2. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  3. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  4. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  5. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  8. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  9. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

  10. Docker初体验

    ## Docker初体验 安装 因为我用的是mac,所以安装很简单,下载dmg下来之后拖拽安装即可完成. 需要注意的就是由于之前的docker是基于linux开发,不支持mac,所以就出现了docke ...

随机推荐

  1. Arcengine实现创建网络数据集札记(二)

    四 ArcEngine实现创建网络数据集 ArcEngine创建网络数据集的过程,与ArcMap设置的过程类似,主要通过六个步骤即可以实现. 1 定义网络数据集对象,并设置基本属性,包括网络数据集名称 ...

  2. 2015年第3本(英文第2本):Daughter of Deceit

    书名:Daughter of Deceit 作者: Victoria Holt (维多丽亚·荷特) 单词数:12万 词汇量:6000 首万词不重复词数:1700 蓝思值:570 阅读时间:1月12日- ...

  3. 操作数据库系统(OLTP)和联机分析处理系统(OLAP)的区别

    联机操作数据库系统的主要任务是执行联机事务和查询处理.这种系统称为联机事务处理(OnLine Transaction Processing,OLTP) 系统.它们涵盖了单位的大部分日常操作,如购物,库 ...

  4. 如何在Eclipse卸载之前添加的android 的 ADT

    Android开发环境配置中,怎么卸载ADT? 在Android开发环境配置中,可能会遇到很多问题,其中ADT安装失败需要卸载,怎么卸载呢?下面讲一种方法,希望能够对你有所帮助. 我采用的是Eclip ...

  5. org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused in android

    给Manifest加网络权限<uses-permission android:name="android.permission.INTERNET"/>

  6. iOS设计模式之工厂方法模式

    工厂方法模式 基本理解 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 简单工厂的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择 ...

  7. CSS 类选择器(四)

    一.类选择器 类选择用使用"."(英文点号)进行标识,后面紧跟类名 如: .red{color:red;} 类样式可以应用于文档中的多个元素,这体现了CSS代码的可重用性,帮助用户 ...

  8. Effective Java 25 Prefer lists to arrays

    Difference Arrays Lists 1 Covariant Invariant 2 Reified at runtime Erased at run time 3 Runtime type ...

  9. Effective Java 50 Avoid strings where other types are more appropriate

    Principle Strings are poor substitutes for other value types. Such as int, float or BigInteger. Stri ...

  10. 浅谈 sql 中数据的约束

    数据约束 --对用户操作表的数据进行约束 1.默认值 --当用户对使用默认值的字段不插入值的时候,就使用默认值 1)对默认值字段插入null是可以的. 2)对默认值字段可以插入非null [例如:ad ...