<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 一個通用應用運維管控平臺的設計實現(xiàn)

          一個通用應用運維管控平臺的設計實現(xiàn)

          作者: 時間:2018-07-24 來源:網(wǎng)絡 收藏

          在使用SSH方式情況下并發(fā)的速度會較差,可能控制在單機30-50個任務同時進行。

          本文引用地址:http://www.ex-cimer.com/article/201807/383696.htm

          在使用Agent的方式情況下,任務本身是異步下發(fā)的,可以同時1000+任務同時進行。

          由于服務器數(shù)量較多,且分機房的模式,整個后端架構會是與目前的UCloud后端架構類似的分布式架構,一個中心任務下發(fā)節(jié)點,每個機房一個任務中轉(zhuǎn)節(jié)點,每臺服務器一個Agent(或者中轉(zhuǎn)節(jié)點SSH的方式)。

          4. 定制任務:

          所謂的定制任務,就是可以通過任務組裝的方式,將腳本執(zhí)行和文件分發(fā)這兩個主要功能(可以根據(jù)需要添加其他的功能,比如重啟后的服務器ping探測,端口探測等),將上面的這些功能,按照1、2、3、4、5的方式組裝,具體的支持功能如下:

          1) 支持使用基礎功能模塊的子任務組裝成完成任務

          2) 支持設置每個子任務的子步驟的執(zhí)行控制。比如失敗后停止,完成后停止等待確認,忽略失敗等功能。

          3) 支持每個子任務的執(zhí)行服務器ip修改。

          定制任務適用于某些使用頻次較高的任務,比如服務器初始化上線,代碼版本發(fā)布,軟件包更新等操作。

          5. 定時任務:

          定時任務是對普通的基礎任務以及定制任務定時執(zhí)行的功能,該功能的也相對簡單,即按照crontab的分時日月周的語法,支持周期性或者定時性,也可以按照手機創(chuàng)建鬧鈴的方式選擇觸發(fā)時間和觸發(fā)頻率。

          具體的實現(xiàn)方式如下:

          1)用戶輸入的時間計劃通過轉(zhuǎn)換后寫到管理機的crontab服務中。

          2)每次有定時任務產(chǎn)生或刪除或修改后生成新的計劃任務。

          3)計劃任務中寫明具體的執(zhí)行命令

          4)通過腳本調(diào)度API的方式實現(xiàn)任務的定時執(zhí)行。

          6. 灰度計劃:

          對于非周期性重復執(zhí)行的任務,都可以加入灰度計劃功能,該功能又結合定時任務實現(xiàn)。

          灰度計劃可以有兩個維度體現(xiàn):

          1)定制任務中的每個子任務的子步驟都可以實現(xiàn)灰度,即上面所說的完成后暫停,或失敗后暫停。

          2)物理機個數(shù)維度,并發(fā)執(zhí)行的時候支持自定義灰度計劃,比如:任務先執(zhí)行1臺服務器,成功后隔多久后可以執(zhí)行第二批服務器,再間隔一段時間再執(zhí)行第三批任務。同時可以設置任務失敗條件,比如:任何一臺服務器失敗,則整個任務失敗;或當失敗服務器的數(shù)量達到灰度計劃服務器數(shù)量的百分比后整個任務放棄執(zhí)行。

          上面這些是作業(yè)管理系統(tǒng)的主要功能,當然想要實現(xiàn)整個作業(yè)管理系統(tǒng)還會有一些其他的子功能,比如:

          1)任務結果記錄跟蹤系統(tǒng)。

          2)任務重做,重做任務子步驟是否重做控制。

          3)腳本內(nèi)容安全審核功能。

          4)其他暫時未想到功能。

          3.3 配置管理

          配置管理功能是整個管控功能中十分重要的一環(huán),上面的作業(yè)管理系統(tǒng)中很多功能都依賴配置管理系統(tǒng)才能實現(xiàn)。

          配置管理整個功能經(jīng)過梳理之后如下圖所示:

          下面將依次介紹上面所述的功能:

          1)賬戶管理:

          所謂的賬戶管理十分簡單,就是服務運行的時候所使用的用戶,目前線上的服務大多都是root用戶,但是有改成業(yè)務用戶的趨勢,故需要有一個賬戶管理功能。運維人員在使用作業(yè)管理的時候,選擇相應的用戶進行任務執(zhí)行。

          該功能可以發(fā)展成用戶權限管理系統(tǒng),即在該系統(tǒng)中控制每一個用戶的系統(tǒng)權限。生成相應的權限配置文件,并下發(fā)到所有服務器上。不過用戶管理的功能可能系統(tǒng)運維已經(jīng)管理,這里就不再敘述了。

          2) 文件管理:

          文件管理功能比較基礎,其實主要是對管理機上的重要文件進行管理,比如代碼版本,腳本文件,軟件包文件等等,文件類型包括:普通文件,文件夾,壓縮文件和模板文件。

          文件管理中,用戶按照一定的規(guī)范將所需要的文件放到管理機上的指定位置,并將相應的路徑配置在數(shù)據(jù)庫中。

          文件管理主要用在作業(yè)管理中進行文件分發(fā)的基礎文件依賴。

          3)腳本管理:

          腳本管理也是文件管理中的一種,但需要單獨管理,腳本是作業(yè)管理系統(tǒng)的基礎依賴。腳本分為基礎系統(tǒng)腳本和用戶自定義腳本兩種。

          所謂的基礎系統(tǒng)腳本就是經(jīng)過嚴格認證過的,可以重復多次使用的基礎功能腳本。而用戶自定義腳本指用戶通過上傳或是通過web 編輯器提交的腳本文件,存儲下來用戶后續(xù)可能的重復使用。

          基礎系統(tǒng)腳本和用戶自定義腳本都會存儲在管理機的固定位置上,在文件管理中進行管理,用戶在使用的時候選擇對應的腳本名稱即可。

          腳本也支持添加標簽,方便記憶和查找。

          4)分組管理:

          分組管理也是基礎功能之一,在作業(yè)系統(tǒng)中腳本執(zhí)行和文件分發(fā)都需要有明確的服務器ip地址,而分組管理就是將這些ip地址按照特定的用戶自定義的方式來命名和分類,支持添加標簽,用戶在選擇服務器的時候可以通過搜索的方式選擇到一組服務器中的一個或幾個。

          分組管理依賴于資源管理系統(tǒng),以資源管理系統(tǒng)的物理機資源(管理服務是虛擬機資源)為依據(jù),用戶選擇一部分服務器并進行命名或添加標簽從而得到一個新的分組。

          分組可以分為靜態(tài)分組和動態(tài)分組兩種。

          所謂的靜態(tài)分組指的是確定完分組后,如需變化必須手動添加或修改的分組。這類分組會占很大一部分。

          而動態(tài)分組指的是可以通過對服務器資源的某種匹配而自動將其添加到某個分組中的功能,比如說某個機房新上線N臺服務器,可以不需要手動,而自動的添加到某個組中。這種功能可以通過手動來實現(xiàn),在技術和時間限制的情況下,可以暫時不考慮。

          分組功能還有組優(yōu)先級的概念,主要是結合變量管理、模板管理結合使用,這些在變量管理和模板管理里面再進行介紹。

          5)變量管理:

          變量管理主要是配合分組管理和模板管理使用,所謂的模板就是在不同的情況層顯不同內(nèi)容的文件,而如何呈現(xiàn)不同內(nèi)容就是在模板中配置了相關的變量名稱,而變量的具體賦值則需要在變量管理里面體現(xiàn)。

          變量管理建議使用yml語法格式來編寫,比如如下的格式:

          region: id: 7001 name: js mongodb: hosts: - 172.27.117.201 - 172.27.117.202 - 172.27.117.203 port: 27017



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();