1. 程式人生 > 其它 >saltstack基本原理和配置

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