1、概述python
1.1 Saltstack簡介linux
SaltStack是一個服務器基礎架構集中化管理平臺,具有配置管理、遠程執行、監控等功能,通常能夠理解爲簡化版的puppet和增強版的func。SaltStack基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia二、python-msgpack和PyYAML等)構建。經過部署SaltStack環境,咱們能夠在成千上萬臺服務器上作到批量執行命令,根據不一樣業務特性進行配置集中化管理、分發文件、採集服務器數據、操做系統基礎及軟件包管理等,SaltStack是運維人員提升工做效率、規範業務配置與操做的利器。安全
1.2 特色bash
簡單服務器
兼顧大規模部署與更小的系統的同時提供多功能性是很困難的,Salt是很是簡單配置和維護,無論項目的大小。Salt能夠勝任管理任意的數量的服務器,不論是本地網絡,仍是跨數據中心。架構採用C/S模式,在一個後臺程序中集成必要功能。默認不須要複雜的配置就能夠工做,同時能夠定製用於特殊的需求。網絡
並行執行架構
Salt的核心功能:app
經過並行方式讓遠端節點執行命令運維
採用安全的加密/解析協議ide
最小化使用網絡和負載
提供簡單的程序接口
Salt引入了更細粒度的控制,容許不經過目標名字,二是經過系統屬性分類
構建在成熟技術之上
Salt採用了不少技術和技巧。網絡層採用優秀的ZeroMQ庫,因此守護進程裏面包含AMQ代理。Salt採用公鑰和主控通信,同時使用更快的AES加密通訊,驗證和加密都已經集成在Salt裏面。Salt使用msgpack通信,因此更快速和更輕量網絡交換。
Python 客戶端接口
爲了實現簡單的擴展,Salt執行例程能夠寫成簡單的Python模塊。客戶端程序收集的數據能夠發送回主控端,能夠是其餘任意程序。能夠經過Python API調用Salt程序,或者命令行,所以,Salt能夠用來執行一次性命令,或者大型應用程序中的一部分模塊。
快速,靈活,可擴展
結果是一個系統能夠高速在一臺或者一組服務器執行命令。Salt速度很快,配置簡單,擴展性好,提供了一個遠程執行架構,能夠管理多樣化需求的任何數量的服務器。整合了世界上最好的遠程執行方法,加強處理能力,擴展使用範圍,使得能夠適用任何多樣化複雜的網絡。
開源
Salt基於Apache 2.0 licence開發,能夠用於開源或者自有項目。請反饋你的擴展給項目組,以便更多人受益,共同促進Salt發展。請在你的系統部署 系統,讓運維更便捷。
1.3 架構
saltstack是基於C/S服務模式,在該架構中,服務器端叫作Master,客戶端叫作Minion。傳統的C/S模式咱們這樣理解,客戶端發送請求給服務器端,服務器端接受到來自客戶端的請求並處理完成後再返回客戶端。 在saltstack架構中,不只有傳統的C/S服務模式,並且有消息隊列中的發佈與訂閱(pub/sub)服務模式。目前咱們通常用其C/S架構作批量管理。
1) Master:控制中心,salt命令運行和資源狀態管理
2) Minion : 須要管理的客戶端機器,會主動去鏈接Mater端,並從Master端獲得資源狀態
3) 信息,同步資源管理信息
4) States:配置管理的指令集
5) Modules:在命令行中和配置文件中使用的指令模塊,能夠在命令行中運行
6) Grains:minion端的變量,靜態的
7) Pillar:minion端的變量,動態的比較私密的變量,能夠經過配置文件實現同步minions定義
8) highstate:爲minion端下發永久添加狀態,從sls配置文件讀取.即同步狀態配置
9) salt_schedule:會自動保持客戶端配置
1.4 鏈接方式
Master與Minion認證
(1)、minion在第一次啓動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion裏面設置)下自動生成minion.pem(private key)和 minion.pub(public key),而後將 minion.pub發送給master。
(2)、master在接收到minion的public key後,經過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,而後master就能對minion發送指令了。
SaltStack master啓動後默認監聽4505和4506兩個端口。4505(publish_port)爲saltstack的消息發佈系統,4506(ret_port)爲saltstack客戶端與服務端通訊的端口。若是使用lsof 查看4505端口,會發現全部的minion在4505端口持續保持在ESTABLISHED狀態
2、安裝部署
主機名 |
IP地址 |
系統 |
saltstack-server |
172.20.4.50 |
CentOS release 6.9 (Final) |
saltstack-1 | 172.20.4.51 | CentOS release 6.9 (Final) |
saltstack-2 | 172.20.4.52 | CentOS release 6.9 (Final) |
2.1 初始化環境:
yum install ntpdate -y && ntpdate time1.aliyun.com #同步時間 service iptables stop #關閉iptables sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config #關閉selinux setenforce 0
cat > saltstack.repo <<EOF [saltstack-repo] name=SaltStack repo for RHEL/CentOS $releasever baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest enabled=1 gpgcheck=1 gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub EOF rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub yum cleanall && yum makecache #更新yum源
2.2 master 端安裝
yum -y install salt-master mkdir /etc/salt/states
編輯/etc/salt/states interface: 0.0.0.0 state_top: top.sls file_roots: base: - /etc/salt/states
啓動服務,並設置開機自啓
/etc/init.d/salt-master start chkconfig salt-master on
2.3 monitor端安裝
配置yum源和master方法一致
yum -y install salt-minion
修改/etc/salt/minion文件(slatstack-1/2 都更改爲對應的id,master指向master的ip地址)
啓動客戶端,並設置開機自啓動
2.4 證書管理
#執行salt-key -L 查看祕鑰驗證 #執行Salt-key -a 加ID添加認證祕鑰
3、驗證測試
4、常見模塊
(1)、cp模塊(實現遠程文件、目錄的複製,以及下載URL文件等操做)
將主服務器file_roots指定位置下的目錄複製到被控主機
salt "*" cp.get_dir salt://testdir /tmp/test
將主服務器file_roots指定位置下的文件複製到被控主機
salt "*" cp.get_file salt://testdir/testfile /tmp/testfile
下載指定URL內容到被控主機指定位置
salt "*" cp.get_url http://mirrors.163.com/.help/CentOS6-Base-163.repo /etc/yum.repos.d/CentOS6-Base-163.repo
(2)、cmd模塊(實現遠程的命令行調用執行)
salt "*" cmd.run 'netstat -lntup'
(3)、cron模塊(實現被控主機的crontab操做)
爲指定的被控主機、root用戶添加crontab信息
salt "*" cron.set_job root '*/5' '*' '*' '*' '*' '/usr/sbin/ntpdate time1.aliyun.com'
刪除指定的被控主機、root用戶的crontab信息
salt "*" cron.rm_job root '/usr/sbin/ntpdate time1.aliyun.com'
查看定時任務
salt '*' cron.raw_cron root
(4)、dnsutil模塊(實現被控主機通用DNS操做)
爲被控主機添加指定的hosts主機配置項
salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 test.saltstack.com
(5)、file模塊(被控主機文件常見操做,包括文件讀寫、權限、查找、校驗等)
salt '*' file.get_sum /etc/resolv.conf md5 salt '*' file.stats /etc/resolv.conf
(6)、network模塊(返回被控主機網絡信息)
salt '*' network.ip_addrs salt '*' network.interfaces
(7)、pkg包管理模塊(被控主機程序包管理,如yum、apt-get等)
salt '*' pkg.install sysstat salt '*' pkg.file_list sysstat
(8)、service 服務模塊(被控主機程序包服務管理)
salt '*' service.enable crond salt '*' service.disable crond salt '*' service.status crond salt '*' service.stop crond salt '*' service.start crond salt '*' service.restart crond salt '*' service.reload crond