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