saltstack基本原理和配置

1.saltstack的基本概念和工作原理

1.1 saltstack的基本基本概念

  saltstack是一种基于C/S架构的服务器基础架构集中化管理平台,管理端称为master,主要负责salt命令运行和资源状态调度的管理,客户端称为minion,主要负责从master端获取资源状态信息并同步资源管理信息。minion与master的通信是通过ZMQ消息队列进行通信的,minion会首先与master进行联系,把自己的pub key发过去,master端可以通过salt-key -L命令可以看到minion的key,master接受这个key之后就会与minion进行通信。

  saltstack在网络层使用了zeroMQ库,守护进程里面包含了AMQ的代理,采用公钥和主控进行通讯,同时也使用更快的AES加密通信,验证和加密都已经集成在salt里面了,使用msgpack通信,能更快速和更轻量的进行网络的交换。

1.2 saltstack的工作原理

  

 

   saltstack会通过cmd.run.ls命令从salt.client.LocalClient.cmd_cli发布到master上,并会获取一个jodid,根据jodid来获取命令的执行结果。

  saltstack中master会通过zeroMq消息队列与minion进行信息的传递,其中使用了zeroMq的发布订阅模式,连接的方式是TCP或者IPC。

  master在接收到命令之后会将将要执行的命令发送哥客户端minion,然后minion会从消息总线上接收到要处理的命令,交给minion._handle_aes来进行处理,minion._headle_aes会发起一个本地线程调用cmdmod来去执行ls命令,命令执行完毕之后会调用minion._return_pub方法,把执行的结果返回给master,master接收到客户端传来的结果之后会调用master.handle_aes方法将结果写入到文件当中,然后salt.client.LocalClient.cmd_cli通过轮询的方式获取job执行的结果并将结果输出到终端上。

 2. saltstack的特点

  1.实时交互:即所有的minion机器同时执行命令。

  2.轻量性:只需要类似输入基于什么参数执行什么命令给salt minion,salt minion会自己去处理执行。

  3.便于扩展:Salt 基于 ZeroMQ 或 TCP,在 master 和 minions 之间建立一条持久性的数据管道,为 Salt 带了客观的性能优势。支持API及自定义模块,可通过Python轻松扩展。

  4.规范化:Salt 命令能在 Linux、Windows、MacOS、FreeBSD、Solaris、AIX、物理机、云,乃至容器上运行。

  5.自动化:Salt 的事件驱动架构不仅可以实现自动初始化系统配置,还可以自动执行扩展、修复以及在线管理。同时,Salt 也可以实现对复杂分布式网络应用、数据库等方面的自动部署及维护。

  6.部署简单方便

  7.配置简单、功能强大

 3.saltstack配置文件详解

3.1 /etc/salt/master配置文件的内容

3.1 .1主要配置项:

#default_include: minion.d/*.conf     主要是设置include配置文件
#interface: 0.0.0.0                   监听地址
#ipv6: False                          设置监听ipv6地址
#publish_port: 4505                   ZeroMQ消息发布端口
#user: root                           运行的用户
#max_open_files: 100000               最大打开文件限制
#worker_threads: 5                    管理线程数
#ret_port: 4506                       消息接收端口
#pidfile: /var/run/salt-master.pid    pid文件
#root_dir: /                          工作根目录
#pki_dir: /etc/salt/pki/master        公钥存储的目录
#cachedir: /var/cache/salt/master     job和cache缓存目录
#extension_modules: /var/cache/salt/master/extmods       自定义模块
#module_dirs: []                      自定义模块同步目录
#verify_env: True                     启动的时候进行权限设置与验证
#keep_jobs: 24                        设置job信息过期的时间
#timeout: 5                           命令的超时时间
#loop_interval: 60                    进程检测周期
#output: nested                       saltstack命令output类型
#show_timeout: True                   开启minion timeout提示
#color: True                          开启output颜色显示
# strip_colors: False                 剥离颜色的显示
#sock_dir: /var/run/salt/master       进程sock的目录
# enable_gpu_grains: False            设置grains收集GPU的信息
#job_cache: True                      开启job cache的记录
#minion_data_cache: True              设置minion grains pillar的数据缓存
#event_return: mysql                  设置return存储
#event_return_queue: 0                设置return队列
#max_event_size: 1048576              设置最大的event值
#preserve_minion_cache: False         设置删除key时是否删除cache数据

3.1.2 安全配置项

#open_mode: False                            设置开启open_mode模式
#auto_accept: False                          设置自动签证
# autosign_timeout: 120                      定义自动签证timeout时间
#autosign_file: /etc/salt/autosign.conf      定义自动签证规则文件
#autoreject_file: /etc/salt/autoreject.conf  定义自动拒绝签证规则文件
#permissive_pki_access: False                设置pki文件访问权限
#client_acl_verify: True                     定义用户模块执行限制
#publisher_acl_blacklist:                    定义模块和用户黑名单
#sudo_acl: False                             关闭利用sudo后client_acl限制
#external_auth:                              指定外部的认证方式
#token_expire: 43200                         设置token过期的时间
#file_recv: False                            设置minion是否允许push文件到master
#file_recv_max_size: 100                     设置minion push文件到master的hard-limit

3.1.3 salt-ssh配置

#roster_file: /etc/salt/roster    设置roster文件路径
#runner_dirs: []                  设置其他runner路径
#cython_enable: False             开启cypthon

3.1.4 state系统配置

#state_top: top.sls        设置state入口文件
#master_tops: {}           设置外面tops文件
#state_verbose: True       设置state verbose模式
#renderer: jinja|yaml      设置state默认renderer
#state_output: full        设置state输出
#state_aggregate: False    设置state聚合

3.1.5 文件服务配置项

# file_roots:                salt主要配置文件目录
#hash_type: sha256           设置文件校验hash类型
#file_buffer_size: 1048576   设置最大文件buffer
#file_ignore_regex:          设置同步file忽略文件正则
# file_ignore_glob:          设置同步file忽略glob
#fileserver_backend:         设置fileserver_backend
#fileserver_followsymlinks: False     设置fileserver 允许文件链接
#fileserver_ignoresymlinks: True      忽略fileserver 允许文件链接
# fileserver_limit_traversal: False   设置fileserver 遍历限制
#fileserver_events: False             设置fileserver fire events
#gitfs_provider: pygit2               设置fileserver gitfs驱动
#gitfs_remotes:                       设置fileserver gitfs_remotes 地址
#gitfs_ssl_verify: True               gitfs ssl验证

3.1.6 pillar系统配置

#pillar_roots:                      设置pillar_roots目录
#ext_pillar:                        设置ext_pillar方式
#ext_pillar_first: False            开启ext pillar first
#pillar_gitfs_ssl_verify: True      开启pillar gitfs ssl 验证
#pillar_opts: False                 开启pillar 读取opts参数
#pillar_safe_render_error: True     设置开启pillar render 错误信息
#pillar_source_merging_strategy: smart   设置pillar 配置合并策略

3.1.7 syndic配置

#order_masters: False                       设置开启syndic
#syndic_master: masterofmasters             设置开启syndic master
#syndic_master_port: 4506                   设置开启syndic master端口
#syndic_pidfile: /var/run/salt-syndic.pid   设置syndic pid文件
#syndic_log_file: /var/log/salt/syndic      设置syndic 日志文件

3.1.8 日志配置

#log_file: /var/log/salt/master                      设置master日志文件
#key_logfile: /var/log/salt/key                      设置key日志文件
#log_level: warning                                  设置日志的级别
#log_level_logfile: warning                          设置日志记录级别
#log_datefmt: '%H:%M:%S'                             设置日志时间格式
#log_datefmt_logfile: '%Y-%m-%d %H:%M:%S'            设置日志记录时间格式
#log_fmt_console: '%(colorlevel)s %(colormsg)s'      设置console日志格式
#log_fmt_logfile: '%(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s'    设置日志记录日志格式
#log_granular_levels: {}                             设置指定lib库的日志级别

 3.2 /etc/salt/minion配置文件内容

3.2.1 主要的配置

#default_include: minion.d/*.conf          设置include配置文件
#master    salt                            设置master地址
#random_master: False                      设置多master随机请求
# retry_dns: 30                            设置dns解析失败的时间
#master_port: 4506                         设置master认证端口
#root_dir: /                               工作目录
#pki_dir:  /etc/salt/pki/minion            pki信息存储目录
#id:                                       设置minion ID
#grains:                                   设置grains信息
#cachedir: /var/cache/salt/minion          设置缓存目录
#sock_dir: /var/run/salt/minion            设置sock目录
#backup_mode: minion                       设置备份文件
#acceptance_wait_time: 10                  设置等待master公钥的时间
#acceptance_wait_time_max: 0               设置等待master公钥的最大时间
#rejected_retry: False                     拒绝后是否等待
#random_reauth_delay: 60                   设置从新认证的时间
#auth_timeout: 60 设置认证timeout的时间
#auth_tries: 7 在saltReqTimeoutError重试次数
#auth_safemode: False 设置safemode模式
#ping_interval: 0 设置ping master间隔

3.2.2 模块配置

#disable_modules:          disable模块配置
#disable_returners: []     disable return 模块
# modules_max_memory: -1   设置模块最大内存

3.2.3 长链接配置

#tcp_keepalive: True       开启tcp长链接
#tcp_keepalive_idle: 300   长链接发送时间
#tcp_keepalive_cnt: -1     认定连接失败发送多个tcp探测包
#tcp_keepalive_intvl: -1   设置长连接探测频率

 

参考博客:https://www.cnblogs.com/shawhe/p/10826498.html

posted @ 2021-09-17 09:56  coffee_kai  阅读(438)  评论(0编辑  收藏  举报