當每個人都在慶祝我的生日時,我一直在修復集群直到早上 - 開發人員將他們的錯誤歸咎於我

當每個人都在慶祝我的生日時,我一直在修復集群直到早上 - 開發人員將他們的錯誤歸咎於我

這是一個永遠改變了我的 DevOps 運作方式的故事。 回到新冠疫情之前的時代,早在他們之前很久很久,當我和這些傢伙剛剛規劃自己的業務並根據隨機訂單進行自由職業時,一個報價落入了我的購物車。

寫這篇文章的公司是一家數據分析公司。 她每天處理數千個請求。 他們來找我們說:夥計們,我們有 ClickHouse,我們希望自動化它的配置和安裝。 我們想要 Ansible、Terraform、Docker 並將其全部儲存在 Git 中。 我們想要一個由四個節點組成的集群,每個節點有兩個副本。

這是一個標準要求,有幾十個,你需要一個同樣好的標準解決方案。 我們說“好的”,兩三週後一切都準備好了。 他們接受了這份工作並開始使用我們的實用程式遷移到新的 Clickhouse 叢集。

沒有人想要或知道如何修改 Clickhouse。 然後我們認為這是他們的主要問題,因此公司的服務站只是允許我的團隊盡可能自動化工作,以免我自己再去那裡。

我們伴隨著這一舉動,出現了其他任務——設定備份和監控。 同時,該公司的服務站與另一個項目合併,留下我們自己的一個人——列昂尼德——擔任指揮官。 萊尼亞並不是一個很有天賦的人。 一個普通的開發人員突然被任命負責 Clickhouse。 看來這是他第一次受委派管理什麼事情,壓倒性的榮譽讓他有種追星的感覺。

我們一起開始進行備份。 我建議立即備份原始資料。 只需拿起它,拉上拉鍊,然後優雅地將其扔進 c3 中即可。 原始資料就是黃金。 還有另一種選擇 - 使用凍結和複製來備份 Clickhouse 中的表本身。 但萊尼亞想出了自己的解決方案。

他宣布我們需要第二個 Clickhouse 集群。 從現在開始,我們將把資料寫入兩個叢集—主集群和備份叢集。 我告訴他,Lenya,這不會是備份,而是活動副本。 如果資料在生產中開始遺失,您的備份也會發生同樣的情況。

但萊妮亞緊緊抓住方向盤,不聽我的爭論。 我們在聊天中和他聊了很長時間,但沒什麼可做的——Lenya負責這個項目,我們只是從街上僱來的孩子。

我們監控叢集的狀態,並且只對管理員的工作進行收費。 純粹的 Clickhouse 管理,無需進入數據。 叢集可用,磁碟良好,節點良好。

我們幾乎不知道我們收到這份訂單是由於他們團隊內部的嚴重誤解

經理對 Clickhouse 運作緩慢且有時資料遺失感到不滿。 他給他的服務站佈置了解決這個問題的任務。 他盡其所能地想出了辦法,並得出結論:我們只需要實現 Clickhouse 的自動化——僅此而已。 但很快我們就發現,他們根本不需要一個 DevOps 團隊。

這一切變得非常非常痛苦。 最令人反感的是那天是我的生日。

星期五晚上。 我在我最喜歡的酒吧預訂了房間並邀請了朋友。

幾乎在離開之前,我們收到了創建alter的任務,我們完成了它,一切都很好。 更改通過,clickhouse 確認。 我們已經要去酒吧了,他們寫信給我們說沒有足夠的數據。 我們計算了一下,一切似乎都夠了。 他們離開去慶祝。

週五的餐廳很吵。 點了飲料和食物後,我們在沙發上休息。 一直以來,我的閒暇時間都被資訊慢慢淹沒。 他們寫了一些關於缺乏數據的文章。 我想——早晨比晚上更明智。 尤其是今天。

將近十一點,他們開始打電話。 是公司的領導……「大概是決定要祝賀我了。」我很猶豫地想,然後就拿起了電話。

我聽到這樣的話:「你搞砸了我們的數據! 我付錢給你,但沒有任何效果! 你負責備份,但你什麼也沒做! 我們來解決它吧!” - 只是更粗魯。

- 你知道嗎,滾出去! 今天是我的生日,現在我要喝酒,而不是從事你們六月自製的垃圾和棍棒產品!

那是我沒有說的。 相反,我拿出筆記型電腦開始工作。

不,我轟炸了,我轟炸得很厲害! 他在聊天中充滿了刻薄的「我告訴過你了」——因為備份,根本不是備份,——當然,沒有保存任何東西。

我和孩子們想出瞭如何手動停止錄音並檢查一切。 我們實際上確保了一些資料沒有被寫入。

我們停止記錄並計算每天發生的事件數量。 他們上傳了更多數據,其中只有三分之一沒有記錄。 三個分片,每個分片有 2 個副本。 您插入 100.000 行 - 33.000 行未記錄。

完全混亂了。 每個人都輪流讓對方滾蛋:萊尼亞先去了,然後是我和公司的創辦人。 只有加入的服務站試圖將我們的呼喊和信件轉移到尋找問題的解決方案。

沒有人明白到底發生了什麼

當我們意識到三分之一的數據不僅沒有被記錄,而且還丟失了時,我和這些人簡直震驚了! 原來公司裡的順序是這樣的:插入後,資料被不可撤銷地刪除,事件被批量浪費。 我想像謝爾蓋將如何將這一切兌換成失去的盧布。

我的生日也被丟進垃圾桶了。 我們坐在酒吧里,想出各種想法,試圖解決眼前的難題。 Clickhouse 下跌的原因並不明顯。 也許是網路的問題,也許是 Linux 設定的問題。 是的,無論你想要什麼,已經有足夠的假設了。

我沒有宣誓開發商的誓言,但拋棄電話那頭的人是不誠實的——即使他們把一切都歸咎於我們。 我99%確信問題不在於我們的決定,不在於我們這邊。 我們搞砸的 1% 的可能性讓我們焦灼不安。 但無論問題出在哪一方,都必須解決。 讓客戶,無論他們是誰,遭受如此可怕的資料洩露,都太殘忍了。

我們在餐廳的餐桌工作到凌晨三點。 我們加入了事件,插入了選擇,然後我們就去填補空白。 當你搞砸數據時,你就是這樣做的:你取前幾天的平均數據並將它們插入到搞砸的數據中。

凌晨三點多,我和朋友去我家,從酒類市場點了一瓶啤酒。 我坐在筆記型電腦前,遇到 Clickhouse 問題,一位朋友告訴我一些事情。 結果,一個小時後,他因為我在工作而不和他一起喝啤酒而感到生氣,然後就離開了。 經典 - 我是 DevOps 的朋友。

到了早上 6 點,我再次重新創建了表,數據開始氾​​濫。 一切順利,沒有任何損失。

然後就很難了。 每個人都因資料遺失而互相指責。 如果出現新的錯誤,我確信將會發生槍戰

在這些鬥爭中,我們終於開始明白——公司認為我們是處理資料和監控表格結構的人。 他們混淆了管理員和經銷商。 他們來問我們一些與管理員不同的問題。

他們的主要抱怨是──到底是什麼,你負責備份卻沒有做好,你繼續浪費資料。 這一切都與倒帶墊有關。

我想要正義。 我挖出了每個人的信件並附上了螢幕截圖,列昂尼德竭盡全力迫使他們進行備份。 在我打電話後,他們的服務站就站在我們這邊了。 後來萊尼亞承認了自己的罪行。

相反,公司的負責人並不想責怪自己的人。 截圖和言語對他沒有任何影響。 他認為,既然我們是這裡的專家,就必須說服大家,堅持我們的決定。 顯然,我們的任務是教Lenya,並且繞過他,他被任命為專案經理,直接向他傾訴我們對備份概念的所有疑問。

談話中充滿了仇恨、隱藏的和不隱藏的攻擊。 我不知道該怎麼辦。 一切都陷入了停滯。 然後他們建議我最簡單的方法 - 給經理寫一封個人資訊並安排與他的會面。 Vasya,現實生活中的人並不像聊天中那麼快。 老闆回覆我的消息:來吧,沒問題。

這是我職業生涯中最可怕的會議。 我的客戶盟友 STO - 找不到時間。 我和老闆還有莉娜一起去開會。

我一遍又一遍地在腦海中回放我們可能的對話。 我很早就到了,提早了半小時。 我開始變得緊張,我抽了 10 支煙。我明白了,就是這樣——我他媽孤單一人。 我無法說服他們。 然後他走進了電梯。

當他站起來的時候,他用力敲打打火機,結果把打火機打碎了。

結果,萊尼亞沒有出席會議。 我們和老闆就所有事情都進行了愉快的交談! 謝爾蓋向我講述了他的痛苦。 他不想「自動化 Clickhouse」——他想「讓查詢發揮作用」。

我沒有看到山羊,但看到了一個好人,擔心自己的生意,24/7 沉浸在工作中。 聊天常常帶給我們惡棍、無賴和愚蠢的人。 但在生活中,這些人就像你一樣。

Sergei 不需要雇用幾個開發人員。 他們發現的問題大得多。

我說我可以解決他的問題——這只是一份完全不同的工作,而且我有一個朋友在做這份工作。 如果我們從一開始就知道這對他們來說是一筆交易,我們就會避免很多事情。 雖然已經太晚了,但我們意識到問題在於糟糕的資料管理,而不是基礎設施。

我們握手了,他們把我們的薪水提高了兩次半,但條件是我絕對要自己承擔他們的數據和 Clickhouse 的全部混亂。 在電梯裡,我與那位 DI 人員 Max 進行了交流,並為他安排了工作。 有必要鏟掉整個集群。

採用的項目中有很多垃圾。 從提到的“備份”開始。 事實證明,這個「備份」叢集並不是孤立的。 他們測試了一切,有時甚至將其投入生產。

我們的內部開發人員創建了自己的自訂資料插入器。 他的工作方式如下:對文件進行批處理,運行腳本並將資料合併到表中。 但主要問題是一個簡單的請求就接受了大量的資料。 該請求每秒加入資料。 一切都是為了一個數字——每天的金額。

內部開發人員錯誤地使用了分析工具。 他們去了格拉法納並寫下了皇家請求。 他上傳了兩週的數據。 結果這是一個漂亮的圖表。 但實際上,資料請求是每 2 秒一次。 所有這些都堆積在隊列中,因為 Clickhouse 根本沒有進行處理。 這就是隱藏的主要原因。 Grafana 中什麼都不起作用,請求排在佇列中,舊的、不相關的資料不斷到達。

我們重新配置了集群,重新進行了插入。 內部開發人員重寫了他們的“插入器”,它開始正確地分片資料。

Max 進行了全面的基礎設施審計。 他概述了過渡到成熟後端的計劃。 但這並不適合該公司。 他們期望麥克斯能提供一個神奇的秘密,讓他們能夠以老式的方式工作,但效率很高。 萊尼亞仍然負責這個項目,他什麼也沒學到。 從所提供的一切中,他再次選擇了他的選擇。 一如既往,這是最具選擇性的…大膽的決定。 Lenya 相信他的公司有一條特殊的道路。 荊棘叢生,佈滿冰山。

事實上,這就是我們分手的地方——我們做了我們能做的。

我們從這段歷史中汲取了豐富的知識和智慧,開始了自己的事業,並為自己制定了幾個原則。 我們現在再也不會像以前那樣開始工作了。

DJ Max 在這個專案之後加入了我們,我們仍然合作得很好。 Clickhouse 案例教導我在開始工作之前進行完整徹底的基礎設施審查。 我們了解一切是如何運作的,然後才接受任務。 如果早些時候我們會立即急於維護基礎設施,那麼現在我們先做一個一次性項目,這有助於我們了解如何使其進入工作狀態。

是的,我們會避免基礎設施糟糕的項目。 即使為了很多錢,即使出於友誼。 運行病態項目是無利可圖的。 認識這一點幫助我們成長。 要么是一個使基礎設施井然有序的一次性項目,然後是一份維護合同,要么我們只是匆匆而過。 又經過另一座冰山。

PS 因此,如果您對基礎設施有疑問, 請隨時提交請求.

我們每月有 2 次免費審核,也許您的專案就是其中之一。

來源: www.habr.com

添加評論