集羣管理系統 Saltstack的資源配置及性能測試

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


214959296.jpg


而後啓動minion客戶端

salt-minion-d


咱們能夠在master 查看下客戶端是否請求認證!

215142391.jpg


確認客戶端的請求能夠用

salt-key -a 65.ruifengyun.com

也能夠所有認證

salt-key -A

認證後 咱們就能夠測試下拉~ 下面的意思是, 執行全部的註冊主機,用run模塊,執行 ip a 這個命令,並返回結果。

215514929.jpg


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 時間,就能夠作超時控制:

220050637.jpg


這裏我們再詳細的說下,如何用salt的targeting匹配打算執行的主機

剛纔我們用的是 salt \*     意思是全部的在線客戶端都要執行。


下面是經過shell通配符的方式匹配

wKiom1Mk79CwemdPAAFQP0l_fic084.jpg


下面是經過grains來匹配主機,grains又是什麼尼?   grains能夠理解爲saltstack客戶端的一些特徵,是saltstack客戶端minion本身在服務器收集的,他能夠獲取ip,mac,系統,內存,cpu。。。。。

 -G 就是匹配grains的意思,  我這裏只是匹配系統爲Centos的主機,用ping模塊,測試他通不通。

wKioL1Mk7m_gDa8hAAD2DQ9_POQ795.jpg


下面是經過正則的方式:  

220226440.jpg


爲了方便起見,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端的操做

222932743.jpg

咱們再到客戶端看看,文件是否同步過來?   有 1 這個文件,說明無問題。。。

223014752.jpg



剛纔我們只是簡單的說了經過grains定位主機,在這裏咱們再詳細的描述下,該如何查看添加刪除grains的信息。

grains.items參數,咱們能夠經過grains 來查看客戶端的基本信息 。


234833543.jpg

grains也是能夠定製的,其實也好簡單~


010853751.jpg

如何添加grains數據,vim   /srv/salt/_grains/r.py   而後按照下面的格式,return grains就好了。寫完了模塊,再用  saltutil.sync_all把數據推下去。

010853648.jpg



這樣就成了~  這個東西咱們能夠用來作定位主機的信息。



saltsatck的模塊是個很重要的東西,咱們如今開始寫模塊:




1  編輯模塊

vim /srv/salt/_modules/nima.py

2  同步

salt \* saltutil.sync_all

3  測試結果


003716786.jpg


我們再執行如下

003838630.jpg


這樣咱們就能夠看到本身定義的模塊執行結果了。。。

我們能夠簡單加個接受的參數就能夠實現:

004447879.jpg

你本身能夠隨意的定義,想執行linux命令的話,你能夠調用os subprocess的模塊

005029113.jpg

你們看,這個是否是和cmd.run是一個效果的~,最起碼看起來是那樣的~


有時候你們會發現salt的執行速度有點慢,這樣的問題有多是你認證的主機大量的down機或者是不存在,網絡有問題啥的,反正就是不穩定的因素

這個時候 我們能夠把那主機給踢出出去。

011327372.jpg

原文: 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

wKioL1Mk9eeSRdDYAAQZfTEtmXw920.jpg


經過salt-run jobs.active 獲取當前還在運行的任務。

wKiom1Mk91XAMN0JAAGGRZfYt2I678.jpg


測試他是同步仍是異步

結果是異步的~  那就說明 沒有同步堵塞這一說~

master對於整個過程支持pub和sub的過程,剩下的東西都是客戶端本身玩,只是在最後給他return一個結果罷了~


011904947.jpg


這裏要感謝沈燦的幫助:

他的saltstack講的比個人要細緻。。。 更加牛逼點~  推薦你們去瞅瞅

http://www.shencan.net/



須要說明的是他的網站真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內容,能夠提需求哈~

相關文章
相關標籤/搜索