您好,登錄后才能下訂單哦!
小編給大家分享一下 OpenStack heat HA的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
記得還在去年的時候,大家討論OpenStack總離不了這樣的一個問題:“OpenStack為什么不支持虛擬機的HA?”
當時也很奇怪,對于HA這樣一個很基本的可靠性特性有缺失,又怎么在實際場景中使用OpenStack呢?
當時社區討論的結果是:“由OpenStack上層組件實現HA,OpenStack核心模塊僅提供基本的操作。”
那么這個所謂的上層組件指的是誰呢?就是Heat。如今Heat已經是OpenStack的核心模塊,也就是說OpenStack已經具備的HA的能力。
以前我們總是說虛擬機HA,似乎所有的功能都是圍繞著虛擬機設計,已虛擬機為核心。但是從Heat的文檔里來看,Heat認為虛擬機之上的服務(Service)才是最終要的,對于Heat HA的設計,也擴展到了服務的層面,可以實現三個層次的HA:
service
instance
stack
例如:當虛擬機上的數據庫進程down了,首先通過重啟數據庫進程嘗試解決,如果解決不了,重啟或者重建虛擬機,如果還是解決不了,重建整個stack。從這一點上來看Heat HA的功能要比單純的虛擬機HA的功能強大很多。
Heat的HA特性是OpenStack多模塊配合實現的,其中涉及到Nova,Ceilometer,Heat-cfn-api,Heat-cloudwatch,Heat-cfntools等。
Heat-cfntools包括了一些和Heat配合使用的小工具,它們運行在虛擬機內部,在制作虛擬機鏡像的時候,需要將cfntools打包到鏡像當中,Heat的開發者文檔中,介紹了將cfntools打包進鏡像中的方法。這里
Heat的HA功能就是用到了cfn-push-stats
對虛擬機或者服務的狀態進行上報。
cfn-init -> 配置虛擬機,簡化user_data腳本
cfn-hub -> 定期檢測instance metadata是否有變化,根據變化觸發用戶定義的hooks
cfn-signal -> 發送執行命令成功或失敗的信號
cfn-push-stats -> 上報服務或虛擬機狀態
cfn-get-metadata -> 獲取instance metadata
有興趣的同學可以直接git clone一份cfn-tools的代碼看看。
https://github.com/openstack/heat-cfntools.git
我們從Heat的HA模板入手,來分析一下怎么通過配置模板實現Heat的HA。
以github上的Heat模板WordPress_Single_Instance_With_IHA.template為例。
..."WebServerRestartPolicy" : { "Type" : "OS::Heat::HARestarter", "Properties" : {"InstanceId" : { "Ref" : "WikiDatabase" } }},"HeartbeatFailureAlarm": { "Type": "AWS::CloudWatch::Alarm", "DependsOn" : "WaitCondition", "Properties": {"AlarmDescription": "Restart the WikiDatabase if we miss a heartbeat","MetricName": "Heartbeat","Namespace": "system/linux","Statistic": "SampleCount","Period": "60","EvaluationPeriods": "1","Threshold": "1","AlarmActions": [ { "Ref": "WebServerRestartPolicy" } ],"ComparisonOperator": "LessThanThreshold" }},"WikiDatabase": { "Type": "AWS::EC2::Instance", "Metadata" : {..."/tmp/cfn-hup-crontab.txt" : {"content" : { "Fn::Join" : ["", ["MAIL=\"\"\n","\n","* * * * * /opt/aws/bin/cfn-hup -f\n","* * * * * /opt/aws/bin/cfn-push-stats "," --watch ", { "Ref" : "HeartbeatFailureAlarm" }," --heartbeat\n"]]},"mode" : "000600","owner" : "root","group" : "root"},
我們先來看/tmp/cfn-hup-crontab.txt
,其實就是一個crontab的配置文件,在boot instance WikiDatabase 的時候,因為配置了UserData,所以UserData腳本執行的時候會調用cfn-init命令,cfn-init的作用就是根據AWS::CloudFormation::Init
段的配置,生成文件,安裝軟件,執行腳本等等,在UserData腳本的最后cfn-hup的crontab被啟用。
cfn-push-stats會每分鐘向heat-api-cloudwatch發送一個watch為HeartbeatFailureAlarm類型的心跳請求。HeartbeatFailureAlarm其實是一個Ceilometer的Alarm。
根據HeartbeatFailureAlarm的配置,如果60秒沒有收到instance WikiDatabase的心跳請求,就會觸發AlarmActionsOS::Heat::HARestarter
,根據Heat對于資源OS::Heat::HARestarter的定義,Heat會刪除原先的虛擬機WikiDatabase,然后重新創建一個虛擬機。
對于服務的監控大家可以參考另一個Heat模板WordPress_Single_Instance_With_HA.template
看完了這篇文章,相信你對“ OpenStack heat HA的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。