標籤:通過 結構關係 空格 彙報 data function rm -rf 功能 nio
salt 練習1、修改其中一台伺服器的主機名稱。 故障問題:
如果不按照要領操作會出現什麼狀況呢?
1、原主機名稱會存在/etc/salt/minion_id這個檔案中,因此不會識別新的主機名稱。可清空minion_id檔案
2、pki檔案下儲存著master端的key和minion端的公開金鑰和私密金鑰,minion端的公開金鑰和私密金鑰是根據伺服器的主機名稱產生的,minion端更改主機名稱後,匹配不上,啟動的minion進程會自動殺掉。
技巧:
要想使master依然可以控制minion,minion在修改主機名稱的前提下,先刪除minion端的 minion_id和pki目錄 :rm -rf /etc/salt/minion_id /etc/salt/pki/ ,任何重新啟動minion端服務
2、master遷移 需求:
在不修改minion端任何資訊的情況下,將master修改到更高配置上。
在保證minion端不掛掉的情況下,平滑遷移
故障問題:
salt原理是如果master拒絕minion端後,minion會自動殺掉服務的進程,如果目前有200台伺服器,所有的minion服務都掛掉了,那麼工作了就大了。
技巧:
原理是:在minion而言,master的key與minion的不能衝突,如果衝突就minion就會自己kill掉。
方法:
1、先準備新master的key,將原master的key直接打包,將salt目錄下的pki目錄全部打包,然後傳到新的master上即可。在此之前新master不要啟動服務。將原master的key,放在新master的salt目錄下,再啟動salt服務
2、先在原master上批量將所有機器的指定master的ip修改(即hosts的配置指向),修改hosts使用cmd.run模組,然後重啟minion端,可用cmd.run,也可直接使用salt提供的模組slat ‘*‘ service.restart slat-minion
3、returnner (日誌輸出)
預設情況下,發送給salt minion的命令執行結果將返回給salt master,Saltstack Returner的介面允許將結果發送給任意系統
可做minion的監控使用,
內建的returnner模組列表
carbon_return 將結果返回給carbon接收器 cassandea_return 將結果返回給Cassandra ColumnFamily local 將結果返回給本地的測試returner介面,即列印當前的結果 mongo_future_return 將結果返回給mongodb mongo_return 將結果返回給mongodb mysql 將結果返回給MySQL postgres 將結果返回給postgres redis_return 將結果返回給redis sentry_return 將結果返回給sentry smtp_return 通過email返回salt資料 syslog_return 將結果返回給作業系統的syslog facility
4、grains
grains跟puppet的facter功能一樣,主要負責採集用戶端一些基本資料,這個也完全可以自訂,可以在用戶端自訂,然後自動彙報上來;也可以從伺服器端定義然後推下去,採集完後,在彙報上來;pillar跟grains比較的話他的靈活性較強。
grains使用
查看grains salt ‘salt-clinet‘ grains.ls salt ‘salt-clinet‘ grains.items salt ‘salt-clinet‘ grains.item 正則匹配 salt -G ‘os:CentOS‘ test.ping salt -G ‘cpuarch:x86_64‘ grains.item num_cpus salt -G ‘ec2_tags:environment:*production*‘ 自訂grains 在minion上進行配置grains grains: roles: -webserver -memcache deployment:datacenter4 cabinet:13 cab_u:14-15
5、states
salt狀態系統的核心是sls,或者叫**S**aLtState檔案。SLS表示系統將會是什麼樣的一種狀態,而且是以一種很簡單的格式來包含這些資料,這經常也被叫做組態管理。
SLS檔案實際上只是一些:字典dictionaries、列表lists、字串str、and數字int
YAML
縮排:YAML使用一個固定的縮排風格表示資料層結構關係,salt需要每個縮排層級由兩個空格組成,不能是tab
Python的字典理所當然是簡單的索引值對,字典的keys在YAML中的表現形式是一個以冒號皆為的字串。alues的表現形式冒號下面的每一行,用一個空格隔開。
例如:my_key: my_value
想要表示清單項目,使用一個短橫杠加一個空格,多個項使用同樣的縮排層級作為同一列表的一部分。
http://docs.saltstack.cn/topics/yaml/index.html
6、state模組列表
http://docs.saltstack.com/en/latest/ref/states/all/index.html
7、salt-call(minion)
去minion上call相應的方法
8、pillar
pillar是salt非誠重要的一個組件,它用於給特定的minion定義任何你需要的資料,這些資料可以被salt的其他組件使用。
salt在0.9.8版本中引入了pillar。
pillar在解析完成後,是一個嵌套的dict結構,最上層的key是minion ID,其value是該minion所擁有的pillar資料,每個value也都是key/value。這裡可以看出pillar的一個特點,pillar資料是與特定minion關聯的,也就是說每個minion都是只能看到自己的資料,所以pillar可以用來傳遞敏感性資料(在salt的設計中,pillar使用獨立的加密session,也是為了保證敏感性資料的安全性)。pillar可以用在那些地方呢?
1、敏感性資料 例如ssh key,加密認證等,由於pillar使用獨立的加密session,可以確保這些敏感性資料不被其他minion看到。 2、變數 可以在pillar中處理平台差異性,比如針對不同的作業系統設定軟體包的名字,然後在state中引用。 3、其他任何資料 可以在pillar中添加任何需要用到的資料,比如定義使用者和UID的對應關係,minion的角色等。 4、用在targetting中 pillar可以用來選擇minion,使用-l選項 預設情況下,master設定檔中的所有資料都添加到pillar中,且對所有minion可用,如果要禁用這一預設值,可以在master設定檔中添加如下資料,重啟服務後生效。 pillar樣本 http://docs.saltstack.cn/topics/jobs/schedule.html salt ‘*‘ saltutil.refresh_pillar #重新整理配置 pillar定義定時任務 每分鐘同步一下nginx設定檔 [[email protected]-server pillar]# cat top.sls base: ‘*‘: - nginx [[email protected]-server pillar]# cat nginx.sls schedule: nginx: function:state.sls minutes: 1 #每分鐘 args: - ‘nginx‘ salt ‘*‘ saltutil.refresh_pillar #重新整理所有機器上的pillar salt ‘*‘ pillar.data #查看所有機器上的pillar
9、proxy
Salt syndic介面是一個強大的工具,這個工具允許建立Salt命令拓補結構,Salt的基本設定是一個salt master指揮一組salt minion。
Syndic介面是一種特殊的直通minion,他允許在一個master上且串連到另外一個master,然後Syndic minion所串連的master就可以控制串連到運行syndic的master上的minion
salt-syndic代理機直接安裝master即可, salt-syndic不需要任何安裝其他外掛程式,直接啟動/etc/init.d/salt-syndic 即可。 設定檔是/etc/salt/master 直接配置三個地方即可。 syndic_master:更進階別master的IP地址 syndic_log_file: syndic記錄檔的路徑(絕對路徑為佳) order_masters:True 確認轉寄機制。
SaltStack(六) 案例練習