1. 程式人生 > >Centos7上Saltstack 安裝配置詳解

Centos7上Saltstack 安裝配置詳解

一、saltstack簡介

Saltstack 比 Puppet 出來晚幾年,是基於Python 開發的,也是基於 C/S 架構,服務端 master 和客戶端 minions ;Saltstack 和 Puppet 很像,可以說 Saltstatck 整合了 Puppet 和 Chef 的功能,更加強大,更適合大規模批量管理伺服器,並且它比 Puppet 更容易配置。

三大功能: 遠端命令執行,配置管理(服務,檔案,cron,使用者,組),雲管理。
支援系統:大多數都支援,windows 上不支援安裝 master。

salt的具體步驟如下:

第一步:salt stack的master與minion之間通過ZeroMq進行訊息傳遞,使用了ZeroMq的釋出-訂閱模式,連線方式包括tcp,ipc。
第二步:salt命令,以ls檢視為例,將cmd.run ls命令從salt.client.LocalClient.cmd_cli釋出到master,獲取一個Jobid,根據jobid獲取命令執行結果。
第三步:master接收到命令後,將要執行的命令傳送給客戶端minion。
第四步:minion從訊息總線上接收到要處理的命令,交給minion._handle_aes處理。
第五步:minion._handle_aes發起一個本地執行緒呼叫cmdmod執行ls命令。執行緒執行完ls後,呼叫minion._return_pub方法,將執行結果通過訊息匯流排返回給master。
第六步:master接收到客戶端返回的結果,呼叫master._handle_aes方法,將結果寫的檔案中。
第七步:salt.client.LocalClient.cmd_cli通過輪詢獲取Job執行結果,將結果輸出到終端

二、saltstack安裝與配置
1、準備工作

準備兩臺機器,這兩臺機器都關閉 selinux,清空 iptables或firewall 規則並儲存。

centos7.3 192.168.0.23 master

centos7.3 192.168.0.27 minion

安裝epel源:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2、安裝與配置

1)服務端安裝與配置

yum install -y salt-master salt-minion

/etc/salt/master
/file_roots
#file_roots:
#  base:
#    - /srv/salt
去掉#註釋
file_roots:
  base:
    - /srv/salt
/pillar_roots
#pillar_roots:
#  base:
#    - /srv/pillar
去掉註釋:
pillar_roots:
  base:
    - /srv/pillar

2)客戶端安裝

 yum install -y salt-minion

/etc/salt/minion
#master: server 修改為
master: 192.168.0.27
#id
修改為
id: mysql

3、啟動服務
1)服務端

systemmctl start salt-master && systemmctl enable salt-master
systemmctl start salt-minion && systemmctl enable salt-minion

2)客戶端

systemmctl start salt-minion && systemmctl enable salt-minion

3、master配置檔案詳解

saltstack大部分配置都已經指定了預設值,只需要根據實際需求進行修改就行。

# vim /etc/salt/master

配置項及預設值 註釋
主配置設定:
default_include: master.d/*.conf 指定include的目錄和檔案
interface: 0.0.0.0 埠監聽地址
ipv6: FALSE IPV6地址是否監聽
publish_port: ZeroMQ訊息釋出埠
user: root saltstack執行的使用者
max_open_files: 100000 最大檔案開啟限制不能高於硬限制,每個連線至少要使用一個檔案描述符。
worker_threads: 5 saltstack工作的執行緒數目,不能低於3
ret_port:4506 saltstack的訊息接聽埠
pidfile: /var/run/salt-master.pid salt-master的程序pid檔案位置
root_dir: / salt-stack工作的根目錄,改變它可以使salt從另外一個目錄開始執行,好比chroot
pki_dir: /etc/salt/pki/master 公鑰儲存目錄
cachedir: /var/cache/salt/master jobs和cache的快取目錄
extension_modules: <no default> 自定義模組的目錄
module_dirs: <no default> 自定義模組的同步目錄
verify_env: True 服務啟動時進行許可權設定與驗證
keep_jobs: 24 設定jobs快取的過期時間,單位是小時
timeout: 5 設定salt命令和api的預設超時值。 預設值為5秒。
loop_interval: 60 saltstack程序檢測週期,清理作業快取並執行排程程式等。單位秒
output: nested 設定salt命令使用的預設輸出器。
show_timeout: True 開啟minion timeout提示
color: True 開啟output顏色提示
strip_colors: False 不要從巢狀結果和狀態輸出中剝離彩色輸出(預設情況下為true)。
sock_dir: /var/run/salt/master 設定用於儲存unix套接字的目錄
enable_gpu_grains: False 設定grains收集主控制器的GPU資訊
job_cache: True jobs快取,對於大型部署(超過5000次)可能是負擔,不建議開啟。
minion_data_cache: True 開啟minion的grains和pillar資料的快取
event_return: mysql 設定return儲存
event_return_queue: 0 啟用event_returns可能會對儲存系統造成重大負擔。預設情況不排隊。
max_event_size: 1048576 允許訊息的最大大小,該值以位元組表示。
ping_on_rotate: False 建議通過使用'key'標籤監聽'aes_key_rotate'事件來處理此事件,並適當地執行。
preserve_minion_cache: False 刪除key時是否刪除cache資料
con_cache: False 此快取記憶體並大大提高了max_minions的效能。
安全設定:
open_mode: False Ture的話,就會關閉身份驗證,這僅適用於高度安全的環境
auto_accept: False 設定自動簽證,預設是False不自動簽證
autosign_timeout: 120 自動簽證的超時時間,單位是秒
autosign_file: /etc/salt/autosign.conf 定義自動簽名規則檔案,支援正則表示式以及全域性行
autoreject_file: /etc/salt/autoreject.conf 定義自動拒絕簽證的規則檔案,可以覆蓋autosign_file定義的成員資格
permissive_pki_access: False 設定pki檔案訪問許可權
client_acl: 定義使用者模組執行限制
client_acl_blacklist: 定義模組和使用者黑名單
sudo_acl: False 關閉利用sudo後client_acl限制
external_auth: 指定外部認證方式
token_expire: 43200 token過期時間,單位是秒,預設是12小時
file_recv: False 是否允許minions推送檔案到master端
file_recv_max_size: 100 對可以推送到主機的檔案的大小設定一個硬限制。單位是MB 預設值:100
Salt-SSH配置:
roster_file: /etc/salt/roster roster檔案的路徑
ssh_minion_opts:  salt-ssh不使用本地配置。 可以在名冊上(“minion_opts”)上以覆蓋方式覆蓋
主模組管理
runner_dirs: [] 管理主模組的載入方式。
cython_enable: False 是否為主模組啟用Cython
狀態系統設定
state_top: top.sls 設定state入口檔案
master_tops: 設定其他的top方式
external_nodes: None 允許Salt收集通常放在頂級檔案中的資料是將返回ENC資料的可執行檔案。
renderer: yaml_jinja 設定呈現狀態資料的方式
jinja_trim_blocks: False 如果這被設定為True,則在刪除Jinja塊後的第一個換行符。預設為False
jinja_lstrip_blocks: False 如果將此設定為True,則前導空格和製表符將從行的開頭移除到塊。 預設為False
failhard: False failhard選項會在狀態執行中檢測到第一個故障後立即停止,預設為False
state_verbose: True
state_output: full  預設情況下,列印所有資料。
state_aggregate: False 自動聚合支援mod_aggregate的所有狀態或傳遞狀態模組名稱列表以自動聚合這些型別。
state_events: False 在狀態執行中的每個功能完成執行時傳送進度事件。
檔案伺服器設定
file_roots: 檔案伺服器的根目錄
hash_type: md5 檔案檢驗的hash型別,支援md5,sha1,sha224,sha256,sha384和sha512。
file_buffer_size: 1048576 檔案伺服器中的緩衝區大小
file_ignore_regex: 設定同步file忽略檔案正則
file_ignore_glob:
fileserver_backend: Salt支援一個模組化的檔案伺服器後端系統,該系統允許master直接連結到第三方系統來收集和管理可用於客戶端的檔案。
fileserver_followsymlinks: False 設定fireserver允許檔案連結
fileserver_ignoresymlinks: True 忽略fireserver允許檔案連結
fileserver_limit_traversal: False 設定fireserver的遍歷限制
fileserver_events: False 檔案伺服器可以在每次更新檔案伺服器時觸發事件,預設情況下禁用
gitfs_provider: gitpython Gitfs驅動可以由兩個python模組之一提供:GitPython或pygit2。 如果使用pygit2,則還必須安裝libgit2和git。
gitfs_remotes: fileserver gitfs_remotes地址
gitfs_ssl_verify: True gitfs_ssl_verify選項指定在聯絡gitfs後端時是否忽略ssl證書錯誤。預設值True以外的任何值都是安全性問題
gitfs_root: somefolder/otherfolder gitfs_root選項可以從儲存庫中的子目錄中提供檔案。 路徑是相對於儲存庫的根而定義的,預設為儲存庫根。
Pillar設定
pillar_roots: 設定pillar_roots目錄
ext_pillar: 設定ext_pillar方式
ext_pillar_first: False ext_pillar_first選項允許在檔案系統illar之前填充外部pillar源。
pillar_gitfs_ssl_verify: True 開啟證書驗證,將此標誌設定為除預設值True以外的任何值都是安全性問題
pillar_opts: False 開啟pillar讀取opts引數
pillar_safe_render_error: True 因為錯誤可能包含模板資料,將提供不該有的資訊,如密碼。當設定為true時,錯誤訊息將僅顯示:呈現SLS'my.sls'失敗。
pillar_source_merging_strategy: smart 配置不同來源之間的合併策略,它接受四個值:recurse,aggregate,overwrite或smart。
Syndic settings 
order_masters: False 設定開啟syndic
syndic_master: masterofmaster 如果這個master將執行一個salt syndic守護程序,設定syndic_master的地址
syndic_master_port: 4506 設定syndic_master的監聽埠
syndic_pidfile: /var/run/salt-syndic.pid 設定syndic的pid檔案
syndic_log_file: syndic.log 設定syndic的日誌檔案
對等釋出設定
peer: 對等設定
peer_run: 此設定與對等設定相同,除了開啟執行程式而不是模組功能。 所有對等執行程式支援都預設關閉,必須在使用前啟用。
日誌設定
log_file: /var/log/salt/master naster日誌檔案位置
log_level: warning 日誌級別
log_level_logfile: warning 日誌記錄級別
log_datefmt: '%H:%M:%S' 日誌時間格式
log_datefmt_logfile: '%Y-%m-%d %H:%M:%S' 日誌檔案的記錄的時間格式
log_fmt_console: 設定console日誌格式
log_fmt_logfile: 設定日誌記錄日誌格式
log_granular_levels: {} 設定指定lib庫的日誌級別
節點組
nodegroups: 設定了一個節點組後面指定組以及組裡面有哪些主機,配置檔案裡面有例子
範圍叢集設定
range_server: range:80 提供叢集資訊的範圍伺服器(和可選埠)
windows軟體回收設定
win_repo: '/srv/salt/win/repo' 回收主機的檔案
win_repo_mastercachefile: master的回購快取檔案的位置
win_gitrepos: git儲存庫列表包含在本地的repo中
Returner設定
return: mysql minion返回的結果被什麼使用

4、 minion配置檔案詳解

# vim /etc/salt/minion

配置檔案及預設值 註釋
主配置檔案設定
default_include: minion.d/*.conf include配置檔案
master: salt master端的地址
random_master: False 設定多master隨機請求
master_shuffle: False 如果master_type設定為故障轉移這裡啟用
master_type: str 配置為故障轉移,通過將此值設定為“str”來配置多個熱主機。
master_alive_interval: 30 設定了故障轉移,預設是30秒輪詢檢查一次,要完全禁用間隔,請將值設定為-1。
ipv6: False 設定Ipv6地址監聽
retry_dns: 30 解析master主機名失敗之後30秒再嘗試,設定為0為不嘗試
master_port: 4506 設定主應答和認證伺服器使用的埠。
user: root 執行salt的使用者
sudo_user: saltdev 設定sudo_user將導致salt將sudo下的所有執行模組執行到sudo_user中給出的使用者。
pidfile: /var/run/salt-minion.pid 守護程序的pid檔案
root_dir: / saltstack的工作目錄
pki_dir: /etc/salt/pki/minion 儲存pki資訊的目錄
id: 明確地宣告這個使用的id,如果設定,id將是python呼叫返回的主機名。
append_domain: 將域附加到主機名這對於socket.getfqdn()不會產生FQDN(例如Solaris)的系統
grains: 設定grains資訊
cachedir: /var/cache/salt/minion minion的cache資料目錄
verify_env: True 在啟動時驗證並設定配置目錄的許可權。
cache_jobs: False 是否開啟jobs的快取
sock_dir: /var/run/salt/minion minion的sock目錄
output: nested 設定salt-call命令使用的預設輸出器。 預設值為“nested”。
color: True 預設輸出為彩色。 要禁用彩色輸出,請將顏色值設定為False。
strip_colors: False 從巢狀結果和狀態輸出中剝離彩色輸出。
backup_mode: minion 設定備份檔案,唯一有效的設定是minion,預設禁用
acceptance_wait_time: 10 等待master接收minion的公鑰,10秒嘗試一次直到成功。
acceptance_wait_time_max: 0 等待公鑰認證的最大值。 如果設定為零,重新連線嘗試之間的時間將保持不變。
rejected_retry: False 設定如果master拒絕minion的公鑰,是否繼續嘗試而不是退出。
random_reauth_delay: 60 當主金鑰更改時,minion將嘗試重新認證,設定隨機數防止客戶端同時向master端請求。
auth_timeout: 60 設定等待認證的超時時間為60秒,然後再重新發起請求直到成功連線為止。
auth_tries: 7 嘗試驗證時可接受的SaltReqTimeoutError連續數。
auth_safemode: False 在ping_interval期間SaltReqTimeoutError導致身份驗證失敗是否重新啟動子服務程序。
ping_interval: 0 Ping Master確保連線活著(單位分鐘)。
loop_interval: 60 在評估排程程式和執行清理任務之間等待幾分鐘的時間。這預設為60秒
grains_refresh_every: 1 定期檢查其grains,10分鐘是合理值,單位是分鐘。
grains_cache: False 是否做grains的快取
grains_cache_expiration: 300 啟用grains快取之後這裡才有作用,快取過期時間,單位是秒
ipc_mode: ipc Windows平臺缺少posix IPC,必須依賴於較慢的基於TCP的程序間通訊。
tcp_pub_port: 4510 tcp模式下minion的pub埠
tcp_pull_port: 4511 tcp模式下minion的pull埠
max_event_size: 1048576 最大訊息的大小,單位為位元組。
master_alive_interval: 30 輪詢檢測master是否從故障恢復的秒數。
minion模組設定
disable_modules: [cmd,test] 禁用特定的模組
disable_returners: []
modules_max_memory: -1 為匯入的模組指定最大大小單位是位元組。此功能目前僅支援* nix作業系統需要psutil。
狀態管理設定
renderer: yaml_jinja 狀態管理系統執行所有狀態模板預設渲染器是yaml_jinja。
failhard: False failhard選項會在狀態執行中檢測到第一個故障後立即停止。 預設為False。
autoload_dynamic_modules: True 在執行之前自動載入動態模組
clean_dynamic_modules: True 如果動態模組不在伺服器上面將會自動從伺服器中刪除
environment: None 設定minion的執行環境。用來做環境隔離用的。
state_top: top.sls 設定state入口檔案
檔案目錄設定
file_client: remote 設定檔案客戶端。 預設是remote遠端。可以設定為local從本地查詢檔案。
file_roots:/srv/salt
 
本地檔案的file服務目錄
fileserver_limit_traversal: False Salt檔案伺服器是否將完全遞迴到所有定義的環境中以嘗試查詢檔案。
hash_type: md5 檔案檢驗hash型別
pillar_roots:/srv/pillar 果file_client設定為local,則會在本地搜尋Salt pillar,這裡是其目錄
安全設定
open_mode: False Ture的話,就會關閉身份驗證,這僅適用於高度安全的環境
permissive_pki_access: False 設定pki檔案訪問許可權
state_verbose: True 設定可用於更改狀態系統資料列印到顯示器的方式。 預設情況下列印所有資料。
state_output: full
state_output_diff: False 是否忽略混亂日誌
state_output_profile: True 更改每個狀態執行時是否顯示配置檔案資訊。
master_finger: '' 在主金鑰交換之前,主公鑰的指紋驗證salt主人的身份。這裡是master的指紋。
執行緒設定
multiprocessing: True 是否開啟多執行緒支援接,收到一個釋出時,會生成一個新程序,並在其中執行該命令。
日誌設定
log_file: /var/log/salt/minion minion的日誌檔案位置
log_level: warning 日誌級別
log_level_logfile: warning 日誌記錄級別
log_datefmt: '%H:%M:%S' 日誌時間格式
log_datefmt_logfile: '%Y-%m-%d %H:%M:%S' 日誌檔案的記錄的時間格式
log_fmt_console: 設定console日誌格式
log_fmt_logfile: 設定日誌記錄日誌格式
log_granular_levels: {} 設定指定lib庫的日誌級別
zmq_monitor: False 是否記錄的所有事件將包括字串'ZeroMQ事件'。
長連線配置
tcp_keepalive: True 是否開啟tcp長連線
tcp_keepalive_idle: 300 預設300在5分鐘後傳送第一個keepalive,在Linux上,OS預設(-1)通常為7200秒
tcp_keepalive_cnt: -1 多少個丟失的探測器來考慮連線丟失。預設值-1使用作業系統預設值通常在Linux上為9
tcp_keepalive_intvl: -1 keepalives的檢測頻率。 預設值-1使用作業系統預設值,通常在Linux上為75秒
Returner設定
return: mysql minion返回的結果被什麼使用

三、配置認證

1)在服務端上操作

salt-key -L

說明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令檢視到已經簽名的客戶端。此時我們在客戶端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 檔案。
2)測試驗證
示例1: salt '*' test.ping                  //檢測通訊是否正常,也可以指定其中一個 'slaver.test.com'


示例2:  salt '*' cmd.run   'df -h'        //遠端執行命令

說明: 這裡的 * 必須是在 master 上已經被接受過的客戶端,可以通過 salt-key 查到,通常是我們已經設定的 id 值。關於這部分內容,它支援通配、列表以及正則。 比如兩臺客戶端 web10、web11, 那我們可以寫成  salt 'web*'    salt 'web1[02]'  salt -L 'web10,web11'   salt -E 'web(10|11)' 等形式,使用列表,即多個機器用逗號分隔,而且需要加-L,使用正則必須要帶-E選項。 它還支援 grains 和 pillar,分別加 -G 和 -I 選項,下面會介紹到。
salt-key命令用法:
    -a 後面跟主機名,認證指定主機
    -A 認證所有主機
    -r 跟主機名,拒絕指定主機
    -R 拒絕所有主機
    -d 跟主機名,刪除指定主機認證
    -D 刪除全部主機認證

    -y 省略掉互動,相當於直接按了y

解決這種錯誤,需要刪除minion端的key,重新認證。

# rm -rf /etc/salt/pki/minion/minion_master.pub
# service restart salt-minion  //重啟minion端

四、grains 和 pillar
下面來介紹 grains 和 pillar
1、grains
grains 是在 minion(客戶端)啟動時收集到的一些資訊,比如作業系統型別、網絡卡ip等。 
使用命令:

[[email protected] ~]# salt 'slaver.test.com' grains.ls            //列出所有的 grains 專案名字
[[email protected] ~]# salt 'slaver.test.com' grains.items      //列出所有的 grains 專案名以及值

grains的資訊並不是動態的,並不會時時變更,它只是在 minion 啟動時收集到的。grains 也可以做配置管理。
下面我們來自定義 grains
1)客戶端上配置

[[email protected] ~]# vim /etc/salt/grains               //新增如下,注意冒號後有空格
role: nginx
env: test
myname: tpp

或者

[[email protected] ~]# vim /etc/salt/minion            //在最下面新增或更改
grains:
  role:
    - nginx
  env:
    - test
  myname:
    - tpp

重啟minion服務
systemctl restart salt-minion

2)服務端獲取 grains

[[email protected] ~]# salt 'slaver.test.com' grains.item role env myname       //列出多個

[[email protected] ~]# salt 'slaver.test.com' grains.get myname                    //列出單個

注意:grains 在遠端執行命令時很方便。我們可以按照 grains 的一些指標來操作。比如把所有的 web 伺服器的 grains 的 role 設定為 nginx,那這樣我們就可以批量對 nginx 的伺服器進行操作了:

[[email protected] ~]# salt -G role:nginx cmd.run 'hostname'
[[email protected] ~]# salt -G os:CentOS cmd.run 'hostname'

2、pillar
pillar 和 grains 不一樣,是在 master 上定義的,並且是針對 minion 定義的一些資訊。像一些比較重要的資料(密碼)可以存在 pillar 裡,還可以定義變數等。
檢視指定minion的 pillar 值:

[[email protected] ~]# salt 'slaver.test.com' pillar.items1)服務端自定義配置 pillar
[[email protected] ~]# vim /etc/salt/master                    //找到如下內容,去掉#號
pillar_roots:
  base:
    - /srv/pillar
[[email protected] ~]# mkdir /srv/pillar
[[email protected] ~]# vim /srv/pillar/test.sls                   //自定義配置檔案,內容如下
conf: /etc/123.conf
myname: tpp
[[email protected] ~]# vim /srv/pillar/top.sls                   //總入口檔案,內容如下
base:
  'slaver.test.com':
    - test

重啟master

[[email protected] ~]# /etc/init.d/salt-master restart

注意:當更改完 pillar 配置檔案後,我們可以通過重新整理 pillar 配置來獲取新的 pillar 狀態:

[[email protected] ~]# salt '*' saltutil.refresh_pillar

2)驗證:

[[email protected] ~]# salt 'slaver.test.com' pillar.items

[[email protected] ~]# salt 'slaver.test.com' pillar.item conf
[[email protected] ~]# salt 'slaver.test.com' pillar.item myname

pillar 同樣可以用來作為 salt 的匹配物件。比如:

[[email protected] ~]# salt -I 'conf:/etc/123.conf' test.ping
[[email protected] ~]# salt -I 'conf:/etc/123.conf' cmd.run 'w'


五、配置管理安裝Apach

下面進行的演示是遠端通過 yum 方式安裝 Apache。步驟如下:


1、配置

[[email protected] ~]# vim /etc/salt/master        //開啟如下內容的註釋
file_roots:
  base:
    - /srv/salt

注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)。

[[email protected] ~]# mkdir /srv/salt
[[email protected] ~]# vim /srv/salt/top.sls
base:
  'slaver.test.com':
    - apache

注意:若換成 '*',則表示在所有的客戶端執行 apache 模組。

[[email protected] ~]# vim /srv/salt/apache.sls
apache-service:
  pkg.installed:
    - names:                //如果只有一個服務,那麼就可以寫成 –name: httpd 不用再換一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

注意:apache-service 是自定義的 id 名。pkg.installed 為包安裝函式,下面是要安裝的包的名字。service.running 也是一個函式,來保證指定的服務啟動,enable 表示開機啟動。
2、執行命令

[[email protected] ~]# salt 'slaver.test.com' state.highstate         //執行時間比較長,因為要安裝httpd

如上圖所示,說明 Apache 遠端安裝已成功。
六、檔案目錄管理

1、檔案管理
1)服務端配置
接著編輯之前的 top.sls 檔案

[[email protected] ~]# vim /srv/salt/top.sls              //修改為如下
base:
  'slaver.test.com':
    - filetest

新建 filetest.sls 檔案

[[email protected] ~]# vim /srv/salt/filetest.sls
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644

注意:第一行的 file-test 為自定的名字,表示該配置段的名字,可以在別的配置段中引用它;source指定檔案從哪裡拷貝,這裡的 test 目錄相當於是 /srv/salt/test 目錄;name指定遠端客戶端要生成的檔案。
新建所要測試的原始檔

[[email protected] ~]# mkdir -p /srv/salt/test/123/
[[email protected] ~]# vim /srv/salt/test/123/1.txt
msiyuetian.blog.iyunv.com

執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

2、目錄管理
1)服務端配置

接著編輯之前的 top.sls 檔案

[[email protected] ~]# vim /srv/salt/top.sls              //修改為如下
base:
  'slaver.test.com':
    - filedir

新建 filedir.sls 檔案

[[email protected] ~]# vim /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test1/234
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True

注意:clean: True 源刪除檔案或目錄,目標也會跟著刪除,否則不會刪除。可以預設設定為 False。

新建所要測試的源目錄

[[email protected] ~]# mkdir -p /srv/salt/test1/234
[[email protected] ~]# vim /srv/salt/test1/234/2.txt
msiyuetian.blog.iyunv.com

執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

3)測試增刪功能
在服務端新建 mydir 目錄以及 testdir.add 檔案,刪除 2.txt 檔案:

[[email protected] ~]# mkdir /srv/salt/test1/234/mydir
[[email protected] ~]# touch /srv/salt/test1/234/mydir/111.txt
[[email protected] ~]# touch /srv/salt/test1/234/testdir.add
[[email protected] ~]# rm -rf /srv/salt/test1/234/2.txt

執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

客戶端驗證

注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下建立了 mydir 目錄以及 testdir.add 檔案,並刪除 2.txt 檔案。這裡值得注意的是要成功建立 mydir 目錄,前提是 mydir 目錄下要有檔案,如這裡的111.txt 檔案,如若沒有,客戶端是不會建立 mydir 目錄的。

七、遠端執行

前面提到遠端執行命令 test.ping,cmd.run,點前面的是模組,點後面的是函式;這樣總歸是不太規範化,下面詳細介紹怎麼遠端執行命令和指令碼。

1、遠端執行命令

1)服務端配置

接著編輯之前的 top.sls 檔案

[[email protected] ~]# vim /srv/salt/top.sls              //修改為如下
base:
  'slaver.test.com':
    - cmdtest

新建 cmdtest.sls 檔案

[[email protected] ~]# vim /srv/salt/cmdtest.sls
cmd-test:  cmd.run:
    - onlyif: test -f /tmp/123.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root

注意:條件 onlyif 表示若 /tmp/123.txt 檔案存在,則執行後面的命令;可以使用 unless,兩者正好相反。
執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

2、遠端執行指令碼
1)服務端配置

接著編輯之前的 top.sls 檔案

[[email protected] ~]# vim /srv/salt/top.sls              //修改為如下
base:
  'slaver.test.com':
    - shelltest

新建 shelltest.sls 檔案

[[email protected] ~]# vim /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root

新建 1.sh 指令碼檔案

[[email protected] ~]# vim /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi

執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

注意:通過上面的例子,我們實現了遠端執行指令碼;如果我們想一鍵遠端安裝 LAMP 或者 LNMP,那麼只需把本例中的 1.sh 指令碼替換成 一鍵安裝的指令碼就行。
八、管理任務計劃

1、建立 cron
1)服務端配置

編輯 top.sls 檔案

[[email protected] ~]# vim /srv/salt/top.sls              //修改為如下
base:
  'slaver.test.com':
    - crontest

編輯 crontest.sls 檔案

[[email protected] ~]# vim /srv/salt/crontest.sls
cron-test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'

注意,*需要用單引號引起來。當然我們還可以使用 file.managed 模組來管理 cron,因為系統的 cron都是以配置檔案的形式存在的。

執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

2、刪除 cron

1)服務端配置
我們只需修改 crontest.sls 檔案

[[email protected] ~]# vim /srv/salt/crontest.sls

把 cron.present: 改成 cron.absent:
注意:兩者不能共存,要想刪除一個 cron,那之前的 present 就得替換掉或者刪除掉。
執行命令:

[[email protected] ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

[[email protected] ~]# crontab -l           //可檢視到該任務計劃已刪除

九、Saltstack 常用命令
1、拷貝檔案到客戶端

[[email protected] ~]# salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt
slaver.test.com:
    /tmp/cp.txt

2、拷貝目錄到客戶端

[[email protected] ~]# salt 'slaver.test.com' cp.get_dir salt://test /tmp
slaver.test.com:
    - /tmp/test/1.sh
    - /tmp/test/123/1.txt

3、顯示存活的客戶端

[[email protected] ~]# salt-run manage.up

4、命令下執行服務端的指令碼

[[email protected] ~]# vim /srv/salt/test/shell.sh

#! /bin/bash
echo "msiyuetian.blog.iyunv.com" > /tmp/shell.txt
[[email protected] ~]# salt 'slaver.test.com' cmd.script salt://test/shell.sh

客戶端檢視

參考文件

相關推薦

Centos7Saltstack 安裝配置

一、saltstack簡介 Saltstack 比 Puppet 出來晚幾年,是基於Python 開發的,也是基於 C/S 架構,服務端 master 和客戶端 minions ;Saltstack 和 Puppet 很像,可以說 Saltstatck 整合了 Pupp

saltstack 安裝配置

saltstackSaltStack是一個服務器基礎架構集中化管理平臺,具備配置管理、遠程執行、監控等功能,一般可以理解為簡化版的puppet和加強版的func。SaltStack基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與python第三方模塊(Pyzmq、PyCrypto、Pyjinji

Centos7之pacemaker高可用安裝配置

申明: centos7的pacemaker與之前6使用的方法不一致,即使用centos6.x的方法在centos7.x上面配置pacemaker不能成功。 因此openstack 上面的centos7.1如果使用官方文件直接配置高可用HA也是無法成功的。(吐槽:opens

NFS服務器原理和安裝配置附案例演練

隨機選擇 span 通訊 操作系統 不同 網絡 定義 重新啟動 exportfs NFS服務器原理和安裝配置詳解附案例演練 1、什麽是NFS服務器   NFS就是Network File System的縮寫,它最大的功能就是可以通過網絡,讓不同的機器、不同的操作系統可以共享

使用LVS實現負載均衡原理及安裝配置

配置 png 負載均衡 iptables .cn 詳解 文章 配置詳解 logs LVS是一個開源軟件,由章文嵩博士於1998年5月創立,可以實現Linux平臺下的簡單負載均衡。LVS是Linux Virtual Server的簡寫,是一個虛擬的服務器集群系統。LVS是基於

CentOS 7.4 Tengine安裝配置(一)

tengine nginx 一、安裝配置Tengine:Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易

CentOS 7.4 Tengine安裝配置(二)

tengine、虛擬主機、IP、訪問控制三、配置虛擬主機:1、配置基於端口的虛擬主機:(1)在http{}配置段中新增如下server:server {listen 8000;server_name localhost;access_log /usr/local/tengine/logs/localhost8

CentOS 7.4 Tengine安裝配置(三)

location、echo、fancy九、根據HTTP響應狀態碼自定義錯誤頁:1、未配置前訪問一個不存在的頁面:http://192.168.1.222/abc/def.html,按F12後刷新頁面2、在server{}配置段中新增如下location:server {listen 80;server_nam

CentOS 7.4 Tengine安裝配置(五)

tengine nginx https 十四、配置Tengine支持HTTPS1、演示環境:IP操作系統角色 192.168.1.222 CentOS 7.4 Tengine服務器 192.168.1.145 CentOS 6.9 自建CA服務器備註:Teng

CentOS 7.4 Tengine安裝配置(六)

tengine 反向代理 十五、反向代理:1、演示環境:IP操作系統節點角色192.168.1.222CentOS 7.4node1Tengine服務器192.168.1.144CentOS 6.9node2Apache服務器2、node2安裝Apache服務,並創建測試頁:# yum -y inst

CentOS 7.4 Tengine安裝配置(七)

tengine cache purge 十六、緩存及緩存清理1、修改node1配置文件nginx.conf:(1)在http配置段中增加如下代碼:proxy_cache_path /usr/local/tengine/cache levels=1:1:2 keys_zone=mycache:200

使用LVS負載均衡搭建web群集的原理及安裝配置

chmod 特點 Go 內核空間 col rpc mac地址 網絡文件系統 IT 一、負載均衡LVS基本介紹 LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬服務器。這是一個由章文嵩博士發起的一個開源項目,它的官方網站是 http://www

nginx的安裝配置

屬於 nod 客戶端瀏覽器 work http狀態碼 curl -i time dom connect title: nginx的安裝配置詳解tags: nginx,虛擬服務器,curl nginx的安裝配置詳解 1. 介紹各個常用的服務端口 21 ftp ;22 ss

NGINX源碼安裝配置(./configure),最全解析

unzip roo without rpc服務 所有 googl 版本 並且 大文件 NGINX ./configure詳解 在"./configure"配置中,"--with"表示啟用模塊,也就是說這些模塊在編譯時不會自動構建&qu

httpd/apache編譯安裝配置

apachectl 訪問 這一 block combined enable config yum 開發環境 一.httpd介紹 1.httpd是http協議的一個經典實現,也是apache組織中的一個頂級項目,其官方站點為httpd.apache.org。 2.httpd的

[自動化] Saltstack服務配置

txt hostname 文件操作 roo python 安裝包 目錄管理 關閉selinux 服務配置 Saltstack 簡介 Saltstack 是一個服務器基礎設施管理工具,它具有配置管理、遠程執行、監控等功能。Saltstack由Python語言編寫,基於 C/S

【go 語言環境安裝】goland語言環境安裝配置

1、下載go 下載地址: https://golang.google.cn/dl/ 開啟網址,由於我的電腦是win64,所以下載第一個。 2、安裝go 2.1、UNIX/Linux/Mac OS X, 和 FreeBSD 安裝 以下介紹了在UNIX/Linux/Mac OS

python中呼叫R語言通過rpy2 進行互動安裝配置(R_USER、R_HOME配置

python中呼叫R語言通過rpy2 進行詳解 文章目錄 python中呼叫R語言通過rpy2 進行詳解 1.R語言的安裝: 2.Rpy2工具的安裝和配置 3.pycharm中使用R語言配置

NTP時間伺服器安裝配置

簡介 時間服務NTP:Network Time Protocol 作用:用來給其他主機提供時間同步服務,在搭建伺服器叢集的時候,需要保證各個節點的時間是一致的,時間伺服器不失為一個好的選擇。 準備工作 關閉防火牆、關閉selinux 系統版本:CentOS7.x