【干货分享】多服务器下的自动化部署,有了它你就爽歪歪了—Part1

绿盟威胁分析中心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的场景已基本可以覆盖了。后面,我将介绍更高级一点的功能,敬请期待。

 

 

Spread the word. Share this post!

Meet The Author

Leave Comment