Saltstack极速入门

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Saltstack极速入门

saltstack介绍

Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯,主要功能有远程执行,配置管理。

Saltstack官方文档

Saltstack原理

Salt使用server-agent通信模型,服务端组件被称为Salt masteragent被称为Salt minion

Salt master主要负责向Salt minions发送命令,然后聚合并显示这些命令的结果。一个Salt master可以管理多个minion系统

Salt serverSalt minion通信的连接由Salt minion发起,这也意味着Salt minion上不需要打开任何传入端口(从而减少攻击)。Salt server使用端口45054506,必须打开端口才能接收到访问连接

  • Publisher (端口4505)所有Salt minions都需要建立一个持续连接到他们收听消息的发布者端口。命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。
  • Request Server (端口4506)Salt minios根据需要连接到请求服务器,将结果发送给Salt master,并安全地获取请求的文件或特定minion相关的数据值(称为Salt pillar)。连接到这个端口的连接在Salt masterSalt minion之间是1:1(不是异步)。

 

[root@VM_0_11_centos minions]# lsof -i:4505
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
salt-mast 7580 root   12u  IPv4 93674988      0t0  TCP *:4505 (LISTEN)
salt-mast 7580 root   14u  IPv4 93692192      0t0  TCP 172.27.0.11:4505->106.53.236.195:48158 (ESTABLISHED)

安装Master,并启动服务

yum -y install salt-master
service salt-master start

安装 Salt-Minion 指向 Salt-Master 网络地址

yum -y install salt-minion
vim /etc/salt/minion
找到以下配置,可以使用主机名,也可以使用IP地址
#master: salt
修改成 
master: 192.168.1.100
如果遇到
[ERROR   ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'str'>.
[ERROR   ] DNS lookup of 'salt' failed.
修改minion文件的master是漏了空格
#master: salt
应该修改为
master:空格ip
启动
service salt-minion start

SaltStack认证方式

Salt 的数据传输是通过 AES 加密,MasterMinion 之前在通信之前,需要进行认证。

Salt 通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了。

1. minion 在第一次启动时候,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key)minion.pub(public key), 然后将 minion.pub 发送给 master

2. master 在第一次启动时,会在 /etc/salt/pki/master/ 下自动生成 master.pemmaster.pub ;并且会接收到 minionpublic key , 通过 salt-key 命令接收 minion public key, 会在 master/etc/salt/pki/master/minions目录下存放以 minion id 命令的 public key ;验证成功后同时 minion 会保存一份 master public key 在 minion 的 /etc/salt/pki/minion/minion_master.pub里。

Salt认证原理总结

minion将自己的公钥发送给master
master认证后再将自己的公钥也发送给minion端

Master端认证示例

1)根据上面提到的认证原理,先看下未认证前的masterminionpki目录

# master上查看
[root@salt-master ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   │   └── salt-minion01
│   └── minions_rejected
└── minion
# minion上查看
[root@salt-minion01 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
    ├── minion.pem
    └── minion.pub

salt-key命令解释:

[root@salt-master ~]# salt-key -L 
Accepted Keys:        #已经接受的key
Denied Keys:          #拒绝的key
Unaccepted Keys:      #未加入的key
Rejected Keys:        #吊销的key
#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)
#配置master自动接受请求认证(master上配置 /etc/salt/master)
auto_accept: True

salt-key认证

#列出当前所有的key
[root@VM_0_11_centos minions]# salt-key -L 
Accepted Keys:
Denied Keys:
Unaccepted Keys:
VM_0_13_centos
Rejected Keys:
#添加指定minion的key
[root@VM_0_11_centos minions]# salt-key -a VM_0_13_centos -y
The following keys are going to be accepted:
Unaccepted Keys:
VM_0_13_centos
Key for minion VM_0_13_centos accepted.
#添加所有minion的key
[root@salt-master ~]# salt-key -A -y
[root@VM_0_11_centos minions]# salt-key -L 
Accepted Keys:
VM_0_13_centos
Denied Keys:
Unaccepted Keys:
Rejected Keys:
# master上
[root@VM_0_11_centos minions]# tree /etc/salt/pki/
/etc/salt/pki/
└── master
    ├── master.pem
    ├── master.pub
    ├── minions
    │   └── VM_0_13_centos
    ├── minions_autosign
    ├── minions_denied
    ├── minions_pre
    └── minions_rejected
# minion上
[root@VM_0_13_centos minion]# tree /etc/salt/pki/
/etc/salt/pki/
└── minion
    ├── minion_master.pub
    ├── minion.pem
    └── minion.pub

Saltstack远程执行

远程执行是 Saltstack 的核心功能之一。主要使用 salt 模块批量给选定的 minion 端执行相应的命令,并获得返回结果。

Salt命令的语法结构

salt '<target>' <function> [arguments]

目标主机Target匹配方式

1、通配符匹配
[root@salt-master ~]# salt '*' test.ping
[root@salt-master ~]# salt 'salt-minion01' test.ping
[root@salt-master ~]# salt '*01' test.ping
[root@salt-master ~]# salt 'salt-minion0[1|2]' test.ping
[root@salt-master ~]# salt 'salt-minion0[!1|2]' test.ping
[root@salt-master ~]# salt 'salt-minion0?' test.ping
2、列表匹配
[root@salt-master ~]# salt -L 'salt-minion01,salt-minion02' test.ping
3、正则匹配
[root@salt-master ~]# salt -E '^salt' test.ping
[root@salt-master ~]# salt -E '^salt.*2$' test.ping
4、IP匹配
[root@salt-master ~]# salt -S '192.168.1.32' test.ping
[root@salt-master ~]# salt -S '192.168.1.0/24' test.ping
5、复合匹配
[root@salt-master ~]# salt -C 'G@os:CentOS and S@192.168.1.32' test.ping

模块Module

test    模块多用于测试
user    模块用于用户管理
cmd     模块可以执行任意shell命令
pkg     模块用于软件包管理
file    模块多用于配置
service 模块用于服务管理

所有模块列表

test模块

模块名:test
功能:用于测试
[root@salt-master ~]# salt '*' test.ping

cmd模块

模块名:cmd
功能:实现远程的命令行调用执行(默认具备root操作权限,使用时需评估风险)
#查看所有minion内存和磁盘使用情况
[root@salt-master ~]# salt '*' cmd.run "free -m"
[root@salt-master ~]# salt '*' cmd.run "df -h"
[root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime'

把文件复制到某台机器上

salt-cp  'VM_0_13_centos' /data/script/log /data/log/

如何记录操作日志

在master上为/etc/salt/master

在minion上为/etc/salt/minion

修改日志级别

log_level: //日志级别
支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)

日志的默认目录为/var/log/salt/

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
消息中间件 监控 网络协议
SaltStack安装Apache/Mysql/PHP部署Wordpress
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。 master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受
177 0