澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:saltstack基础笔记,saltsta

2019-07-14 作者:服务器运维   |   浏览(75)

京东物流系统自动化运维平台技术揭密,物流系统揭密

自动化工具比较

Puppet也许是四款工具中最深入人心的。就可用操作、模块和用户界面而言,它是最全面的。Puppet呈现了数据中心协调的全貌,几乎涵盖每一个运行系统,为各大操作系统提供了深入的工具。初始设置比较简单,只需要在需要加以管理的每个系统上安装主服务器和客户端代理软件。命令行接口(CLI)简单直观,允许通过puppet命令下载和安装模块。然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(push)来进行更改。

Ansible关注的重点是力求精简和快速,而且不需要在节点上安装代理软件。因此,Ansible通过SSH执行所有功能。需要管理的节点被添加到Ansible配置环境,SSH授权密钥被附加到每个节点上,这与运行Ansible的用户有关。一旦完成了这步,Ansible主服务器可以通过SSH与节点进行通信,执行所有必要的任务。Ansible可以使用Paramiko(基于SSH2协议的Python实现)或标准SSH用于通信,不过还有一种加速模式,允许更快速、更大规模的通信。

Salt类似Ansible,因为它也是基于CLI的工具,采用了推送方法实现客户端通信。它可以通过Git或通过程序包管理系统安装到主服务器和客户端上。客户端会向主服务器提出请求,请求在主服务器上得到接受后,就可以控制该客户端了。Salt可以通过普通的SSH与客户端进行通信,但如果使用名为minion的客户端代理软件,可以大大增强可扩展性。此外,Salt含有一个异步文件服务器,可以为客户端加快文件服务速度,这完全是Salt注重高扩展性的一个体现。与Ansible一样,你可以直接通过CLI,向客户端发出命令,比如启动服务或安装程序包;你也可以使用名为state的YAML配置文件,处理比较复杂的任务。还有“pillar”,这些是放在集中地方的数据集,YAML配置文件可以在运行期间访问它们。

总结:个人观点puppet最大缺点就是默认情况下Agent每隔30分钟向master同步状态,master主动推送功能比较薄弱(2.7版本),ansible基于SSH服务执行,如果服务器过多不建议使用,他是使用轮训的方式。Salt基于消息队列。性能相当好,适合大量生产环境。

一、基础介绍

一、概述

环境:

作者:赵玉开,十年以上互联网研发经验,2013年加入京东,在运营研发部任架构师,期间先后主持了物流系统自动化运维平台、青龙数据监控系统和物流开放平台的研发工作,具有丰富的物流系统业务和架构经验。在此之前在和讯网负责股票基金行情系统的研发工作,具备高并发、高可用互联网应用研发经验。

简单来理解,自动化运维就是要通过机器的方式来简化整体的运维过程,特别是优化重复类型的工作,以提高运维效率,减少因人工而引起的失误操作。随着运维管理的复杂度和难度增大,自动化运维也基本成为了运维平台演进的必经之路。但如何落地自动化运维平台,不同的企业因为运维发展阶段和业务体量的不同,都有不一样的实现路径。

以京东为例,它的物流系统有很多分支机构, 比如仓库、分拨中心、转运中心等, 业务复杂的分支机构可能会有自己的信息系统, 这些信息系统往往分布式地部署到全国各地,那如何基于自动化运维平台管理好这些分支机构的服务器、 信息系统, 降低因为地域分布造成的运维维护成本呢?京东资深架构师赵玉开向 InfoQ 记者深入介绍了他们在自动化运维平台方面的一些探索和实践。另外,赵玉开也将会在 9 月 10 日举行的 CNUTCon 全球运维技术大会 上分享相关话题,欢迎关注。

InfoQ:可以先介绍下目前京东物流系统自动化运维平台的一些基本情况吗?

赵玉开: 京东物流系统自动化运维平台从 2014 年开始启动到现在已经历了三各阶段,到目前管理了 MySQL、JMQ、 Redis 及自研应用等多种实例。

众所周知,京东业务发展迅猛,每周都需要开仓,数量多达十几个。最初开仓过程特别冗长和复杂,开仓过程中涉及到研发人员部署系统、运营人员手动填写多种申请、运维人员不仅要负责中间件安装,还要负责整个流程中每个环节的进展确认及协调,这直接导致了开仓慢,且涉及到的各部门都需要投入大量的人力成本。

基于此,2014 年初我们启动了一期自动化运维平台研发的项目,2014 年 10 月项目一期上线时,已基本解决了开仓慢和人力成本的问题,也减少了开仓过程中运维同学的重复性工作内容,制定标准化模板,解放了研发人员的重复性部署工作。运营人员可通过模板直接设置,将之前一些繁琐的密码、JMQ Token 等数据实现自动化配置,大大减少了流程耗费的时间。

一期上线后,得到了流程中各环节涉及部门的赞赏,并在得到大家积极反馈后,迅速进入到二期项目。二期项目完成后,数据的初始化问题和研发日常批量部署问题也得到了解决,系统的自动化程度已可以满足日常的工作需求。

今年初,为接入更多物流作业单位,如分拣中心, 亚洲一号自动化物流中心等,我们开启了三期项目,目前项目还在持续前行中。

InfoQ:谈谈你们的自动化运维架构?以及具体涉及到的技术栈?

赵玉开: 我们的自动化运维的核心组件是 SaltStack, 我们基于 SaltStack 做了很多自定义的模块、Grains 和 Runner, 通过这些自定义的模块、Grains 以及 Runner 来支撑我们的开仓、部署、数据同步等功能。

如下图是一个指令执行过程图, 分为两个部分, 上面部分为部署在 IDC 的模块, 下半部分则是部署在库房机房的模块。

我们先逐个介绍部署在 IDC 部分的模块:

  1. Web 使用 Java 技术, 为用户提供操作界面, 控制操作权限, 使用 Activiti 工作流引擎驱动各种流程, 下发开仓过程中的自动化运维指令;
  1. Salt-API-Proxy 是 Salt-API 的代理层, 通过 Nginx 实现了反向代理, 在 Nginx 的配置中对发送指令的服务器 IP 做了限制, 另外可以通过配置指向工作的 Salt-API 服务器;
  1. Salt-API 负责和 Salt-Master 交互发送 SaltStack 的 Runner 与 Module 的 API 指令, Runner 指令是运行在 Salt-Master 服务器上的, 可以读取 master 配置, 也可以在一个 Runner 中协调执行多个 Module 运行结果;
  1. Salt-Master 有两个职责, 一是接受 salt-api 指令, runner 在本地执行, module 下发指令到对应的 salt-minion, 另一职责是运维同学手动下发指令, 完成一些非常见的 minion 配置工作;

  2. RsyncServer 负责中间件安装文件, 自研软件的文件存储和下发, RsyncServer 的文件存储是由 Salt-Master 发起的, Salt-Master 接受到 salt-api 的应用部署指令后, 会从部署指令中获得部署包下载地址, 然后下载到指定部署包存储目录, 并做解压操作; RsyncServer 的文件下发指令则是有 salt-minion 端的 Module 执行触发的。

仓库部门和 IDC 之间通过 VPN 联通, 每个仓库的服务器上都安装了 SaltStack 的 minion 端, minion 端是一个 Python 进程, 负责接收 Master 的 Module 指令, 并在本地执行。另外 minion 端在执行指令过程中需要将执行过程中的输出及时的输出给用户端, 让用户可以通过 Web 端查看执行过程的情况, 即运维的可视化, 我们是通过 minion 端的可视化模块, 将执行过程输出通过 HTTP POST 方式发送给 Web 端, Web 端将 POST 内容存储到任务执行过程输出表中, 前端通过轮询方式读取输出表中的增量消息显示给用户端。

我们采用的技术栈是 Java Python。  前端界面展示、 工作流、权限控制、任务下发这些都是用的 Java 的 Spring MVC MyBatis; 后端用的是 Python Shell, Python 写了大量的 SaltStack 自定义模块。

InfoQ:为什么当初要选择 SaltStack 而没有选择 Ansible?

赵玉开: 不可否认 Ansible 也是一个非常好的自动化运维工具, 但是基于以下两点我们最终选择了 SaltStack:

  1. API 的易用性方面和 SaltStack 有差距, 我们的自动化运维系统一开始就有一个目标, 将开仓部署以及推广版本这些功能开放给物流运营人员, 所以必须做好前端用户体验, 这需要好用的 API, SaltStack 恰好有;
  1. 性能,标准 SSH 连接的时候比较耗时,ZeroMQ 传输的速度会快很多。

InfoQ:在应用部署自动化这块,你们是怎么做的?

赵玉开: 应用部署大致分为这么几个步骤: 打包、下发文件、更新配置、停止启动实例、备份部署版本, 具体如下。

  1. 我们使用的公司统一的打包系统, 打包系统打好包, 部署任务审批通过,自动化运维系统就可以通过 API 获得打包文件, 然后将部署包上传到版本服务器, 并解压缩,放到对应版本目录下;
  1. 通过 SaltStack 的 API 下发部署指令给部署目标服务器, 部署指令是一个 SaltStack 自定义模块, 该模块首先会执行 rsync 指令从版本服务器上同步变更文件;
  1. 文件下发之后更新配置, 通过 Web 接口请求自动化运维的 Web 端下发配置文件, 然后更新配置文件, 我们线上的配置文件是通过环境变量来配置的, 所以不管有多少个库房, 都不需要更新配置文件, 只有在特殊需求是设置环境变量, 就可以依据当前作业单位的不同改变下发的配置文件的内容;
  1. 调用应用的 stop.sh 脚本停止当前实例, 再调用 start.sh 脚本启动实例, 这里有一个约定, 不管是 Web 应用还是非 Web 应用必须在部署目录有一个 bin 目录下面有 start.sh 和 stop.sh 两个文件;

  2. 如果步骤 4 执行成功, 那么将此版本的文件备份到当前服务器上, 以备回滚使用。

InfoQ:自动化运维解决了你们哪些问题?没有解决哪些问题?

赵玉开: 自动化运维解决了我们开仓周期长,人力成本高的问题, 提升了全国部署推广的效率, 大大减少了运维同事的重复性工作, 把对成熟版本的推广工作交给了运营人员, 减少了研发同事在推广上线工作上的时间。

现阶段正在探索如何通过自动化运维技术快速排查问题, 另外就是我们未来会有一些自动化的物流作业单位,如何用自动化运维平台管理好这些自动化的设备和设备软件也是我们在探索的。

InfoQ:自动化运维平台上线了这么长时间,有做过复盘吗?有哪些经验可以分享给读者?未来有什么计划?

赵玉开: 做过一些复盘, 每一期开发结束下一迭代开始的时候都会做复盘, 对现有问题进行总结, 同时收集下一步的需求。  目前看最深刻的体会是做自动化运维系统一定要做好元数据的管理,元数据要管理好服务器信息属性、 应用信息、应用配置、实例管理以及作业单位, 这些元数据要在一开始就做好, 能自动化收集的要自动化收集, 动态的参数一定要动态控制, 比如 Redis、MySQL 都有主从关系, 元数据中要存储这个主从关系, 但是不能写死, 必须有机制来更新主从关系, 否则 Redis 哨兵程序更新了 Redis 主从关系, 或者 MySQL DBA 因为某些原因切换了 MySQL 的主从, 自动化运维系统的元数据没有做对应更新,再执行指令时就会出问题, 甚至发生事故。

未来计划有两个方面:

  1. 继续通过自动化运维系统来提升运维效率、 降低研发对应用运维的投入;
  1. 做自动化物流作业系统的自动化运维, 管好其中的设备和软件服务。

InfoQ:在 CNUTCon 全球运维技术大会 上,你将会为读者分享哪些技术点?

赵玉开: 这次大会我会给大家介绍下京东物流自动化运维平台的技术架构, 并详细介绍自动化开仓、批量部署的技术细节。


CNUTCon 全球运维技术大会将于 9 月 10-11 日在上海举行,大会以“智能时代的新运维”为主题,涵盖 AIOps、SRE、DevOps、运维监控与安全等专场,邀请了来自 Google、Uber、eBay、BAT、携程、京东等公司大咖分享他们在最新运维技术实践过程中遇到的坑与经验,现场为你解疑答惑,点击“阅读原文”了解更多精彩!9 折限时优惠,报名时输入 CNUTCon-KAITAO 还可再减 200 !

SaltStack简介与特性

SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台,管理端称为 Master,客户端称为 Minion。SaltStack 具备配置管理、远程执行、监控等功能,一般可以理解为是简化版的 Puppet 和加强版的 Func。SaltStack 本身是基于 Python 语言开发实现,结合了轻量级的消息队列软件 ZeroMQ 与 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML 等)构建。

通过部署 SaltStack 环境,运维人员可以在成千上万台服务器上做到批量执行命令,根据不同的业务特性进行配置集中化管理、分发文件、采集系统数据及软件包的安装与管理等。

1、简介

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

1.1 Saltstack简介

master:

节点node1:阿里云:121.42.195.15 centos6.6

SaltStack 具有以下特性:

1、部署简单、方便;

2、支持大部分UNIX/Linux及Windows环境;

3、主从集中化管理;

4、配置简单、功能强大、扩展性强;

5、主控端(master)和被控端(minion)基于证书认证,安全可靠。

6、支持API及自定义模块,可通过Python轻松扩展。

2、特性

(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;

(6)、支持API及自定义模块,可通过Python轻松扩展。

澳门新萄京官方网站 1

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

minion:

节点node2:腾讯云:182.254.157.19 centos6.6

SaltStack 的工作原理

SaltStack 采用 C/S 结构来对云环境内的服务器操作管理及配置管理。为了更好的理解它的工作方式及管理模型,将通过图形方式对其原理进行阐述。

SaltStack 客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立可靠且加密的通信连接。同时通过消息队列 ZeroMQ 在客户端与服务端之间建立消息发布连接。具体通信原理图,如图 1 所示,命令执行如图 2 所示:

澳门新萄京官方网站 2

专业术语说明:

Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。

Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。

ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。

Daemon 是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能。

澳门新萄京官方网站 3

原理图说明:

Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。

Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。

Master 上执行某条指令通过队列下发到各个 Minions 去执行,并返回结果。

3、Master与Minion认证

(1)、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。

(2)、master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

1.2 特点

一、saltstack快速配置

  1. saltstack基本介绍
    SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

  2. saltstack相关网站


  3. saltstack三种运行方式

  4. 本地

  5. 客户端(奴才)运行
  6. saltstackSSH
  7. 运行的操作系统
  8. 特点
    (1)、部署简单、方便;
    (2)、支持大部分UNIX/Linux及Windows环境;
    (3)、主从集中化管理;
    (4)、配置简单、功能强大、扩展性强;
    (5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
    (6)、支持API及自定义模块,可通过Python轻松扩展。

安装:

SaltStack 的架构设计

为了让大家更好的理解 SaltStack 集中化管理方面的优势,因此,根据项目的实际情况绘制了部署架构图,并在文中对架构图进行了详细说明。如图 3 所示:

澳门新萄京官方网站 4

说明:

SaltStack 的所有被管理客户端节点(如图 3 所示 DB 和 Web),都是通过密钥进行加密通信,使用端口为 4506。客户端与服务器端的内容传输,是通过消息队列完成,使用端口为 4505。Master 可以发送任何指令让 Minion 执行,salt 有很多可执行模块,比如说 CMD 模块,在安装 minion 的时候已经自带了,它们通常位于你的 python 库中,locate salt | grep /usr/ 可以看到 salt 自带的所有东西。

为了更好的理解架构用意,以下将展示主要的命令发布过程:

SaltStack 的 Master 与 Minion 之间通过 ZeroMq 进行消息传递,使用了 ZeroMq 的发布订阅模式,连接方式包括 TCP 和 IPC。

Salt 命令,将 cmd.run ls 命令从 salt.client.LocalClient.cmd_cli 发布到 Master,获取一个 Jodid,根据 jobid 获取命令执行结果。

Master 接收到命令后,将要执行的命令发送给客户端 minion。

Minion 从消息总线上接收到要处理的命令,交给 minion._handle_aes 处理。

Minion._handle_aes 发起一个本地线程调用 cmdmod 执行 ls 命令。线程执行完 ls 后,调用 Minion._return_pub 方法,将执行结果通过消息总线返回给 master。

Master 接收到客户端返回的结果,调用 master.handle_aes 方法将结果写的文件中。

Salt.client.LocalClient.cmd_cli 通过轮询获取 Job 执行结果,将结果输出到终端。

4、Master与Minion的连接

(1)、SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。

澳门新萄京官方网站 5

(2)、minion与master之间的通信模式如下:

 澳门新萄京官方网站 6

以上内容转载自:

  • 简单
1.master安装

节点:node1

#yum install salt-master -y

SaltStack 的安装与配置

对 SaltStack 有了一个初步的了解之后,通过实际案例操作进一步了解 SaltStack。

一、安装Salt

Salt需要epel源支持,所有安装前需要先安装epel源包。

1、salt-master

# yum -y install salt-master

2、salt-minion

# yum -y install salt-minion

二、配置Salt

1、master(/etc/salt/master)

# salt运行的用户,影响到salt的执行权限

user: root

#salt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数

worker_threads: 10

# master的管理端口

publish_port : 4505

# master跟minion的通讯端口,用于文件服务,认证,接受返回结果等

ret_port : 4506

# 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口

syndic_master_port : 4506

# 指定pid文件位置

pidfile: /var/run/salt-master.pid

# saltstack 可以控制的文件系统的开始位置

root_dir: /

# 日志文件地址

log_file: /var/log/salt_master.log

# 分组设置

nodegroups:

group_all: '*'

# salt state执行时候的根目录

file_roots:

    base:

        - /etc/salt/

# 设置pillar 的根目录

pillar_roots:

    base:

        - /etc/pillar

2、配置minion(/etc/salt/minion)

master: mail  #这块的mail指的是在/etc/hosts文件中所定义的主机名

id: node1

3、启动salt

service salt-master start

service salt-minion start

# saltstack 是使用python2的语言编写,对python3的兼容性不好,请使用python2的环境

4、认证命令介绍

salt-key #证书管理    

# salt-key –L       #查看所有minion-key    

# salt-key –a      #接受某个minion-key    

# salt-key –A      #接受所有minion-key

# salt-key –d       #删除某个minion-key

# salt-key –D       #删除所有minion-key

澳门新萄京官方网站 7

澳门新萄京官方网站 8

澳门新萄京官方网站 9

5、salt命令介绍

命令格式:salt [options] [arguments]

例:salt * cmd.run 'uptime'

澳门新萄京官方网站 10

二、SaltStack基础安装与配置

兼顾大规模部署与更小的系统的同时提供多功能性是很困难的,Salt是非常简单配置和维护,不管项目的大小。Salt可以胜任管理任意的数量的服务器,不管是本地网络,还是跨数据中心。架构采用C/S模式,在一个后台程序中集成必要功能。默认不需要复杂的配置就可以工作,同时可以定制用于特殊的需求。

2.minion安装
#yum install salt-minion -y

SaltStack minion匹配方式

1、 Glob(salt默认的target类型,使用shell的通配符来指定一个或多个Minion ID)

# salt * test.ping 或 salt ‘*’ test.ping

2、pcre兼容正则表达式

# salt –E ‘^[m|M]in.[e|o|u]n$’ test.ping

3、Subnet(通过指定一个IPv4地址或一个CIDR的IPv4子网)

# salt –S 192.168.0.42 test.ping

# salt –s 192.168.0.0/16 test.ping

4、Grains(salt可以通过操作系统、CPU架构及自定义信息等机器特征进行target Minion)

# salt –G ‘os:Ubuntu’ test.ping

# Salt –G ‘os_family:Debian’ test.ping

5、pillar(salt支持通过pillar数据进行匹配)

# Salt –I ‘my_val:my_val’ test.ping

6、混合(compound)

# Salt –C ‘web* or G@os:Arch’ test.ping

7、节点组(Nodegroup)

节点组需要事先定义,配置方法如下:

# vim /etc/salt/master

nodegroups:

node: 'L@node1,node2’

# salt -N node test.ping

1. yum安装

CentOS7  安装
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm  -y

yum install salt-master -y

yum install salt-minion -y

CentOS6 安装
https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el6.noarch.rpm  

yum install salt-master -y

yum install salt-minion -y
  • 并行执行
3.启动:
 [root@node1 ~]#/etc/init.d/salt-master start

SaltStack常用模块

1、status模块(查看系统信息)

澳门新萄京官方网站 11

澳门新萄京官方网站 12

# salt "*" status.diskstats    #查看磁盘信息

# salt "*" status.meminfo      #查看内存信息

# salt "*" status.w            #w命令返回信息

2、查看所有module列表

澳门新萄京官方网站 13

3、查看指定module的所有function方法

澳门新萄京官方网站 14

4、查看指定module用法

澳门新萄京官方网站 15

5、具体模块的使用(例子)

澳门新萄京官方网站 16

同时到指定机器查看

澳门新萄京官方网站 17

cmd.run模块的使用

澳门新萄京官方网站 18

澳门新萄京官方网站 19

2. 配置

Master
"""
1. 修改配置文件:/etc/salt/master
    interface: 0.0.0.0    # 表示Master的IP 
2. 启动
    service salt-master start
"""


Slave
"""
1. 修改配置文件 /etc/salt/minion
    master: 10.211.55.4           # master的地址
    或
    master:
        - 10.211.55.4
        - 10.211.55.5
    random_master: True

    id: c2.salt.com                    # 客户端在salt-master中显示的唯一ID
2. 启动
    service salt-minion start
"""

Salt的核心功能:

4.配置文件
[root@node1 ~]# ll /etc/salt/
total 36
-rw-r----- 1 root root 29543 Dec  2 05:06 master
drwxr-xr-x 3 root root  4096 Mar 13 17:20 pki

我是华丽的分隔符

[root@node2 ~]# ll /etc/salt/
total 28
-rw-r----- 1 root root 26229 Dec  2 05:06 minion

Grains

Static bits of information that a minion collects about the system when the minion first starts.

The grains interface is made available to Salt modules and components so that the right salt minion commands are automatically available on the right systems.

以上是官方的解释,大致意思是说grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。例如,当os_family的Grain数据为Centos时,则会使用yum工具组件来进行软件包管理。Grains会在Minion进程启动时加载,并缓存在内存中。这样salt-minion进程就无须每次操作都重新检索系统来获取Grain,极大的提高了Minion的性能。

1、我们这里简单做一个输出测试,可以看到minion节点的一些信息如下:

澳门新萄京官方网站 20

查看具体每一项信息

澳门新萄京官方网站 21

2、应用场景:

grains的特性–每次启动汇报、静态决定了它没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了那一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色(role),磁盘个数(disk_num),操作系统版本等诸如此类非常固定的属性。简单总结起来grains的用途如下:

(1),grains可以在state系统应用中,用户配置管理模块。

(2),grains可以在target中使用,用来匹配minion,比如os,用-G。

(3),grains可以用于信息查询,grains保存着收集到的客户端的信息。

那么我们就可以得到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains。

3、grains优先级

grains可以保持在minion端、通过master端下发等多个方式来分发。但不同的方法有不同的优先级的(由低到高):

(1). /etc/salt/grains

(2) /etc/salt/minion

(3)./srv/salt/_grains/  master端_grains目录下

优先级顺序依次为存在在minion端/etc/salt/minion配置文件中的同名grains会覆盖/etc/salt/grains文件中的值,而通过master端_grains目录下grains文件下发的值可以会覆盖minion端的所有同名值。比较拗口,总之记得,通过master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains不大懂,就不讨论了,这个比/etc/salt/grains还低)。

4、grains的下发

grains的下发大致可以分为两个思路:

(1)自定义的(_grains)可以通过state.highstate、saltutil.sync_grains、saltutil.sync_all 等方法批量下发,切记所有在_grains目录下的所有自定义grains值都会下发到minion,这是血的教训。

(2)固定存放在minion端配置文件中,如grains、minion文件中,可以通过file manager的方法去批量下发/etc/salt/grains等配置文件实现grains的批量下发,当然了也通过别的方式把这个文件批量下发下去,都是ok的。

对比:

(1)通过state.highstate 下发的grains好处是无须重启minion即可生效,但通过下发/etc/salt/grains文件下发的grains值则必须重启minion端服务才可以生效。

(2)自定义的_grains每次在highstate调用的时候就会自动下发、刷新,而/etc/salt/grains文件的则不会。

3. 授权

Master
"""
salt-key -L                    # 查看已授权和未授权的slave
salt-key -a  salve_id      # 接受指定id的salve
salt-key -r  salve_id      # 拒绝指定id的salve
salt-key -d  salve_id      # 删除指定id的salve
"""

通过并行方式让远端节点执行命令

5.minion修改配置文件连接到master
[root@node2 ~]# vim /etc/salt/minion
修改16行:ip地址为master的节点ip
16 master: 121.42.195.15
修改74行minion主机名,方便master管理
74 id: node2.minion
重启
/etc/init.d/salt-minion restart

master端查看要链接的minion

[root@node1 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
centos66 #没修改之前的minion主机名
node2.minion #修改之后的minion主机名
Rejected Keys:

开始链接

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

查看已经认证的minion列表:

[root@node1 ~]# salt-key
Accepted Keys: #已经认证的minion主机名
node2.minion
Denied Keys:
Unaccepted Keys: #等待认证的主机名
centos66
Rejected Keys:

查看链接是否正常

[root@node1 ~]# salt '*' test.ping
node2.minion:
True
*号代表所有主机
或:
[root@node1 ~]# salt 'node2.minion' test.ping
node2.minion:
True

防火墙:

iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT

Pillar

在大多数场景中,Pillar的表现行为和Grain一致,但有个很大的区别是:Pillar在Master上进行定义,存在于一个集中化的路径。Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据(在Salt的设计中,Pillar使用独立的加密session,也是为了保证敏感数据的安全性)。

Pillar可以用在那些地方:

1、敏感数据

例如ssh key,加密证书等,由于Pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到。

2、变量

可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用。

3、其他任何数据

可以在Pillar中添加任何需要用到的数据。比如定义用户和UID的对应关系,mnion的角色等。

4、用在Targetting中

Pillar可以用来选择minion,使用-I选项。

定义Pillar:

master配置文件中定义:

默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:

pillar_opts: False

使用SLS文件定义Pillar

Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:

pillar_roots:

    base:

        - /srv/pillar

下面这段代码定义了base环境下的Pillar文件保存在/srv/pillar/目录下。与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下:

# cat /srv/pillar/top.sls:

base:

    '*':

        - packages

# cat /srv/pillar/packages.sls:

{% if grains['os'] == 'RedHat' %}

apache: httpd

git: git

{% elif grains['os'] == 'Debian' %}

apache: apache2

git: git-core

{% endif %}

base环境中所有的minion都具有packages中定义的数据。Pillar采用与file server相同的文件映射方式,在本例中,packages映射到文件/srv/pillar/packages.sls。注意key与value要用冒号加空格分隔,没有空格的话将解析失败。

如何知道minion拥有那些Pillar数据?

在Master上修改pillar文件后,需要用以下命令刷新minion上的数据:

澳门新萄京官方网站 22

使用Pillar获取自定义数据:

澳门新萄京官方网站 23

4. 执行命令

在master服务器上对salve进行远程操作

基于shell命令

salt 'c2.salt.com' cmd.run  'ifconfig'

基于Salt的API

import salt.client

local = salt.client.LocalClient()
result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

 

参考资料:

1. 

2. 

采用安全的加密/解析协议

6.配置管理

1.配置安装模板
修改master配置文件

#引入配置文件
12 default_include: master.d/*.conf
15 interface: 0.0.0.0
saltstack状态文件
406 file_roots:
407   base:   #开头两个空格   #基础环境
408     - /etc/salt/states  #开头四个空格 #基础环境目录
409   prod:   #生产环境
410     - /etc/salt/states/prod  #生产环境目录
329 state_top: top.sls #配置文件名 在base下的目录下 默认
保存退出
创建模板所在目录
[root@node1 ~]# mkdir /etc/salt/states/prod -p
重启master
[root@node1 ~]# /etc/init.d/salt-master restart
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]

日志文件:

[root@node1 ~]# tail /var/log/salt/master 

创建配置文件

[root@node1 ~]# cd /etc/salt/states/
[root@node1 states]# vim top.sls

内容如下

base:             #基本配置
 'node2.minion':  #对这个主机进行操作
   - init.pkg      #使用init目录下的pkg配置文件
保存退出

创建pkg配置文件

[root@node1 states]# mkdir init
[root@node1 states]# cd init/
[root@node1 init]# vim pkg.sls

写入如下内容(空格必须要正确 否则会失败)

pkg.init:  #配置文件名
  pkg.installed: #进行安装操作(2空格)
    - names:                #(4空格)
      - lrzsz     #软件包名  
      - htop      #软件包名
      - nmap      #软件包名
保存退出

总结:
定义base基础环境和prod生成环境目录
开启top.sls
salt工具会根据你定义的基础环境目录下的top.sls进行操作

使用此模板进行操作:

[root@node1 init]# salt '*' state.sls init.pkg
#state是模块 sls是state模块的方法 init.pkg是自定义的模板

运行结果:

node2.minion:
----------
          ID: pkg.init
Function: pkg.installed
    Name: nmap
  Result: True
 Comment: The following packages were installed/updated: nmap
 Started: 22:01:31.299862
Duration: 22179.522 ms
 Changes:   
          ----------
          nmap:
              ----------
              new:
                  5.51-4.el6
              old:
----------
      ID: pkg.init
Function: pkg.installed
    Name: lrzsz
  Result: True
 Comment: Package lrzsz is already installed.
 Started: 22:01:53.485854
Duration: 0.489 ms
 Changes:   
Summary
------------
Succeeded: 2 (changed=1)
Failed:    0
------------
Total states run:     2

方法案例2:管理文件
使用salt管理 /etc/security/limits.conf

[root@node1 salt]# cd /etc/salt/states/init/
[root@node1 init]# vim limit.sls

内容如下:

limit.conf.config:
  file.managed:
   - name: /etc/security/limits.conf
   - source: salt://init/files/limits.conf
   - user: root
   - group: root
   - mode: 644
保存退出

配置所需目录和文件

[root@node1 init]# mkdir files
[root@node1 init]# cp /etc/security/limits.conf .files/

在top.sls里增加

base:
 'node2.minion':
   - init.pkg
   - init.limit

执行命令

[root@node1 init]# salt '*' state.highstate

结果:

node2.minion:
----------
      ID: pkg.init
Function: pkg.installed
    Name: nmap
  Result: True
 Comment: Package nmap is already installed.
 Started: 22:51:09.699088
Duration: 568.249 ms
 Changes:   
----------
      ID: pkg.init
Function: pkg.installed
    Name: lrzsz
  Result: True
 Comment: Package lrzsz is already installed.
 Started: 22:51:10.267485
Duration: 0.409 ms
 Changes:   
----------
      ID: limit..conf.config
Function: file.managed
    Name: /etc/security/limits.conf
  Result: True
 Comment: File /etc/security/limits.conf updated
 Started: 22:51:10.269850
Duration: 138.081 ms
 Changes:   
          ----------
          diff:
              ---  
                   
              @@ -6,7  6,7 @@
               #
               #Where:
               #<domain> can be:
              -#        - a user name
               #        - an user name
               #        - a group name, with @group syntax
               #        - the wildcard *, for default entry
               #        - the wildcard %, can be also used with %group syntax,
              @@ -21,7  21,7 @@
               #        - data - max data size (KB)
               #        - fsize - maximum filesize (KB)
               #        - memlock - max locked-in-memory address space (KB)
              -#        - nofile - max number of open file descriptors
               #        - nofile - max number of open files
               #        - rss - max resident set size (KB)
               #        - stack - max stack size (KB)
               #        - cpu - max CPU time (MIN)
              @@ -48,11  48,5 @@
               #@student        -       maxlogins       4

               # End of file
              -@users soft nofile 100001
              -@users hard nofile 100002
              -@root  soft nofile 100001
              -@root  hard nofile 100002
              -* soft nproc 65535
              -* hard nproc 65535
               * soft nofile 65535
               * hard nofile 65535

Summary
 -----------
Succeeded: 3 (changed=1)
Failed:    0
------------
Total states run:     3

7.master和minion认证过程
(1)、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。
(2)、master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
8.Master与Minion的连接
(1)、SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。

9.基本使用

查看当前的salt key信息

salt-key

当/etc/salt/master没有配置auto_accept:True时,
需要通过salt-key命令来进行证书认证操作,具体操作如下:

  1. salt-key–L,显示已经或未认证的被控端id,
  2. salt-key–D,删除所有认证主机id证书
  3. salt-key-d id,删除单个id证书;
  4. salt-key–A,接受所有id证书请求;
  5. salt-key-a id,接受单个id证书请求。

测试被控主机的连通性

salt '*' test.ping

远程命令执行测试
cmd.run 这个命令可以执行所有linux下的命令
例:

[root@node1 ~]# salt '*' cmd.run 'df -h'
node2.minion:
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       7.9G  3.5G  4.1G  46% /

注:这个不建议使用。因为功能过大。可以通过删除这个模块或者acl策略

**显示被控主机的操作系统类型

salt '*' grains.item os

远程代码执行测试

salt '*' cmd.exec_code python 'import sys; print sys.version'
结果:
node2.minion:
    2.6.6 (r266:84292, Jul 23 2015, 15:22:56) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]

10.常用模块介绍
下一章

State

简述:SLS(代表SaLt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,由格式简单的数据构成。这经常被称作配置管理

top.sls是配置管理的入口文件,一切都是从这里开始,在master 主机上,默认存放在/srv/salt/目录.

top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain模块,或分组名,来进行匹配,再下一级是要执行的state文件,不包换扩展名。

创建/srv/salt/top.sls

澳门新萄京官方网站 24

state实战

澳门新萄京官方网站 25

澳门新萄京官方网站 26

澳门新萄京官方网站 27

最小化使用网络和负载

提供简单的程序接口

Salt引入了更细粒度的控制,允许不通过目标名字,二是通过系统属性分类

  • 构建在成熟技术之上

Salt采用了很多技术和技巧。网络层采用优秀的ZeroMQ库,所以守护进程里面包含AMQ代理。Salt采用公钥和主控通讯,同时使用更快的AES加密通信,验证和加密都已经集成在Salt里面。Salt使用msgpack通讯,所以更快速和更轻量网络交换。

  • Python 客户端接口

为了实现简单的扩展,Salt执行例程可以写成简单的Python模块。客户端程序收集的数据可以发送回主控端,可以是其他任意程序。可以通过Python API调用Salt程序,或者命令行,因此,Salt可以用来执行一次性命令,或者大型应用程序中的一部分模块。

  • 快速,灵活,可扩展

结果是一个系统可以高速在一台或者一组服务器执行命令。Salt速度很快,配置简单,扩展性好,提供了一个远程执行架构,可以管理多样化需求的任何数量的服务器。整合了世界上最好的远程执行方法,增强处理能力,扩展使用范围,使得可以适用任何多样化复杂的网络。

  • 开源

Salt基于Apache 2.0 licence开发,可以用于开源或者自有项目。请反馈你的扩展给项目组,以便更多人受益,共同促进Salt发展。请在你的系统部署 系统,让运维更便捷。

1.3 架构

saltstack是基于C/S服务模式,在该架构中,服务器端叫做Master,客户端叫做Minion。传统的C/S模式我们这样理解,客户端发送请求给服务器端,服务器端接受到来自客户端的请求并处理完成后再返回客户端。 在saltstack架构中,不仅有传统的C/S服务模式,而且有消息队列中的发布与订阅(pub/sub)服务模式。目前我们一般用其C/S架构做批量管理。

澳门新萄京官方网站 28

 

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:会自动保持客户端配置

1.4 连接方式

Master与Minion认证
(1)、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。

(2)、master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态

二、安装部署

主机名 IP地址 系统
saltstack-server 172.20.4.50 CentOS release 6.9 (Final)
saltstack-1 172.20.4.51 CentOS release 6.9 (Final)
saltstack-2 172.20.4.52 CentOS release 6.9 (Final)

2.1 初始化环境:

yum ``install ntpdate -y && ntpdate time1.aliyun.com                    ``#同步时间

service iptables stop                                                 ``#关闭iptables

sed澳门新萄京官方网站:saltstack基础笔记,saltstack自动化运行。 -i ``"s/SELINUX=enforcing/SELINUX=disabled/"  /etc/selinux/config   #关闭selinux

setenforce 0

 

 

cat > saltstack.repo <<EOF

[saltstack-repo]

name=SaltStack repo ``for RHEL``/CentOS $releasever

baseurl=https:``//repo``.saltstack.com``/yum/RedHat/``$releasever/$basearch``/latest

enabled=1

gpgcheck=1

gpgkey=https:``//repo``.saltstack.com``/yum/redhat/``$releasever/$basearch``/latest/SALTSTACK-GPG-KEY``.pub

EOF

rpm --``import https:``//repo``.saltstack.com``/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY``.pub

yum cleanall && yum makecache                ``#更新yum源

2.2 master  端安装

yum -y ``install salt-master

mkdir /etc/salt/states

 

编辑``/etc/salt/states

interface: 0.0.0.0

state_top: ``top``.sls

file_roots:

``base:

``- ``/etc/salt/states

澳门新萄京官方网站 29

启动服务,并设置开机自启

/etc/init``.d``/salt-master start

chkconfig salt-master on

2.3 monitor端安装

配置yum源和master方法一致

yum -y ``install salt-minion

修改/etc/salt/minion文件(slatstack-1/2 都更改成对应的id,master指向master的ip地址)

澳门新萄京官方网站 30

启动客户端,并设置开机自启动

澳门新萄京官方网站 31

2.4 证书管理

#执行salt-key -L  查看秘钥验证

#执行Salt-key -a 加ID添加认证秘钥

澳门新萄京官方网站 32

三、验证测试

澳门新萄京官方网站 33

四、常见模块

(1)、cp模块(实现远程文件、目录的复制,以及下载URL文件等操作)
将主服务器file_roots指定位置下的目录复制到被控主机

salt ``"*" cp``.get_dir salt:``//testdir /tmp/test

 将主服务器file_roots指定位置下的文件复制到被控主机

salt ``"*" cp``.get_file salt:``//testdir/testfile /tmp/testfile

下载指定URL内容到被控主机指定位置

salt ``"*" cp``.get_url http:``//mirrors``.163.com/.help``/CentOS6-Base-163``.repo ``/etc/yum``.repos.d``/CentOS6-Base-163``.repo

(2)、cmd模块(实现远程的命令行调用执行)

salt ``"*" cmd.run ``'netstat -lntup'

(3)、cron模块(实现被控主机的crontab操作)
为指定的被控主机、root用户添加crontab信息

salt ``"*" cron``.set_job root ``'*/5' '*' '*' '*' '*' '/usr/sbin/ntpdate time1.aliyun.com'

删除指定的被控主机、root用户的crontab信息

salt ``"*" cron``.rm_job root ``'/usr/sbin/ntpdate time1.aliyun.com'

查看定时任务

salt ``'*' cron``.raw_cron root

(4)、dnsutil模块(实现被控主机通用DNS操作)
为被控主机添加指定的hosts主机配置项

salt ``'*' dnsutil.hosts_append ``/etc/hosts 127.0.0.1 ``test``.saltstack.com

(5)、file模块(被控主机文件常见操作,包括文件读写、权限、查找、校验等)

salt ``'*' file``.get_sum ``/etc/resolv``.conf md5

salt ``'*' file``.stats ``/etc/resolv``.conf

(6)、network模块(返回被控主机网络信息)

salt ``'*' network.ip_addrs

salt ``'*' network.interfaces

(7)、pkg包管理模块(被控主机程序包管理,如yum、apt-get等)

salt ``'*' pkg.``install sysstat

salt ``'*' pkg.file_list sysstat

(8)、service 服务模块(被控主机程序包服务管理)

salt ``'*' service.``enable crond

salt ``'*' service.disable crond

salt ``'*' service.status crond

salt ``'*' service.stop crond

salt ``'*' service.start crond

salt ``'*' service.restart crond

salt ``'*' service.reload crond

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149675.htm

澳门新萄京官方网站 34

本文由澳门新萄京官方网站发布于服务器运维,转载请注明出处:澳门新萄京官方网站:saltstack基础笔记,saltsta

关键词: