SaltStack是繼 Puppet、Chef 以後新出現的配置管理及遠程執行工具, 目前,SaltStack 正獲得愈來愈多的矚目。
node
與 Puppet 相比,SaltStack 沒有那麼笨重,感受較爲輕量;不像 Puppet 有 一套本身的 DSL 用來寫配置,SaltStack 使用 YAML 做爲配置文件格式,寫 起來既簡單又容易,同時也便於動態生成;此外,SaltStack 在遠程執行命令 時的速度很是快,也包含豐富的模塊。python
SaltStack 是開源軟件,其源代碼託管於 GitHub 上,安裝及使用盡可 參考其官方文檔。linux
安裝就很簡單了,下載個epel的源,而後直接yum 就偶了~ios
原文:http://rfyiamcool.blog.51cto.com/1030776/1262537web
拿一臺服務器作master,直接yum安裝shell
yum install salt-master
而後啓動express
salt-master -d
客戶端 clientapache
安裝json
yum install salt-minion
須要在客戶端的/etc/salt/minion 裏面填寫主的ip地址.ubuntu
須要注意的是,配置要遵照yaml的格式。 master:空格10.10.10.66
而後啓動minion客戶端
salt-minion-d
咱們能夠在master 查看下客戶端是否請求認證!
確認客戶端的請求能夠用
salt-key -a 65.ruifengyun.com
也能夠所有認證
salt-key -A
認證後 咱們就能夠測試下拉~ 下面的意思是, 執行全部的註冊主機,用run模塊,執行 ip a 這個命令,並返回結果。
salt詳細的幫助文檔:
[root@66 ~]# salt -h Usage: salt [options] '<target>' <function> [arguments] Options: --version show program's version number and exit --versions-report show program's dependencies version number and exit -h, --help show this help message and exit -c CONFIG_DIR, --config-dir=CONFIG_DIR Pass in an alternative configuration directory. Default: /etc/salt -t TIMEOUT, --timeout=TIMEOUT Change the timeout, if applicable, for the running command; default=5 -s, --static Return the data from minions as a group after they all return. --async Run the salt command but don't wait for a reply -v, --verbose Turn on command verbosity, display jid and active job queries -b BATCH, --batch=BATCH, --batch-size=BATCH Execute the salt job in batch mode, pass either the number of minions to batch at a time, or the percentage of minions to have running -a EAUTH, --auth=EAUTH, --eauth=EAUTH, --extended-auth=EAUTH Specify an extended authentication system to use. -T, --make-token Generate and save an authentication token for re-use. Thetoken is generated and made available for the period defined in the Salt Master. --return=RETURNER Set an alternative return method. By default salt will send the return data from the command back to the master, but the return data can be redirected into any number of systems, databases or applications. -d, --doc, --documentation Return the documentation for the specified module or for all modules if none are specified. Target Options: Target Selection Options -E, --pcre Instead of using shell globs to evaluate the target servers, use pcre regular expressions -L, --list Instead of using shell globs to evaluate the target servers, take a comma delimited list of servers. -G, --grain Instead of using shell globs to evaluate the target use a grain value to identify targets, the syntax for the target is the grain key followed by a globexpression: "os:Arch*" --grain-pcre Instead of using shell globs to evaluate the target use a grain value to identify targets, the syntax for the target is the grain key followed by a pcre regular expression: "os:Arch.*" -N, --nodegroup Instead of using shell globs to evaluate the target use one of the predefined nodegroups to identify a list of targets. -R, --range Instead of using shell globs to evaluate the target use a range expression to identify targets. Range expressions look like %cluster -C, --compound The compound target option allows for multiple target types to be evaluated, allowing for greater granularity in target matching. The compound target is space delimited, targets other than globs are preceded with an identifier matching the specific targets argument type: salt 'G@os:RedHat and webser* or E@database.*' -X, --exsel Instead of using shell globs use the return code of a function. -I, --pillar Instead of using shell globs to evaluate the target use a pillar value to identify targets, the syntax for the target is the pillar key followed by a globexpression: "role:production*" -S, --ipcidr Match based on Subnet (CIDR notation) or IPv4 address. Output Options: Configure your preferred output format --raw-out DEPRECATED. Print the output from the 'salt' command in raw python form, this is suitable for re-reading the output into an executing python script with eval. --yaml-out DEPRECATED. Print the output from the 'salt' command in yaml. --json-out DEPRECATED. Print the output from the 'salt' command in json. --text-out DEPRECATED. Print the output from the 'salt' command in the same form the shell would. --out=OUTPUT, --output=OUTPUT Print the output from the 'salt' command using the specified outputter. The builtins are 'no_return', 'grains', 'yaml', 'overstatestage', 'json', 'pprint', 'nested', 'raw', 'highstate', 'quiet', 'key', 'txt', 'virt_query'. --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT Print the output indented by the provided value in spaces. Negative values disables indentation. Only applicable in outputters that support indentation. --no-color, --no-colour Disable all colored output
salt 在語句的後面加個 -t 時間,就能夠作超時控制:
這裏我們再詳細的說下,如何用salt的targeting匹配打算執行的主機
剛纔我們用的是 salt \* 意思是全部的在線客戶端都要執行。
下面是經過shell通配符的方式匹配
下面是經過grains來匹配主機,grains又是什麼尼? grains能夠理解爲saltstack客戶端的一些特徵,是saltstack客戶端minion本身在服務器收集的,他能夠獲取ip,mac,系統,內存,cpu。。。。。
-G 就是匹配grains的意思, 我這裏只是匹配系統爲Centos的主機,用ping模塊,測試他通不通。
下面是經過正則的方式:
爲了方便起見,salt也支持組的概念, 你能夠把本身經常使用的主機,放在一個組裏面,這樣你之後能夠選定這個組,作針對的操做。
vim /etc/salt/master
nodegroups: group1: 'L@10.200.89.67,10.200.89.69' group2: 'G@os:Debian and foo.domain.com'
使用-N選項:
salt -N group1 test.ping
好了,在這裏我們再說下,salt的文件推送。 salt的文件傳輸,用的是zeromq的機制,這東西作mq速度夠快,可是作文件的傳輸,性能真心不咋低。。。 能夠說很通常,你們能夠用rsync來擴展下性能。
master端的操做
咱們再到客戶端看看,文件是否同步過來? 有 1 這個文件,說明無問題。。。
剛纔我們只是簡單的說了經過grains定位主機,在這裏咱們再詳細的描述下,該如何查看添加刪除grains的信息。
grains.items參數,咱們能夠經過grains 來查看客戶端的基本信息 。
grains也是能夠定製的,其實也好簡單~
如何添加grains數據,vim /srv/salt/_grains/r.py 而後按照下面的格式,return grains就好了。寫完了模塊,再用 saltutil.sync_all把數據推下去。
這樣就成了~ 這個東西咱們能夠用來作定位主機的信息。
saltsatck的模塊是個很重要的東西,咱們如今開始寫模塊:
1 編輯模塊
vim /srv/salt/_modules/nima.py
2 同步
salt \* saltutil.sync_all
3 測試結果
我們再執行如下
這樣咱們就能夠看到本身定義的模塊執行結果了。。。
我們能夠簡單加個接受的參數就能夠實現:
你本身能夠隨意的定義,想執行linux命令的話,你能夠調用os subprocess的模塊
你們看,這個是否是和cmd.run是一個效果的~,最起碼看起來是那樣的~
有時候你們會發現salt的執行速度有點慢,這樣的問題有多是你認證的主機大量的down機或者是不存在,網絡有問題啥的,反正就是不穩定的因素
這個時候 我們能夠把那主機給踢出出去。
原文: xiaorui.cc
再說下saltstack的安全問題 saltstack自帶了一個acl控制
能夠定義對每一個主機的使用哪一個模塊。。。
vim /etc/salt/master 增長如下內容 client_acl: 66.xiaorui.com: - test.ping - status.uptime
這個意思是說 針對66這我的,我們只能運維 test.ping和status.uptime ,要是運行 cmd.run rm -f / 的話 會提示權限致使不能運行的。
Failed to authenticate, is this user permitted to execute commands?'
state狀態的管理:
寫來個top.sls的例子
base: '*': - ldap-client - networking - salt.minion 'salt-master*': - salt.master '^(memcache|web).(qa|prod).loc$': - match: pcre - nagios.client - apache.server 'os:Ubuntu': - match: grain - repos.ubuntu 'os:(RedHat|CentOS)': - match: grain_pcre - repos.epel 'foo,bar,baz': - match: list - database 'somekey:abc': - match: pillar - xyz 'nag1* or G@role:monitoring': - match: compound - nagios.server
這裏簡單講講 job management 任務管理:
要知道salt針對每次的操做,他都會存起來,全部經過jobs能夠獲取之前的記錄,甚至能夠作作審計啥的。
salt-run jobs.list_jobs 是顯示最近的操做
salt-run jobs.lookup_jid id號碼 是顯示具體的返回值
[root@devops-ruifengyun ~ ]$ salt-run jobs.list_jobs|tail -n 20 Function: saltutil.find_job StartTime: 2014, Mar 16 08:21:24.036011 Target: '*' Target-type: glob User: root '20140316082318997104': Arguments: - dir Function: cmd.run StartTime: 2014, Mar 16 08:23:18.997104 Target: 10.200.89.* Target-type: glob User: root '20140316084139556527': Arguments: [] Function: saltutil.running StartTime: 2014, Mar 16 08:41:39.556527 Target: '*' Target-type: glob User: root [root@devops-ruifengyun ~ ]$ [root@devops-ruifengyun ~ ]$ [root@devops-ruifengyun ~ ]$ salt-run jobs.lookup_jid 20140316082318997104 10.200.89.67: beifen install.log.syslog keepalived-1.2.12.tar.gz vs_wan.conf install.log keepalived-1.2.12 vip_wan.conf 10.200.89.69: install.log install.log.syslog keepalived-1.2.12 keepalived-1.2.12.tar.gz
經過salt-run jobs.active 獲取當前還在運行的任務。
測試他是同步仍是異步
結果是異步的~ 那就說明 沒有同步堵塞這一說~
master對於整個過程支持pub和sub的過程,剩下的東西都是客戶端本身玩,只是在最後給他return一個結果罷了~
這裏要感謝沈燦的幫助:
他的saltstack講的比個人要細緻。。。 更加牛逼點~ 推薦你們去瞅瞅
須要說明的是他的網站真jiba慢~
這邊再總結分享下,關於saltstack的教程,及我已經用saltstack作的案例 ,供你們瞅瞅!
運維平臺化saltstack和jinja2模板構建高可用集羣配置平臺
http://rfyiamcool.blog.51cto.com/1030776/1351068
用saltstack cp模塊實現文件管理、拉取和回滾下發
http://rfyiamcool.blog.51cto.com/1030776/1360468
saltsatck基礎入門教程
http://rfyiamcool.blog.51cto.com/1030776/1262537
借用subprocess和gevent、multiprocess解決saltstack超時不許的問題
http://rfyiamcool.blog.51cto.com/1030776/1377429
簡單實現海量數據的管理平臺 [saltstack hadoop]
http://rfyiamcool.blog.51cto.com/1030776/1258561
利用saltstack的api接口和modules實現實時監控
http://rfyiamcool.blog.51cto.com/1030776/1345518
saltstack 關於ssh key
http://rfyiamcool.blog.51cto.com/1030776/1300204
saltstack web ui的配置及簡單的二次開發
http://rfyiamcool.blog.51cto.com/1030776/1275443
saltstack websocket監控開發
http://rfyiamcool.blog.51cto.com/1030776/1269232
用Saltstack的modules和grains實現實時監控平臺
http://rfyiamcool.blog.51cto.com/1030776/1266437
用Saltstack的returners實現批量監控和數據存儲
http://rfyiamcool.blog.51cto.com/1030776/1264438
利用saltstack的salt-ssh進行集羣管理【無客戶端下】
http://rfyiamcool.blog.51cto.com/1030776/1305710
salt-api的接口文檔
http://rfyiamcool.blog.51cto.com/1030776/1362979
你們還想看關於saltstack內容,能夠提需求哈~