在生產環境中,服務器每每不止一兩臺,通常都是成千上萬臺服務器。這對運維人員來講管理難度太大了,而saltstack是一個新的基礎平臺管理工具,能夠支持管理上萬臺服務器規模,數秒鐘便可完成數據傳遞,是如今用的比較多的自動化運維工具之一。 Salt是一個基礎平臺管理工具。SaltStack採用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間經過ZeroMQ消息隊列通訊。master監聽4505和4506端口,4505爲master和minion認證通訊端口,4506爲master用來發送命令或者接收minion的命令執行返回信息。
一、基於python語言開發的node
二、輕量級管理工具,批量執行命令python
三、經常使用模板linux
名稱 | 含義 |
---|---|
pkg | 包,有增刪更新 |
file | 用於管理文件,包括同步文件、設置文件權限和所屬用戶組、刪除文件等操做 |
cmd | 在minion上執行命令或者腳本 |
use | 管理系統帳戶操做 |
service | 管理系統服務操做 |
cron | 管理crontab任務 |
四、saltstack數據系統web
Grains(靜態數據)shell
遠程執行apache
配置管理vim
SaltStack客戶端(Minion)在啓動時,會自動生成一套密鑰,包含私鑰和公鑰。以後將公鑰發送給服務器端,服務器端驗證並接受公鑰,以此來創建可靠且加密的通訊鏈接。同時經過消息隊列ZeroMQ在客戶端與服務端之間創建消息發佈鏈接。
Minion是SaltStack須要管理的客戶端安裝組件,會主動去鏈接 Master端,並從Master端獲得資源狀態信息,同步資源管理信息。ruby
Master做爲控制中心運行在主機服務器上,負責Salt命令運行和資源狀態的管理,Master上執行某條指令經過隊列下發到各個Minions去執行,並返回結果。bash
速度快,基於消息隊列+線程,跑完多臺設備,都是毫秒級別的;很是靈活,源碼是python,方便理解和自定義模塊(由於python相對於其餘的perl、ruby等仍是很好理解的) 命令簡單,功能強大。
部署minion端較爲不便。
grains是在minion(客戶端)啓動時收集到的一些信息,好比操做系統類型、網卡ip等靜態信息。 grains 的信息並非動態的,並不會時時變動,它只是在 minion 啓動時收集到的。
pillar和grains不同,是在master上定義的,而且是針對minion定義的一些信息。像一些比較重要的數據(密碼)能夠存在pillar裏,還能夠定義變量等。
state是saltstack的最核心的功能,經過預先指定好的sls文件對 被控主機進行管理(包括:包、網絡配置、系統服務、系統用戶等)
salt 'client2' cp.get_file salt:#apache.sls /tmp/cp.txt
salt 'client2' cp.get_dir salt:#test /tmp
salt-run manage.up
#編輯腳本 vim /srv/salt/test/shell.sh #! /bin/sh echo "salt server do run shell script on client" > /tmp/shell.txt #執行腳本 salt 'client2' cmd.script salt:#test/shell.sh
準備三臺機器,這三臺機器都關閉selinux,清空防火牆規則。
服務器角色 | IP地址 | 主機名稱 |
---|---|---|
master | 192.168.142.123 | master.saltstack.com |
minion01 | 192.168.142.124 | web01.saltstack.com |
minion02 | 192.168.142.166 | web02.saltstack.com |
#分別爲三臺機器添加epel源,本地有官方源 yum install -y epel-release #安裝epel源 #服務器安裝 yum -y install salt-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的主目錄,須要建立 cat /etc/salt/master | grep -v ^$ | grep -v ^# #查看對主配置文件作的更改
#開啓服務 systemctl start salt-master #設定服務開機自啓 systemctl enable salt-master #查看服務端口監聽狀態 netstat -anpt | egrep '4505|4506'
mkdir /srv/salt mkdir /srv/pillar
#在兩臺服務器上分別安裝 yum -y install salt-minion
#修改/etc/salt/minino主配置文件 vim /etc/salt/minion #修改配置以下 #16行 master: 192.168.175.132 #指定主控端IP #78行 id: web01.saltstack.com #指定被控端主機名 啓動被控端服務 systemctl start salt-minion
#查看通訊狀態 salt '*' test.ping #查看全部被管理端的掛載狀態 salt '*' cmd.run 'df -h' #查看在 master 上已經被接受過的客戶端 salt-key #查看被控主機上grains全部值(每次minion在啓動是都會獲取客戶端信息) #靜態數據 salt 'web01.saltstack.com' grains.items #動態數據 salt 'web01.saltstack.com' pillar.items
#修改主配置文件 vim /etc/salt/master file_roots: base: - /srv/salt/ #注意:環境:base、dev(開發環境)、test(測試環境)、prod(生產環境)。 #建立工做目錄 mkdir /srv/salt vim /srv/salt/top.sls base: '*': - apache #注意:'*',則表示在全部的客戶端執行apache模塊。 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表示開機啓動。 #重啓服務 systemctl restart salt-master #執行刷新state配置命令 salt '*' state.highstate
#查看服務端口監聽狀態 netstst -ntap | grep 80 #查看生成的配置文件 rpm -qc httpd