自动化运维工具saltstack原理使用和优化实践

Posted 云架构师大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具saltstack原理使用和优化实践相关的知识,希望对你有一定的参考价值。

不做介绍了,直接进入正题:

Saltstack支持agentssh方式,建议使用agent效率较高,根据我实际使用经验一个salt master集群管理5000台虚机规模无压力。

 

一、salt通信过程

1、  minion第一次启动生产一对公钥私钥并将公钥发送到master4506端口

2、  master接收minion公钥后(存放在/etc/salt/pki/master/minions)master就可以通过4505端口(zeroMQ消息发布长连接)控制minion了。 Tips建议定期自动自动清理无效minion公钥,否则会影响性能,清理方法巡检检测公钥文件连接状态,无连接则salt-ket –dy删除。

3、  命令或者api发起任务

4、  master收到任务,请求进程在本地或者外部存储建立一个临时文件夹临时存放任务,然后通过转发进程将任务转发给实际的工作进程(多个)

5、  master工作进程通过4505minion下发任务,minion将任务脚本和执行结果存放在本地缓存,然后minion通过4506zmq请求响应模式)将执行结果返回给master

6、  master将任务执行结果缓存在本地或者数据库等存储上

 

说明:

1、建议将master return结果默认是保存在master本地文件系统,建议保存到数据库等存储中,我们实际是minion将任务结果返回给了到配置了数据持久化的redis缓存中。

2、建议saltmaster采用高可用集群部署,我们实际部署中每个minion都会连接2mastermaster的关键文件通过NAS实现共享,如/srv/salt

3、建议采用syndic级联配置,方便多saltmaster管理,但是有性能问题,根据实际经验优化参数如下:

syndic_wait: 5

timeout: 5

gather_job_timeout: 10

 

二、salt常用命令

命令模块查看方法,命令太多根本记不住,建议多多使用这个:

salt 'node1' sys.list_modules  //所有可用模块

salt ‘node1’ sys.list_functions cmd //查看cmd模块方法

salt ‘node’ sys.doc cmd.script //查看方法的详细说明和示例

 

常用命令

salt --versions-report    # 查看版本

salt-run jobs.list_jobs   #全部任务情况统计,查看 /var/cache/salt/master/jobs 里的记录默认24小时

salt-run jobs.active   #当前未结束任务查询,未执行完成的任务保存在客户端/var/cache/salt/minion/proc 中,执行完后才会返回master

salt '*' saltutil.running  #当前未结束任务统计和上面一条基本一致

salt minion_id saltutil.running  #当前某一个minion上未结束的任务

salt-run jobs.lookup_jidjid    //如果没有结果则会返回空,异步任务查询

salt-run jobs.print_job jid    //无论是否返回都会有结果

salt '*' saltutil.kill_job  jid   //杀掉一直未执行完成的异步任务

salt minion_id saltutil.kill_job jid     #杀死某指定minion_id上的jid任务

salt-run manage.up       #测试test.ping

salt-run manage.down       #测试test.ping

salt-run manage.not_present  #查看就绪minion tcp 4505的连接数,很快!

salt-run manage.present  #查看未就绪minion

salt-run manage.status    #查看所有minion状态

salt-run manage.versions  #查看minion版本

salt -C "G@ipv4:* andG@kernel:Linux" --async cp.get_file salt://agent.gz /root/agent.gzgzip=9 makedirs=True


salt -C "G@ipv4:* and G@osrelease:2008ServerR2"cp.get_url http://1.1.1.1/1.sh/tmp/1.sh

salt -C "G@ipv4:* andG@kernel:windows" grains.item osrelease pythonversion virtual ipv4


salt -C "G@ipv4:* and G@osrelease:2008ServerR2"cmd.script 


salt://sysmon.ps1 ‘arg1 arg2’ shell=powershell runas=appuser


salt –S 192.168.1.0/24 cmd.script salt://1.sh


salt -C "G@ipv4:* andG@kernel:Linux" cmd.run 'echo "0 6 * * * 

sh /root/oscheck/oscheck.sh>/dev/null 2>&1" >> /var/spool/cron/root'  //或者使用cron.set_job 也可以

salt-cp testnode file1 /tmp/

salt node state.sls pip3_install #不建议使用sls,无法跨工具使用

可以通过自定义grains,用于区分不同应用属性 #不建议使用不太灵活,最好的方式还是通过CMDB记录不同应用或中间件等对应IP然后操作,同时也不建议使用pillar,原因一样

当同时执行几千台命令下发导致网络或者性能问题时,建议使用异步 –async –b 串行执行

 

三、salt配置

salt-minion配置

/etc/salt/minion

recon_default: 1800

    重新连接尝试之间等待的平均秒数。半小时

recon_max:

    重新连接尝试之间等待的最大秒数。

recon_randomize:

    是否进行随机的认证

acceptance_wait_time:

    等待每个身份验证请求回复的秒数。

random_reauth_delay:

    随机化的身份验证

auth_timeout:

    认证的超时时间,不管尝试的次数

#minion 缓存任务   /var/cache/salt/minion_jobs

cache_jobs: true

#日志级别 /var/log/salt

log_level_logfile: debug

 

salt-master主要配置:

max_open_files:默认值100000,不能超过OS ulimit值,每个minion连接master至少需要1openfile(实际是多个)

timeout saltsalt api命令超时时间

auto_accept:是否自动accept minion 默认no

job_cache:开启cache?

keep_jobs: 任务cache保存时间,默认24小时

work_threadssaltmaster线程数目,默认5,并发大可适当增加,建议不要超过cpu*2

 

 

4salt源码

源码分析:

/usr/lib/python2.7/site-packages/salt/returners/local_cache.py           #结果返回,写cache

vim/usr/lib/python2.7/site-packages/salt/utils/job.py  #新建job

vim/usr/lib/python2.7/site-packages/salt/cache/localfs.py  #写文件位置

 

 

5salt-api

获取token,默认是10分钟有效

curl -k http://1.1.1.1:8000/login -H"Accept: application/json" -d username='saltapi' -d password='saltapi'-d eauth='pam'

 

同步调用

http://1.1.1.1:8000

method: post

 

header:

X-Auth-Token = 上面获取

Accept= application/json

body

{

"client":"local",     //"client":"local_async",  异步

"tgt":"node1 ",

"fun":"cmd.run",

"arg":"/tmp/1.sh"

}

详见:http://docs.saltstack.cn/ref/clients/index.html

 


以上是关于自动化运维工具saltstack原理使用和优化实践的主要内容,如果未能解决你的问题,请参考以下文章

dW 编辑推荐:自动化运维工具 SaltStack 在云计算环境中的实践

自动化运维利器 SaltStack 工作原理及安装配置实例详解

自动化运维工具---SaltStack安装部署及简单案例

自动化运维之saltstack

部署自动化运维工具SaltStack

用开源自动化运维工具 SaltStack 在云平台中实现各主机统一配置管理