绿盟威胁分析中心POMA(https://poma.nsfocus.com) 在2017年致力于改进样本分析能力,首先需要解决的就是量的问题。随着待分析样本量不断增多,分析服务器的数量也在不断增加,如何快速有效地管理多台服务器就成为了必须解决的问题。在实践过程中,saltstack所提供的功能确实令我惊喜不已,可靠性、灵活性、稳定性让我在实际工作省掉了不少的心力。特分享与诸位!
简介
Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。saltstack的几大功能:远程执行、配置管理、文件传输。
Salt是基于python写的经典C/S框架的自动化部署平台。由Master和Minion构成,通过ZeroMQ进行通信。同一服务器既可以充当Master,又可以充当Minion。一个服务器集群下,可有多个Master,多个Minion,可根据实际需要,灵活安装配置。
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发送指令了。
Master与Minion的连接
Saltstack master启动后默认监听4505和4506两个端口。4505(publish_port)为salt的消息发布系统,4506(ret_port) 为salt客户端与服务端通信的端口。如果使用lsof查看4505端口,会发现所有的Minion在4505端口持续保持在ESTABLISHED。
ubuntu14.04上推荐安装配置方法
官网参考: http://repo.saltstack.com/#ubuntu
步骤:
1、wget -O – https://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest/SALTSTACK-GPG-KEY.pub | apt-key add –
2、在/etc/apt/sources.list.d/saltstack.list文件中手动加一行:
deb http://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest trusty main
注:不使用上述源一般也能正常使用,但特定情况下salt.minion启动可能会有异常,报错:[salt.log.setup ][ERROR ] An un-handled exception was caught by salt’s global exception handler: UnpackValueError: Unpack failed: error = 0
3、apt-get update
4、安装包
sudo apt-get -y -q install salt-minion # 安装客户端
sudo apt-get -y -q install salt-master # 安装服务器端
补充卸载方法:
apt-get autoremove salt-minion
apt-get autoremove salt-master
其它组件,根据需要安装即可
sudo apt-get install salt-ssh
sudo apt-get install salt-syndic
sudo apt-get install salt-cloud
sudo apt-get install salt-api
5、salt minion配置
[step1] 编辑 /etc/salt/minion_id 修改客户端ID (此步非必须)
[step2] 编辑 /etc/salt/minion 修改以下参数配置
master: 10.4.5.6 # 指定服务器master IP
id: ubuntu-6 # 指定客户端ID,配了这个字段,则以该字段标记为准,即/etc/salt/minion_id 设置不生效
[step3] 重启服务 service salt-minion restart
6、salt master 配置
[step1] 编辑 /etc/salt/master 修改以下参数配置
interface: 0.0.0.0
auto_accept: True
设置监听IP及打开自动通过验证
[step2] 重启服务 service salt-master restart
常用命令
远程命令执行
cmd.run方式:(salt ‘$targeting’ cmd.run ‘$cmd’) 用来远程执行shell命令
salt ‘*’ cmd.run “df -lh”
salt ‘*’ cmd.run “crontab -l | grep ^[^#]”
salt ‘cloud1-*’ cmd.run “netstat -pan|grep hekad” # 客户端ID支持模糊匹配
cmd.script方式:可以向远程主机执行脚本
salt ‘*’ cmd.script salt://useradd.sh # 向minion主机上执行useradd.sh脚本(salt://是salt的默认发布目录,即/srv/salt)
文件传输
拷贝文件时,需要设置/etc/salt/master,修改以下参数:
file_roots:
base:
– /srv/salt
指定master端文件存放的位置(默认存放在/srv/salt目录下),设置完成后重启master服务。
将salt master服务器上的文件发送给所有salt minion指定的位置:
salt ‘*’ cp.get_file salt://SmpArchThread.py /opt/log/SmpArchThread.py
定时任务(cron)
查看某用户的定时任务,如 root用户:
salt ‘*’ cron.list_tab root
同上,查看的是文本形式
salt ‘*’ cron.raw_cron root
移除某用户的定时任务:
salt ‘*’ cron.rm_job root /usr/local/weekly
设置某用户的定时任务:
salt ‘*’ cron.set_job root ‘*’ ‘*’ ‘*’ ‘*’ 1 /usr/local/weekly
例如:
salt “*” cron.set_job root 0 1 ‘*’ ‘*’ ‘*’ ‘/usr/sbin/ntpdate cn.pool.ntp.org’
注意: * 要加引号,最后一个参数也要加引号,不然会当成两个参数
调试必用
客户端log日志: /var/log/salt/minion
master log日志: /var/log/salt/master
调试命令: salt-minion -l debug 查看salt客户端详细信息,需要先 service salt-minion stop
测试命令:salt ‘*’ test.ping
查看通过验证的机器:
salt-key -L
在master端把新的key加入进去
salt-key -ya Admin2-saltstack.com
在master端把以前旧的key删除
salt-key -yd Admin-saltstack02.com //这里假设以前的key是Admin2-saltstack02.com
salt相关管理命令:
salt-run manage.up 查看存活的minion
salt-run manage.down 查看死掉的minion
salt-run manage.down removekeys=True 查看down掉的minion,并将其删除
salt-run manage.status 查看minion的相关状态
salt-run manage.versions 查看slat的所有master和minion的版本信息
版本信息:
salt –versions-report (仅master上可执行)
结束语
至此,一个salt master多个salt minion的场景已基本可以覆盖了。后面,我将介绍更高级一点的功能,敬请期待。