Saltstack三大功能

1,远程执行

2,配置管理(状态)

3,云管理

四种运行方式:

  Local            本地

  Minion/Master   C/S 

  Syndic       代理模式

  Salt SSH

安装仓库

yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm

安装master和minion

yum -y install salt-master salt-minion

客户端安装minion

不修改master配置文件就可以先启动master

systemctl start salt-master

修改minion配置文件

vim /etc/salt/minion

16行填写master地址

103号配置ID(也可以不配置默认使用主机名为ID这里我没有配置)

启动

systemctl start salt-minion

会在/etc/salt文件夹下面生成一个id文件就是主机名(不要随意修改,因为启动需要读取minion_id,如果修改需要先把这个文件删除然后在启动的时候又自动生成)

修改两个个客户端的配置文件然后启动(分别为我的web服务器和ios服务器)

需要经过master认证以后才能使用

minion第一次启动会生成一个pki目录

pem是私钥 pub为公钥

master下面也有一个pki文件夹

pre下是客户端发送的ID但是还没有经过master的认证

可以查看服务器端文件和客户端文件的MD5来看是不是同一个文件

通过salt-key可以查看key

同意的 拒绝的 没有同意的

同意

salt-key -A 同意所有

同意以后

同时在客户端生成一个公钥

minion_master.pub

实际上认证过程就是交换公钥的过程,实现了加密通信。

远程执行

salt '*' test.ping

这里的ping不是发送ping包而是检测客户端是否通信正常

批量执行创建文件夹的命令

salt '*' cmd.run 'mkdir /tmp/hehe'

配置管理

State 要写一个文件格式 YAML 后缀

YAML:三板斧

  1,缩进

  两个空格,不能使用Tab

  2,冒号

  表示层级关系的冒号后面没有东西,表示键值的有一个空格

  key:value

  3,短横线

  短横线后面也有一个空格

  - list1

  - list2

设置master配置文件

vim /etc/salt/master

去掉这几行的#

重启master

systemctl restart salt-master

创建配置文件目录

mkdir /srv/salt

在创建一个web配置文件目录

mkdir web

进入这个web目录创建一个配置文件apache.sls

apache-install:         #定义唯一标示
  pkg.installed:        #pkg是一个状态模块,installed是执行方法
    - names:
      - httpd
      - httpd-devel
apache-service:
  service.running:
    - name: httpd       #运行一个服务,服务名是httpd
    - enable: True      #开机自启动

执行

salt '10-8-86-172' state.sls web.apache

在对应的客户端目录/var/cache/salt生成对应的文件,是master发送给minnon的

如果客户端是centos就使用yum安装如果是Ubuntu就使用apt-get自动安装

执行完毕会在相应客户端自动安装apache并且启动

PS:后面加test = True可以先测试但是不执行

  注意编辑时候的空格,每一行的末尾也不能有空格和Tab

上面是手动执行一个模块

slat有一个高级状态

打开master配置文件(需要放在base下面)

vim /srv/salt/top.sls

base:
  '10-8-45-27':
    - web.apache
  '10-8-86-172':
    - web.apache

执行

salt '*' state.highstate

Saltstack与ZeroMQ

Saltstack使用4505 4506两个端口4505用于消息的发布

4506请求与响应

ZeroMQ不是一个传统意义的消息队列

默认salt-master进程显示都是salt-master

安装显示进程的详细信息的包

yum -y install python-setproctitle
systemctl restart salt-master
ps -ef|grep salt-master

通过进程已经建立好长连接了,所以执行速度快

SaltStack 数据系统

  Grains (谷粒)

  Pillar    (柱子)

Grains:静态数据 当Minion启动时收集的Minion本地相关信息

     操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号

     不重启就不会变,所以叫静态数据

  1,资产管理,信息查询

  2,用于目标选择

  3,配置管理中使用

查看其中一条服务器的grains信息

salt '10-8-45-27' grains.ls

salt '10-8-45-27' grains.items

查看所有机器的操作系统

salt '*' grains.item os

查看ip

salt '*' grains.item fqdn_ip4

查找出操作系统是CentOS的执行相应的命令,这样就可以做目标选择

salt -G 'os:CentOs' test.ping

salt -G 'os:CentOs' cmd.run 'echo hehe'

如果列出的grains不够用也可以自定义grains

可以修改客户端的的vim /etc/salt/minion自定义grains

先不重启,查看是没有的

重启以后再查找

重启定义为apache的apache

salt -G 'roles:apache' cmd.run 'systemcet restart httpd'

生产环境不建议写在minion直接写在

vim /etc/salt/grains

minion会自动找

grain在top里面的用法

PS:这里grain没有s

开发一个Grains 在master下

  Python。写一个Python脚本,返回一个字典就可以了

#!/usr/bin/env python
#_*_ coding: utf-8 _*_

def my_grains():
    #初始化一个grains字典
    grains = {}
    #设置字典中的key
    grains['iaas'] = 'openstack'
    grains['edu'] = 'oldboyedu'
    #返回这个字典
    return grains

  同步到minion

salt '*' saltutil.sync_grains

在minion的/var/cache/salt

在master下面查看

Grains优先级:

  1,系统自带

  2,Grains文件写的

  3,minion配置文件

  4,自己写的

PS:可以不重启salt-minion刷新更新grains命令是,salt '*' saltutil.sync_grains

Pillar:

  Pillar是动态的。给特定的Minion指定特定的数据。只有指定的minion自己能看到自己的数据(安全,比如定义用   户密码)

  和top file类似

显示

salt '*' pillar.items

默认没有显示

设置成显示

vim /etc/salt/master

systemctl restart salt-master

可以查看了 是一个名称为master的字典

还是注释掉以免影响自定义的pillar

修改master配置

重启

systemctl restart salt-master

1,写pillar sls

vim /srv/pillar/web/apache.sls

{% if granis['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

2,top file

vim /srv/pillar/top.sls

ase:
  '10-8-86-172':
    - web.apache

刷新

salt '*' saltutil.refresh_pillar

查看

salt '*' pillar.items apache

PS:注意文件apache.sls和top.sls的位置

pillar使用场景

1,目标选择

salt -I 'apache:httpd' test.ping

salt -I 'apache:httpd' cmd.run 'w'

Grains VS Pillar

     类型    数据采集方式    应用场景            定义位置

Grains   静态    minion启动时收集  数据查询 目标选择 配置管理    minion

Pillar  动态    master自定义    目标选择 配置选择 敏感数据    master

深入学习saltstack远程执行

salt '*' cmd.run 'w'

命令:salt

目标:'*'

模块: cmd.run 自带150+模块。自己写模块

返回: 执行后结果返回,Returnners

目标:Targeting

  两种:一种和minion ID有关

     一种和minion ID无关

1,Minion ID有关的方法

  minion ID

  通配符

  列表

salt -L '10-8-86-172,10-8-45-27' cmd.run 'uptime'

  正则表达式

   salt -E '10-8*' test.ping

所有匹配目标的方式,都可以用到top file里面来指定目标

主机名设置方案:

  1,IP地址

  2,根据业务来进行设置

按百分比执行

salt '*' -b 10 test.ping

模块:

返回tcp链接

salt '*' network.active_tcp

获取主机名

salt '*' network.get_hostname

取得所有在运行的服务

salt '*' service.get_all

取得对应服务的状态

salt '*' service.status sshd

往所有机器上面拷贝文件

salt-cp '*' /etc/hosts /opt/hehe

查看top file

salt '*' state.show_top

单独安装一个服务

salt '*' state.single pkg.installed name=lsof

返回程序

ruturns

数据返回到muysql这个返回是minion直接返回给mysql的不是返回给master然后到mysql的

salt.returners.mysql

客户端安装MySQL-python  (python的MySQL库)

salt '10-8-86-172' state.single pkg.installed name=MySQL-python

或者使用下面命令安装

salt '10-8-86-172' cmd.run 'yum -y install MySQL-python'

master创建数据库

create database `salt`  character set utf8  collate utf8_general_ci;

创建表

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;
CREATE INDEX jid ON jids(jid) USING BTREE;

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;

DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

修改两个minion的配置文件vim /etc/salt/minion
在尾部添加

mysql.host: '10.8.45.27'
mysql.user: 'salt'
mysql.pass: 'salt@pwd'
mysql.db: 'salt'
mysql.port: 3306

重启minion

systemctl restart salt-minion

在minion看着日志执行

先查看一下master的数据库是空的

执行  '*' test.ping --return mysql 再来查看数据库就有数据了

PS:返回程序是比较深入的,或者基于saltstack做二次开发时候使用

参考文档

https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql

编写状态模块

先看一个系统自带模块

vim /usr/lib/python2.7/site-packages/salt/modules/service.py

编写模块

1,放哪里

在/srv/salt目录下新建一个文件夹_modules

2,命名

vim _modules/my_disk.py

def list():
  cmd = 'df -h'
  ret = __salt__['cmd.run'](cmd)
  return ret

PS:是两个下划线

3,刷新

salt '*' saltutil.sync_modules

4,执行

salt '*' my_disk.list

 

Saltstack自动化运维的更多相关文章

  1. 七天学会SALTSTACK自动化运维 (3)

    七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...

  2. 七天学会SALTSTACK自动化运维 (2)

    七天学会SALTSTACK自动化运维 (2) 导读 Grains Pillar 总结 参考链接 导读 上一篇主要介绍了安装和基本的使用方法,但是我认为如果理解了相关概念的话,使用会更加顺手,因为毕竟每 ...

  3. saltstack自动化运维系列11基于etcd的saltstack的自动化扩容

    saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...

  4. saltstack自动化运维系列⑩SaltStack二次开发初探

    saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...

  5. saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3

    saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...

  6. saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix

    saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...

  7. saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived

    saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...

  8. saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy

    saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...

  9. saltstack自动化运维快速入门

    saltstack自动化运维快速入门 关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版 关于puppet ...

  10. saltstack 自动化运维

    salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...

随机推荐

  1. JdbcTemplate queryForMap EmptyResultDataAccessException

    JdbcTemplate的queryForMap方法报错 queryForMap方法使用不当,就会出错,使用方式如下: The queryForMap method in JdbcTemplate o ...

  2. 探索 OpenStack 之(15):oslo.messaging 和 Cinder 中 MessageQueue 消息的发送和接收

    前言:上一篇文章 只是 RabbitMQ 的科普,本文将仔细分析 Cinder 中 RabbitMQ 的各组件的使用.消息的发送和接收等.由于各流程步骤很多,本文只会使用若干流程图来加以阐述,尽量做到 ...

  3. nginx root && alias 文件路径配置

    文章摘自:http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/ nginx指定文件路径有两种方式root和alias ...

  4. CI框架 数据库批量插入 insert_batch()

    使用CI框架的AR操作:insert_batch()可以减少访问数据库的次数.一次访问即可. 示例1: $data = array( array( 'title' => 'My title' , ...

  5. 内核源码分析之tasklet(基于3.16-rc4)

    tasklet是在HI_SOFTIRQ和TASKLET_SOFTIRQ两个软中断的基础上实现的(它们是在同一个源文件中实现,由此可见它们的关系密切程度),它的数据结构和软中断比较相似,这篇博文将分析t ...

  6. python matplotlib.plot画图显示中文乱码的问题

    在matplotlib.plot生成的统计图表中,中文总是无法正常显示.在网上也找了些资料,说是在程序中指定字体文件,不过那样的话需要对plot进行很多设置,而且都是说的设置坐标轴标题为中文,有时候图 ...

  7. 1st day

    学习配置环境,听的一脸懵逼,不过还好装好了,哈哈哈... <?php /*写一个函数,该函数可以将给定的任意个数的参数以指定的字符串串接起来成为一个长的字符串.该函数带2个或2个以上参数,其中第 ...

  8. 怎样使用淘宝npm镜像

    淘宝的 NPM 镜像是一个完整的npmjs.org镜像.你可以用此代替官方版本(只读),同步频率目前为 15分钟 一次以保证尽量与官方服务同步. 当前 registry.npm.taobao.org ...

  9. 将openface移植到vs2013

    github上面的开源代码openface:https://github.com/TadasBaltrusaitis/OpenFace 可用于做人脸检测和头部姿态检测,该工程是在VS2015上建立的, ...

  10. python下如何安装.whl包?

    下载 .whl 包 先 pip install wheel 之后 pip install 包名字.whl 即可安装某模块包