MYSQL性能優化之Mysql資料庫高可用架構設計之MMM架構設計(上)

高可用性H.A.(High Availability)指的是通過盡量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性。它與被認為是不間斷操作的容錯技術有所不同。HA系統是目前企業防止核心計算機系統因故障停機的最有效手段。

使用正常可用時間和全年時間百分比來表示高可用

99999 (365*24*60)*(1-0.99999) = 5.256分鐘

  • 1
  • 嚴重的主從延遲
  • 主從複製中斷
  • 鎖引起的大量阻塞
  • 軟硬體故障,伺服器宕機
  • 成本和高可用性呈正相關,結合業務和成本來考慮

    單點故障的解決

  • IDC機房
  • 網卡……
  • 方法1:共享存儲

  • 缺點:共享存儲本身就是一個單點,隨機IO性能不理想
  • 優點:避免除存儲外其他組件
  • 方法2:DRDB磁碟(推薦)

  • 優:數據冗餘
  • 缺:故障轉移所需時間比較長,備用伺服器不能提供服務(包括讀),成本高。磁碟文件損壞,主備文件都會損壞
  • 多寫集群性能取決於最差的機器
  • 多寫集群mysql寫入性能肯定比單台性能差
  • 第二種比較完美,但是如果內存不足,NDB集群的性能就會非常差(很少使用到生產環境中)
  • 面臨的問題:主伺服器的單點問題

    MMM架構

    通過監控伺服器MMM和各個伺服器上的監控代理軟體交互來完成監控和資料庫遷移的

    MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製。 雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一台備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個slave的read負載均衡。 可以看上一篇我寫的文章:主備模式的主主複製

    MMM提供了自動和手動兩種方式移除一組伺服器中複製延遲較高的伺服器的虛擬ip,同時它還可以備份數據,實現兩節點之間的數據同步等。由於MMM無法完全的保證數據一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,非常不建議採用MMM這種高可用架構。

    MMM功能

    - MMM簡單的找到主庫的當前日誌點,然後使所有的從庫日誌點和該日誌點同步。如果在一個繁忙的系統中,很有可能對數據造成丟失的情況 - 寫虛擬IP只能在兩個主伺服器之間切換,讀虛擬IP可以在任意伺服器之間切換MMM部署所需資源

  • 兩個主伺服器配置要盡量相同,否則會引起性能問題
  • 查看MySQL伺服器配置信息 mysql> show variables;
  • 查看MySQL伺服器運行的各種狀態值 mysql> show global status;
  • server_id肯定不一樣
  • 從伺服器分擔負載,但是不能太多(出現的問題會越來越大)
  • 監控伺服器監控主從複製情況和複製鏈路情。當出現宕機或者主從延遲大於某個閾值時,虛擬IP切換。
  • 一個監控伺服器可以監控多個伺服器集群,最好使用獨立的伺服器資源
  • 每一個資料庫伺服器上都會有兩個IP:伺服器物理IP,讀需IP.主伺服器需要一個寫需IP
  • MMM部署步驟

    MMM演示拓撲圖

    MMM演示

    建立複製賬號

    主庫備份(複製到備主伺服器和從伺服器)100

    主主同步複製(兩個主都需要複製)

    備主伺服器數據複製101

    導入資料庫,mysql -uroot -p < all.sql

  • 1
  • 查看主伺服器二進位日誌名字和時間點 all.sql

    主伺服器數據複製100

    從伺服器數據複製102

    導入資料庫,mysql -uroot -p < all.sql

  • 1
  • 查看主伺服器二進位日誌名字和時間點 all.sql

    各個伺服器優化yum源及工具安裝

    下載rpm包

    wget http://mirrors.opencas.cn/epel/epel-release-latest-6.noarch.rpm

  • 1
  • 安裝rpm

    rpm -ivh epel-.....rpmrpm -ivh remi-.....rpm

  • 1
  • 2
  • 編輯配置文件

    vim /etc/yum.repos.d/remi.repo

  • 1
  • vim /etc/yum.repos.d/epel.repo

  • 1
  • 安裝監控服務

    yum search mmm

  • 1
  • yum install mysql-mmm-agent.noarch -y 每個伺服器都要安裝的代理(3個)

  • 1
  • 安裝監控伺服器包yum -y install mysql-mmm*

  • 1
  • 2
  • 數據賬號主創建->同步到主備,從伺服器

    監控用戶

    代理用戶(故障轉移,主從切換)

    複製用戶(複製集群時已經創建)

    MMM資料庫節點配置

    vim /etc/mysql-mmm/mmm_common.conf(所有集群節點必須一致)

  • 1
  • 2
  • 統一網卡設備號
  • ips 虛擬IP
  • 拷貝到所有其他伺服器

    vim /etc/mysql-mmm/mmm_agent.conf 配置各個伺服器名(保證不衝突)

  • 1
  • MMM資料庫監控節點配置(監控伺服器102)

    vim /etc/mysql-mmm/mmm_mon.conf

  • 1
  • ping_ips額外檢查所需要的新IP地址,為了防止MMM切換出現腦裂,建議大家把所有的伺服器ip,還有網關都寫上(仲裁機制)
  • auto_set_online 主機出現問題,恢復之後在線時間
  • What does 「split-brain」 mean?(紅帽文檔的解釋)

    「Split brain」 is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the cluster were intact. This is like having two governments trying to rule the same country. If multiple computers are allowed to write to the same file system without knowledge of what the other nodes are doing, it will quickly lead to data corruption and other serious problems. Split-brain is prevented by enforcing quorum rules (which say that no group of nodes may operate unless they are in contact with a majority of all nodes) and fencing (which makes sure nodes outside of the quorum are prevented from interfering with the cluster). 解決方案:磁碟鎖 仲裁機制 或者冗餘心跳線等方式來解決

    MMM啟動

    三台伺服器(節點) /etc/init.d/mysql-mmm-agent start監控伺服器啟動監控服務 /etc/init.d/mysql-mmm-monitor start查看當前集群的狀態 mmm_control show

  • 1
  • 2
  • 3
  • 虛擬IP正確配置(監控伺服器)

    測試

    關閉主伺服器

    /etc/init.d/mysqld stop

  • 1
  • 監控伺服器查看

    mmm_control show

  • 1
  • 主從關係變化(查看配置) show slave master 用於提供有關從屬伺服器線程的關鍵參數的信息

    MMM集群優點

  • 可以使用Prel語言來自己定製
  • 主資料庫IP變更後如何通知應用對新的主DB進行連接?->虛擬IP(讀和寫)。
  • 前端使用的是虛擬IP
  • 主從延遲過高,就會把延遲過高的伺服器遷移到沒有延遲的伺服器上(避免了因數據延遲導致業務邏輯上的錯誤)
  • 原主和主備是主主同步的關係,故障伺服器重新上線可以自動的對主進行同步
  • 可以對多個MMM集群進行監控,節約伺服器成本
  • MMM集群缺點

  • 不支持gtid,多線程。
  • 主從不一致的主要原因是主是多線程的,從是單線程的。並發寫壓力大時,無法使用多線程同步的配置。MMM會自動把主從延遲大的從伺服器讀VIP遷移到其他伺服器上或者主伺服器上。在寫並發壓力大時,可能會出現讀VIP全部集中到主伺服器上,進而導致連接數佔滿或者壓宕機
  • LVS F5
  • 由於mysql是非同步的,不能保證日誌點都是最近的,所以容易造成事務丟失或者重複提交事務(主從切換沒有對比從伺服器日誌同步點進而選擇最新的從伺服器,而是主備,就是它)
  • 需要開發MMM監控服務的監控程序
  • 推薦閱讀:

    Android 性能篇 - 內存優化
    快速排序演算法的優化思路總結
    【厚積薄發】關於LZMA和LZ4壓縮的疑惑解析
    document.write 的痛
    網頁渲染性能優化 —— 性能優化下

    TAG:設計 | 資料庫 | 架構 | 性能 | 優化 | 高可用 | 性能優化 | 架構設計 |