运维自动化之Saltstack使用详解

简介:

概要

saltstack是基于Python开发的C/S架构的一款批量管理工具,底层采用动态的连接总线(ZeroMQ消息队列pub/sub方式通信),使用ssl证书签发的方式进行认证管理,使其可以用于编配, 远程执行, 配置管理等等。部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。号称世界上最快的消息队列ZeroMQ使得saltstack非常快速的管理大量服务器,采用RSA Key方式确认身份,传输采用AES加密,安全性也非常有保障。

Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。

SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。有如下特性:

(1)、部署简单、方便;

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

(3)、主从集中化管理;

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

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

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

Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。


核心功能

1、使命令发送到远程系统是并行的而不是串行的

2、使用安全加密的协议

3、使用最小最快的网络载荷

4、提供简单的编程接口


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

wKioL1kW1DOTYVCYAACIMRt9M6k315.png-wh_50

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


Saltstack安装

安装方式有四种,下面通过一个案例简单介绍在CentOS6.8上进行SaltStack部署。

(1) yum方式安装(采用saltstack源)推荐这种方式,简单粗暴。注意没有配置saltstack源的,请先配置saltstack源。

Version 7:

rpm --importhttps://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub

Version 6:

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

Save the following file to /etc/yum.repos.d/saltstack.repo:

Version 7 and 6:

[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

安装好saltstack源后,用yum 命令来检查是否添加到源列表。

yum repolist 
Master端安装:

yum -y install salt-master

Minon端安装:

yum -y install salt-minion


配置并启动Saltstack

  Salt 的配置非常简单。默认的 master 配置就可以在大多数情况下运行。仅仅需要更改的是 minion ,在 minion 配置文件中设置 master 的地址。

The configuration fileswill be installed to /etc/salt and are named after the respective components,/etc/salt/master, and /etc/salt/minion.

MASTER配置

默认Salt master监听所有网卡接口(0.0.0.0)的4505和4506端口. 如果需要指定监听IP, 通过 /etc/salt/master配置文件中的"interface"指令进行如下修改:

- #interface: 0.0.0.0
+ interface: 10.0.0.1 #此处是server端监听的地址。
auto_accept: True #此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。

MINION配置

尽管Salt Minion有许多配置选项,但配置Minion还是非常简单的. 默认的配置Minion会尝试连接DNS名为"salt"的master,如果minion解析到的地址正确,就无需再做配置.

如果DNS名为"salt"并不能解析到本地正确的Master地址,需要通过如下方法修改 /etc/salt/minion 配置文件中的"master"指令:

- #master: salt
+ master: 10.0.0.1 #这里改成你的master服务器地址
id: web01 #建议这里修改成主机名,便于master端分辨
  #在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate
schedule:
  highstate:
    function: state.highstate
    minutes: 5

更新完配置后,需要重启Salt minion以使配置生效

运行Saltstack

1. 前台启动master(如果要以daemon方式启动,请指定 -d参数<salt-master -d>):
salt-master
2. 前台启动minion(如果要以daemon方式启动,请指定 -d参数<salt-minion -d>):
salt-minion

运行有问题?

排除 Salt 故障最简单的方法是在前台运行 master  minion,同时把 log level 设为``debug``

salt-master --log-level=debug

以普通(root)用户运行:

想要使用其他用户身份运行Salt,参见:conf_master:`user`参数在master配置文件中。

Additionally, ownership, and permissions need to be set suchthat the desired user can read from and write to the following directories (andtheir subdirectories, where applicable):

  • /etc/salt

  • /var/cache/salt

  • /var/log/salt

  • /var/run/salt

更多关于如何使用非特权用户运行salt的信息可以在 这里 找到。

salt-key证书管理:

master端证书存放路径:/etc/salt/pki/master/minions

   注意:如果细心的话,你会发现小写字母针对的单一对象,大写都是针对全体。比如 -l显示单一key,-L显示所有key;-a 接受指定key,而-A 就是接受所有key。

saltstack认证原理

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

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


salt-key  -L            #查询所有接收到的证书

salt-key  -a <证书名>   #接收单个证书

salt-key  -A            #接受所有证书

salt-key  -d <证书名>   #删除单个证书

salt-key  -D            #删除所有证书

Salt在Master和Minion之间的通讯采用AES加密. 这就确保了发送给minions的命令不会被篡改, Master和Minion之间的通讯认证通过信任的已接受的key进行管理.

在发送给Minion之前,需要确保minion的key已经被Master所接受. 运行 ``salt-key``命令将列出Salt Master已知的所有keys.

[root@master ~]# salt-key -L
Unaccepted Keys:
alpha
bravo
charlie
delta
Accepted Keys:
[root@master ~]# salt-key –A -y
[root@master ~]# salt-key -L
Unaccepted Keys:
Accepted Keys:
alpha
bravo
charlie
delta

发送test.ping指令

[root@moban ~]# salt '*' test.ping
moban2:
    True
moban1:
    True

限于篇幅太长,请大家移步这里进行下载查看,谢谢!

下载地址:http://down.51cto.com/data/2306388


本文转自 linuxzkq 51CTO博客,原文链接:http://blog.51cto.com/linuxzkq/1925299


相关文章
|
10月前
|
存储 JSON 应用服务中间件
saltstack学习自动化
saltstack学习自动化
62 0
|
消息中间件 运维 Python
部署自动化运维工具SaltStack
salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System。
1065 0
|
Web App开发 关系型数据库 应用服务中间件
|
运维 Oracle 关系型数据库
|
运维 Linux 网络安全
|
消息中间件 运维 Linux
|
运维 Shell 应用服务中间件