国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

防止服務器宕機時MySQL數據丟失的幾種方案

2024-07-24 12:45:55
字體:
來源:轉載
供稿:網友

對于多數應用來說,MySQL都是作為最關鍵的數據存儲中心的,所以,如何讓MySQL提供HA服務,是我們不得不面對的一個問題。當master當機的時候,我們如何保證數據盡可能的不丟失,如何保證快速的獲知master當機并進行相應的故障轉移處理,都是需要我們好好思考的。這里,筆者將結合這段時間做的MySQL proxy以及toolsets相關工作,說說我們現階段以及后續會在項目中采用的MySQL HA方案。
Replication
要保證MySQL數據不丟失,replication是一個很好的解決方案,而MySQL也提供了一套強大的replication機制。只是我們需要知道,為了性能考量,replication是采用的asynchronous模式,也就是寫入的數據并不會同步更新到slave上面,如果這時候master當機,我們仍然可能會面臨數據丟失的風險。

為了解決這個問題,我們可以使用semi-synchronous replication,semi-synchronous replication的原理很簡單,當master處理完一個事務,它會等待至少一個支持semi-synchronous的slave確認收到了該事件并將其寫入relay-log之后,才會返回。這樣即使master當機,最少也有一個slave獲取到了完整的數據。

但是,semi-synchronous并不是100%的保證數據不會丟失,如果master在完成事務并將其發送給slave的時候崩潰,仍然可能造成數據丟失。只是相比于傳統的異步復制,semi-synchronous replication能極大地提升數據安全。更為重要的是,它并不慢,MHA的作者都說他們在facebook的生產環境中使用了semi-synchronous(這里),所以我覺得真心沒必要擔心它的性能問題,除非你的業務量級已經完全超越了facebook或者google。在這篇文章里面已經提到,MySQL 5.7之后已經使用了Loss-Less Semi-Synchronous replication,所以丟數據的概率已經很小了。

如果真的想完全保證數據不會丟失,現階段一個比較好的辦法就是使用gelera,一個MySQL集群解決方案,它通過同時寫三份的策略來保證數據不會丟失。筆者沒有任何使用gelera的經驗,只是知道業界已經有公司將其用于生產環境中,性能應該也不是問題。但gelera對MySQL代碼侵入性較強,可能對某些有代碼潔癖的同學來說不合適了:-)

我們還可以使用drbd來實現MySQL數據復制,MySQL官方文檔有一篇文檔有詳細介紹,但筆者并未采用這套方案,MHA的作者寫了一些采用drdb的問題,在這里,僅供參考。

在后續的項目中,筆者會優先使用semi-synchronous replication的解決方案,如果數據真的非常重要,則會考慮使用gelera。
Monitor

前面我們說了使用replication機制來保證master當機之后盡可能的數據不丟失,但是我們不能等到master當了幾分鐘才知道出現問題了。所以一套好的監控工具是必不可少的。

當master當掉之后,monitor能快速的檢測到并做后續處理,譬如郵件通知管理員,或者通知守護程序快速進行failover。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 航空| 长葛市| 泽普县| 西乌珠穆沁旗| 婺源县| 旅游| 万盛区| 嘉义县| 梅河口市| 宝清县| 昌平区| 嘉峪关市| 富蕴县| 长宁县| 尼勒克县| 荣成市| 台南县| 大名县| 泰和县| 凤冈县| 凤庆县| 广东省| 山阳县| 平乐县| 西畴县| 平原县| 新沂市| 肇源县| 榆中县| 新龙县| 松溪县| 镇沅| 婺源县| 南华县| 太谷县| 汉川市| 竹山县| 盐边县| 福鼎市| 津南区| 衡东县|