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