一、 saltstack是使用python語言開發的;
二、 輕量級的管理工具,批量執行命令;
三、經常使用模塊:pkg(包)、file(文件)、cmd(執行命令或腳本)、user、 service、cron
四、saltstack數據系統
Grains (靜態數據)
pillar (動態數據)node
saltstack三大功能,遠程執行,配置管理,雲管理 SaltStack是一個服務器基礎架構集中化管理平臺,具有配置管理、遠程執行、監控等功能,基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia二、python-msgpack和PyYAML等)構建。 經過部署SaltStack,咱們能夠在成千萬臺服務器上作到批量執行命令,根據不一樣業務進行配置集中化管理、分發文件、採集服務器數據、操做系統基礎及軟件包管理等,SaltStack是運維人員提升工做效率、規範業務配置與操做的利器。
SaltStack 採用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間經過ZeroMQ消息隊列通訊 minion上線後先與master端聯繫,把本身的pub key發過去,這時master端經過salt-key -L命令就會看到minion的key,接受該minion-key後,也就是master與minion已經互信 master能夠發送任何指令讓minion執行了,salt有不少可執行模塊,好比說cmd模塊,在安裝minion的時候已經自帶了,它們一般位於你的python庫中,locate salt | grep /usr/能夠看到salt自帶的全部東西。 這些模塊是python寫成的文件,裏面會有好多函數,如cmd.run,當咱們執行salt '*' cmd.run 'uptime'的時候,master下發任務匹配到的minion上去,minion執行模塊函數,並返回結果。master監聽4505和4506端口,4505對應的是ZMQ的PUB system,用來發送消息,4506對應的是REP system是來接受消息的。
Salt stack的Master與Minion之間經過ZeroMq進行消息傳遞,使用了ZeroMq的發佈-訂閱模式,鏈接方式包括tcp,ipc salt命令,將cmd.run ls命令從salt.client.LocalClient.cmd_cli發佈到master,獲取一個Jodid,根據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執行結果,將結果輸出到終端。
首先,他速度快,基於消息隊列+線程,跑完多臺設備,都是毫秒級別的
其次,很是靈活,源碼是python,方便理解和自定義模塊(python 語言相對於其餘的perl、ruby等仍是很好理解的)
命令簡單,功能強大python
saltstack幾個重要的組件
grainsgrains 是在 minion(客戶端)啓動時收集到的一些信息,好比操做系統類型、網卡ip等靜態信息。
grains的信息並非動態的,並不會時時變動,它只是在 minion 啓動時收集到的webpillarpillar 和 grains 不同,是在 master 上定義的,而且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)能夠存在 pillar 裏,還能夠定義變量等。apache
State
他是saltstack的最核心功能,經過預先指定好的sls文件對被控主機進行管理:包/文件/網絡配置/系統服務/系統用戶等。vim
實驗環境:
master:192.168.136.167
web01:192.168.136.168
web02:192.168.136.185ruby
#添加主機名,三臺機器都要添加,而且主機要改爲相應的名稱 [root@master ~]# vim /etc/hosts 192.168.136.167 master.saltstack.com 192.168.136.168 web01.saltstack.com 192.168.136.185 web02.saltstack.com #每臺都須要關閉防火牆 [root@master ~]# vim /etc/hostname master.saltstack.com [root@web01 ~]# vim /etc/hostname web01.saltstack.com [root@web02 ~]# vim /etc/hostname web02.saltstack.com #安裝epel源(三臺都要裝) [root@master ~]# yum install -y epel-release [root@master ~]# yum -y install salt-master [root@master ~]# vim /etc/salt/master 15行 interface: 192.168.175.132 //監聽地址 215行 auto_accept: True //避免要運行salt-key來確認證書認證 416行 file_roots: base: - /srv/salt //saltstack文件根目錄位置,目錄須要建立 710行組分類: nodegroups: group1: 'web01.saltstack.com' group2: 'web02.saltstack.com' 552行 pillar_opts: True //開啓pillar功能,同步文件功能 529行 pillar_roots: base: - /srv/pillar //pillar的主目錄,須要建立 建立salt與pillar文件根目錄: mkdir /srv/salt mkdir /srv/pillar 啓動服務器: systemctl start salt-master systemctl enable salt-master netstat -anpt | egrep '4505|4506' 建立salt與pillar文件根目錄: mkdir /srv/salt mkdir /srv/pillar
在兩臺上分別配置: yum -y install salt-minion vi /etc/salt/minion 修改配置以下: 16行 master: 192.168.175.132 //指定主控端IP 78行 id: web01.saltstack.com //指定被控端主機名 啓動被控端服務 systemctl start salt-minion 在主控端測試與被控端的通訊狀態! salt '*' test.ping web01.saltstack.com: True web02.saltstack.com: True salt '*' cmd.run 'df -h' //遠程執行命令 salt-key //查看在 master 上已經被接受過的客戶端 查看被控主機上grains全部值:(每次minion在啓動是都會獲取客戶端信息) salt 'web01.saltstack.com' grains.items (靜態數據) salt 'web01.saltstack.com' pillar.items (動態數據) 配置管理安裝Apache 下面進行的演示是遠程經過 yum 方式安裝 Apache。步驟以下: 修改配置文件 vi /etc/salt/master // 打開以下內容的註釋 file_roots: base: - /srv/salt/ 注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)。 mkdir /srv/salt vi /srv/salt/top.sls base: '*': - apache 注意:'*',則表示在全部的客戶端執行 apache 模塊。 vi /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 表示開機啓動。 重啓服務 #systemctl restart salt-master 執行命令 #salt '*' state.highstate