使用saltstack的前提是PPT      服务、流程、工具和技术

安装

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. C#多线程之基础篇3

    在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...

  2. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  3. 2000条你应知的WPF小姿势 基础篇<15-21>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...

  4. ABP框架实践基础篇之开发UI层

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...

  5. C#多线程之基础篇2

    在上一篇C#多线程之基础篇1中,我们主要讲述了如何创建线程.中止线程.线程等待以及终止线程的相关知识,在本篇中我们继续讲述有关线程的一些知识. 五.确定线程的状态 在这一节中,我们将讲述如何查看一个线 ...

  6. C#多线程之基础篇1

    在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程 ...

  7. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  8. iOS系列 基础篇 04 探究视图生命周期

    iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...

  9. iOS系列 基础篇 05 视图鼻祖 - UIView

    iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...

随机推荐

  1. Anaconda快速加载opencv

    刚刚发现了两种Anaconda快速加载opencv的方法,亲测有效: 第一种: 直接在Navigator Environment 中搜opencv 如果搜不到,登陆Anaconda Cloud官网 h ...

  2. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  3. CF833D Red-Black Cobweb

    题面 题解 点分治大火题... 设白边数量为$a$,黑边为$b$,则$2min(a,b)\geq max(a,b)$ 即$2a\geq b\;\&\&2b\geq a$ 考虑点分治时如 ...

  4. 【LOJ4632】[PKUSC2018]真实排名

    [LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...

  5. Redash二次开发-开发环境搭建

    环境:win7+pycharm 2018.2 +redash 1.安装pycharm并如何正常使用,找度娘. 2.配置pycharm vcs,设置github用户,从github新建redash项目 ...

  6. 解决E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

    是不是在使用ubuntu的时候特别是安装或更新的时候会出现下面的情况:  E: Could not get lock /var/lib/dpkg/lock - open (11: Resource t ...

  7. 用原生JS实现的一个导航下拉菜单,下拉菜单的宽度与浏览器视口的宽度一样(js+html+css)

    这个导航下拉菜单需要实现的功能是:下拉菜单的宽度与浏览器视口的宽度一样宽:一级导航只有两项,当鼠标移到一级导航上的导航项时,相应的二级导航出现.在本案例中通过改变二级导航的高度来实现二级导航的显示和消 ...

  8. JDBC处理大数据

    1.处理大文本 package com.demo; import java.io.File; import java.io.FileNotFoundException; import java.io. ...

  9. PHPCMS V9 的手机门户wap绑定单页面

    当前的Phpcms V9手机网站的设置还有点弱,绑定的栏目不能设置选择模板,而且不能绑定单页面page.不过可以自定义做到绑定单页面page这一个功能:1.修改phpcms\modules\wap\i ...

  10. python编辑购物车

    一.需求分析 输入工资金额,进入购物车,并打印输出商品编号和价格,用户可以通过输入商品编号进行商品选购 余额不足时,打印提示信息 通过q进行退出结算 购物车能够循环购物 二.代码实现 ShoopCar ...