經過saltstack實現根據不一樣業務特性進行配置集中化管理,分發文件,採集服務器數據,操做系統基礎及軟件包管理等
第一層爲web交互層,採用django+mysql+bootstarp實現,服務端採用nginx+uwsgi構建的web服務
第二層爲分佈式計算層,採用rpyc分佈式計算框架實現,做爲第一層與第三層的數據交互及實現主控端物理分離,提升總體安全性,同時具有第三層的多機服務的能力
第三層爲集羣主控端服務層,支持saltstack等平臺
管理員向運維平臺所在web服務器發起http請求,運維平臺接收HTTP POST的數據並進行加密,再做爲rpyc客戶端向rpyc服務器發送加密指令串,rpyc服務器端同時也是saltstack的主控端,主控端將接收到的數據經過密鑰key進行解密,解析成運維調用的任務模塊,結合saltstack向目標業務服務器集羣發送執行任務,執行完畢後,將返回的執行結果加解密處理,最後逐級返回給系統管理員,整個任務模塊分發執行流程結束php
rpyc服務器端實現原理:
1.接收rpyc客戶端傳遞過來的消息,經過解密方法還原出模塊ID,操做對象,模塊擴展參數等信息
2.經過exec方法導入相應的功能模塊(要事先編寫完成,不然會提示找不到指定功能模塊),調用功能模塊的相關方法,實現操做任務向業務集羣服務器下發與執行,
3.將任務執行結果串進行格式化,加密後返回給web層python
1.grains組件
做用是蒐集被控主機的基本信息,這些信息一般都是一些靜態類的數據,包括CPU,內核,操做系統,虛擬化等
2.定義grains數據
定義grains數據的方法有兩種,其中一種爲在被控主機定製配置文件,另外一種是經過主控端擴展模塊API實現,區別是模塊更靈活,能夠經過python編程動態定義,而配置文件只適合相對固定的鍵與值。mysql
2.pillar組件
做用是定義與被控主機相關得任何數據,定義好的數據能夠被其餘組件使用,如模板、state、API等。
在pillar中定義的數據與不一樣業務特性的被控主機相關聯,這樣不一樣被控主機只能看到本身匹配的數據,所以pillar安全性很高,適用於一些比較敏感的數據,這也是區別於grains最關鍵的一點,如定義不一樣業務組主機的用戶id,組id,讀寫權限,程序包等信息,定義的規範是採用python字典形式,即鍵/值,最上層的鍵通常爲主機的id或組名稱。nginx
3.state是saltstack最核心的功能
經過預先定製好的sls(salt state file)文件對被控主機進行狀態管理,支持包括程序包(pkg)、文件(file)、網絡配置(network)、系統服務(service)、系統用戶(user)等
state定義是經過sls文件進行描述的,支持YAML語法。web
4.saltstack經常使用模塊及API調用sql
1.archive模塊django
實現系統層面的壓縮包調用編程
client.cmd('*','archive.gunzip',['/tmp/sourcefile.txt.gz'])安全
2.cmd模塊服務器
實現遠程的命令行調用執行(默認具有root操做權限)
client.cmd('*','cmd.run',['free -m'])
3.cp模塊
實現遠程文件、目錄的複製,以及下載URL文件等操做
client.cmd('*','cp.get_file',['salt://path/to/file','/minion/dest'])
4.cron模塊
實現被控主機的crontab操做
client.cmd('*','cron.set_job',['root','*','*','*','*','*','/usr/echo'])
5.dnsutil模塊
實現被控主機通用DNS相關操做
client.cmd('*','dnsutil.host_append',['/etc/hosts','127.0.0.1','ad1.yuk.co'])
6.file模塊
被控主機文件常見操做,包括文件讀寫,權限,查找,檢驗等
client.cmd('*','file.remove',['/tmp/foo'])
7.iptables模塊
被控主機iptables支持
client.cmd('*','iptables.append',['filter','INPUT','rule=\'-p tcp --sport 80 -j ACCEPT\''])
8.network模塊
返回被控主機網絡信息
client.cmd('*','network.ip_addrs')
9.pkg包管理模塊
被控主機程序包管理,如yum,apt-get等
client.cmd('*','pkg.remove',['php'])
10.service服務模塊
被控主機程序包服務管理
client.cmd('*','service.stop',['nginx'])
user(系統用戶模塊)
group(系統組模塊)
partiton(系統分區模塊)
puppet(puppet管理模塊)
system(系統重啓、關機模塊)
timezone(時區管理模塊)
nginx(Nginx管理模塊)
mount(文件系統掛載模塊)