題:
正常運行時間較長的服務如何在不重啟的情況下應用補丁?
secureninja
2018-10-24 11:24:40 UTC
view on stackexchange narkive permalink

如何在無法重新啟動但需要重新啟動的系統上安裝關鍵安全更新。例如,需要零停機時間運行24x7的服務/業務,例如Amazon.com或Google。

是什麼讓您認為Google無法負擔重啟服務器的費用?您不必一次全部重啟它們。
如今,任何高於95%的硬件可用性正常運行時間都被認為是昂貴且過時的。大多數Web服務只是簡單地將其服務分佈在群集中,以實現接近100%的可用性,這比操作系統和硬件同類產品的成本要低。
@DmitryGrigoryev正確,不需要全部重新啟動,這是這裡問題的核心。冗餘系統是用於高可用性或“零停機”(從OP竊取描述)系統的常用方法。
_Redundancy_和_load balance_是此處的關鍵概念
如果您對Google如何進行可靠性工程特別感興趣,建議您閱讀https://landing.google.com/sre/books/(免費)。儘管其中很多內容涉及站點可靠性工程工作中的概念和文化組成部分,但其中也有相當多的技術信息。
考慮到他們的每個硬盤都會在十年左右的時間內失效,因此大型廠商應該*始終*切換有缺陷的磁盤。對於其他硬件組件也是如此。因此,從這一方面來說,很明顯,大量冗餘起著重要作用。
可用性=冗餘。根據您的使用情況,您可能擁有冗餘的光盤,冗餘的電源線,冗餘的冷卻,冷備件,熱備件和/或應急小組,以防您的第一小組因大規模的物理攻擊而喪命(例如飛機飛入您的建築物))。
谷歌和亞馬遜也發布金絲雀版本-他們首先在不太重要的市場(亞洲)中發布更新,以證明沒有錯誤,並且在一段時間(24小時)後,它們將發佈到其他市場。次要市場在其金礦中有效地充當了金絲雀
五 答案:
forest
2018-10-24 11:31:16 UTC
view on stackexchange narkive permalink

在不同的操作系統中,有許多實用程序可以對運行中的代碼進行熱修補。 Linux的 kpatch livepatch功能就是一個示例,這些功能允許修補正在運行的內核而不會中斷其運行。它的功能是有限的,只能對內核進行微不足道的更改,但這通常足以緩解許多關鍵的安全問題,直到找到時間進行適當的修復為止。這種技術通常稱為動態軟件更新

我應該指出,儘管這些站點實際上沒有停機時間(高可用性)因為實時補丁,所以不是那麼可靠,而是因為冗餘。每當一個系統出現故障時,就會有許多備份可以立即開始路由流量或立即處理請求。有很多不同的技術可以完成此任務。冗餘級別提供了顯著的正常運行時間,以 nines為單位。三點九的正常運行時間為99.9%。四個9的正常運行時間是99.99%,依此類推。“聖杯”是五個9正常運行時間,即99.999%的正常運行時間。您列出的許多服務由於其遍布全球的冗餘備份系統而具有五個九的可用性。

一旦擁有所有高可用性基礎架構,實際上最好避免實時修補。實時修補會危害您的可靠性。** 1。**該錯誤可能已經導致內存中的數據結構出現問題,儘管您已應用實時補丁,但由於先前引入的問題仍然受到影響。** 2。**應用實時補丁和引導實際補丁內核之間可能會有細微的差別,導致您的應用程序只能在前者上運行。下次重新啟動時,您會遇到一個錯誤,到那時,這些錯誤將很難緩解。
@kasperd另外,** 3。**實時修補受到更多限制,需要仔細考慮和測試,並在運行時添加其他間接功能。為什麼麻煩您一次一個地重新引導系統?無論如何,您可能已經在定期執行哪些操作了,因為當您擁有這樣的群集時,為什麼不呢?
為了完整起見,在答案中可能值得一提的是,“五個九”或99.999%的可用性對應於每年僅超過5分鐘15秒的停機時間。六個九(99.9999%)每年的停機時間不到32秒。
是否存在5位數可用性的站點?每11年僅停機一小時。
@BlueRaja-DannyPflughoeft有很多為此奮鬥的服務,儘管我不知道它們的實際百分比是多少。您認為Amazon EC2的可用性是什麼?甚至只是Stack Exchange?
在過去的幾年中,@immibis: Stack Exchange經歷了一個多小時的停機時間,因此絕對沒有99.999%
@BlueRaja-DannyPflughoeft但是似乎仍然可以管理至少3.5個,甚至可能是4個9,不難想像一些更重要的方法,背後有更多的資源,甚至更可靠。
-1
@pipe您是在暗示政府網站很重要嗎?商業網站更加關注可靠性,因為如果網站宕機,用戶可以切換到競爭對手。政府網站的競爭不同,如果用戶停止使用他們的網站,他們也不會因此損失任何利潤。這可能意味著您作為用戶認為這些網站更為重要。但這同時意味著政府沒有動力將可靠性放在首位。
@kasperd這是一個很好的觀點。我想我從未見過Google的首頁在20年的使用中曾一度下滑。
@pipe在2009年發生了一起事件,該錯誤導致Google搜索將每個單獨的搜索結果列為一個小時的有害信息。我認為這是Google搜索十多年來最大的一次停機。
等到您必須與銀行系統進行交互,然後有人試圖要求6個9。大約一年31秒。
男孩有時對政府網站可能做的事情有一個非常籠統的觀點(有些天真)。人們會立即認為DMV信息就是范圍,因為這就是他們所交互的全部嗎?考慮到可能存在影響軍事準備,恐怖主義協調,能源網格穩定等的站點。大多數民用站點癱瘓時,您唯一失去的就是金錢。
@pipe出於某種原因,“轉到google.com”基本上是技術支持檢查互聯網是否連接的標準方法。
-1
我不確定服務器場中的多台服務器是否應被稱為冗餘與“負載共享”,是否有足夠的餘量來處理因更新或問題而關閉的某些服務器。
@rcgldr Google運行大量不同的服務。詢問他們是否發生故障或詢問google.com/search是否發生故障有很大的不同。中斷的範圍也可能從影響到世界各地的少量用戶開始。因此,當您詢問Google最近是否發生過服務中斷時,您會想到哪項服務?
@kasperd-我認為是Google和/或youtube停電了,大約在2018年10月16日。
@rcgldr是的,我聽說那段時間YouTube中斷了。我自己沒注意到。但是@pipe發表的聲明是關於Google首頁的,而不是關於每一項Google服務的。
谷歌甚至沒有為他們的某些服務獲得5個9。這個月,Youtube停了幾個小時。
@Qwertie在過去十年中有幾小時?
mcgyver5
2018-10-24 13:22:59 UTC
view on stackexchange narkive permalink

我在一次Netflix員工的安全會議上觀看了一次演講。他們根本不打補丁。相反,當需要修補程序時,它們會立足新實例,然後吹走未修補的實例。他們幾乎一直在這樣做。他們稱其為紅黑部署

有趣。看起來好像是滾動部署的一種變體-也許我們可以稱其為“推土機部署”-raze and rebuild :-)。
我認為這被稱為紅綠色部署,但在Netflix,他們稱之為紅黑色。
至少以我的經驗,紅綠色部署是如果您有兩個冗餘的完整服務器集群,您可以在其中一次切換(一次),而滾動部署則只有一個集群,該集群將逐個更新。但是我不確定每個人都使用這樣的術語。
它是“藍綠色”,而不是“紅綠色”,但是@sleske's的解釋是正確的。(我認為使用“藍綠色”是因為“紅綠色”聽起來像是“紅綠色重構” TDD方法。)但是,是的,Netflix稱其為“紅黑色”,因為它們是公司的顏色。
如果您正在運行微服務架構,這是唯一可行的方法。
也許他們應該將其重命名為“橙色(是新的)黑色”?
-1
sleske
2018-10-24 13:22:01 UTC
view on stackexchange narkive permalink

簡短的答案是:

它們確實會重新啟動。

您似乎假設Amazon和Google在單個服務器上運行,如果那樣重新啟動後,整個站點/服務都已關閉。這與事實相去甚遠-大型服務通常在許多並行工作的服務器上運行。若要進一步閱讀,請查看諸如集群負載平衡故障轉移​​a>之類的技術。

Google例如,具有遍布全球的十幾個數據中心,每個數據中心都擁有大量服務器(估計每個中心 100,000-400,000服務器)。

環境,更新(功能更新和安全更新)通常作為滾動部署安裝:

  • 選擇一些服務器子集
  • 在子集
  • 重新啟動子集;同時,其他服務器接管了
  • 重複下一個子集的操作:-)

還有其他選項,例如熱補丁,但使用頻率不高以我的經驗,至少在典型的大型網站上沒有。有關詳細信息,請參見森林的答案。

Heck Netflix服務器將莫名其妙地重新啟動並崩潰,只是為了讓您保持警惕。他們稱之為混沌猴子。
@kasperd前一天,我發現那裡是一個混亂之地。他帶走了整個可用區。只有紅色按鈕可以達到相同的效果。
您可以添加3.5:檢查是否一切正常。更適用於其他類型的更新,但是早期恢復還原的能力是使其緩慢的重要原因。很好的答案,IMO應該是公認的。
-1
還聽起來像OP假設他們正在運行Windows 10 ...
@Mazura,的一個朋友的朋友在一次現場會議演示期間關閉了他的Windows 10筆記本電腦...此更新使筆記本電腦變磚了。適用於Windows的出色PR。(不是)另外,https://worldbuilding.stackexchange.com/a/31419/16689
這就是我更新微服務的方式。由於網絡具有可伸縮性並具有負載平衡功能,因此一部分網絡與平衡器斷開連接,然後應用更新。在該步驟之後,負載均衡器將切換到更新的服務堆棧。然後,過時的部分將得到更新。對於人們來說,它看起來像是沒有任何停機時間的更新。其實是。只是沒有人注意到。
papajony
2018-10-24 13:37:28 UTC
view on stackexchange narkive permalink

您可以在“軟件部署”下選中“ 部署活動”。一種常見的方法是在服務之前使用負載均衡器,並相應地重定向流量。在一種稱為“藍綠色部署”的技術中,您將流量從“藍色”服務器重定向到“綠色”服務器。這當然沒有用戶端的停機時間,但前提是應用程序可以正確地解決此問題,例如通過無狀態服務。

假設您的應用程序在藍色服務器上運行v1,而負載均衡器將流量定向到該服務器。您可以將綠色服務器(不接收任何流量)升級到v2。然後,您可以重新配置負載均衡器,以將流量定向到綠色服務器。因此,您無需停機即可從v1升級到v2。

您也可以在測試過程中使用藍綠色技術。例如,您將負載均衡器配置為將95%的流量引導到藍色服務器(v1),並將5%的流量引導到綠色服務器(v2)。這樣一來,您可以在流量減少的情況下測試新版本,並且在出現錯誤的情況下對用戶的影響也較小。

Harper - Reinstate Monica
2018-10-27 05:44:30 UTC
view on stackexchange narkive permalink

集群和代理時非常容易。因為您有許多節點能夠完成相同的工作(對於數據存儲庫,例如搜索引擎,Hadoop文件系統等,則為幾個)。

進行網絡搜索。您訪問了www.altavista.com。 DNS條目列出了六個IP地址,您的客戶端隨機點擊了一個。每個IP都是一個Cisco路由器,該風扇將風扇散佈到內部IP地址上的8台物理前端服務器中的任意一台(共48台)。該服務器對您的查詢進行規範化(刪除空白等),然後對其進行MD5哈希處理。 MD5決定查詢將訪問300個代理服務器中的哪個。該查詢通過標準協議(例如SOAP)發送到代理

前端服務器是可互換的,因為它們僅處理單個查詢的瞬時需求。在最壞的情況下,客戶的查詢被丟棄。當前端服務器開始出現故障時,可以使用RRD數據或其他數據收集來監視,然後將其流量重新路由到備用服務器。思科路由器也是如此。


代理首先檢查其緩存。對於緩存命中,它將進行本地化混合併將答案發送回;完成。如果是“緩存未命中”,則代理會將查詢散發到搜索集群。

如果代理髮生故障,可以再次為該代理交換另一台物理計算機。現在,它變得更為關鍵,因為代理不可互換。每個人“擁有”搜索結果頻譜的一小部分。因此,如果0x0000-0x00d9計算機掉線,替代者必須知道介入該範圍。更糟糕的是,那台替代機器將有一個空的緩存,因此每個搜索查詢都將是一個緩存未命中。這將使每個被關閉的代理服務器適當上的負載適當稍微增加 。這意味著,如果您同時彈跳所有代理,則請勿在高峰搜索時間內這樣做

搜索集群具有相似的層次當然,由於冗餘和冗餘,搜索數據庫的每個部分都位於多個節點上,因此,如果一個節點發生故障,其他節點可以提供該結果的一部分。


我以代理為例。通過SOAP進行通信,通過某種類似的高級協議進行通信。進出數據都是暫時的,但緩存對平衡搜索引擎群集負載很重要。關鍵是,它可以隨時互換,最壞的情況是一些搜索超時。前端服務器會注意到這一點,並且可以簡單地再次發送其查詢,此時新代理將啟動。

因此,如果您有300個代理,則需要1/2個小時一個代理來恢復其緩存,您可以使搜索引擎的負載增加20%,然後可以每30秒交換1個代理,因此在任何滑動的30分鐘內,有60個代理(20%)正在重建緩存。假設甚至迫切需要快速實現

該示例需要花費2-1 / 2個小時才能推出,如果緊急威脅需要更快的響應,那麼您要么會忍受更多高速緩存未命中之苦,要么就將服務中斷足夠長的時間進行修補(但在搜索中)引擎示例高速緩存未命中仍然是一個問題,當您重新啟動時。我已經看過緊急數據庫重新加載和必要的高速緩存刷新後的RRD圖,這是值得一看的。)

當然通常可以修補,停止和重新啟動該過程,而無需完全重新啟動。我在生產節點上看到了2年的正常運行時間。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...