1. 程式人生 > >mysql高可用架構設計

mysql高可用架構設計

主要介紹:複製功能介紹,mysql二進位制日誌,mysql複製拓撲,高可用框架,單點故障,讀寫分離和負載均衡

一 mysql複製功能介紹

        mysql複製功能提供分擔讀負載

二 複製解決的問題

     1 實現不同伺服器上的資料分佈 

        1.1 利用二進位制增量進行

        1.2 不需要太多的頻寬

        1.3 但是使用基於行的複製在進行大批量修改時會對頻寬帶來一定的壓力,特別是跨IDC環境下進行復制

    2 實現資料讀取的負載均衡

        2.1 需要其他元件配合完成

        2.2 利用DNS輪詢的方式把程式的連線到不同的備份資料庫

        2.3 利用LVS,haproxy這樣的代理方式

        2.4 非共享架構,同樣的資料分佈在多臺伺服器上

    3 增強了資料安全性

        3.1 利用備庫的備份來減少主庫負載

        3.2 複製並不能代替備份

    4 實現資料的線上升級

三 mysql二進位制日誌

    1 mysql服務層日誌

        二進位制,慢查日誌,通用日誌

    2 mysql儲存引擎層日誌

        innodb日誌,重做日誌,回滾日誌

    記錄了所有對mysql資料庫的修改事件,包括增刪改查事件和對錶結構的修改事件

四 二進位制日誌格式

    1 基於段的日誌格式(記錄sql語句)

        binlog_format=statement

        優點:日誌記錄量相對較小,節約磁碟及網路i/o,只對一條記錄修改或插入

        缺點:必須要記錄上下文資訊(保證語句在從伺服器和主伺服器上執行結果一樣),對於特定的函式如uuid(),user()這樣的非確定函式還是無法複製,可能造成mysql複製的主備伺服器資料不一致

    2 基於行的格式

        binlog_format=ROW

        同一sql語句修改10000條資料的情況下,基於段的日誌格式只會記錄這個sql語句,基於行的日誌格式會有10000條記錄分別記錄每一行的資料修改

        優點:使mysql主從複製更加安全,對每一行資料的修改比基於段的複製高效,誤操作而修改了資料庫中的資料,同時又沒有備份可以恢復時,我們就可以通過分析二進位制日誌,對日誌記錄的資料修改操作做反向處理的方式來達到恢復資料的目的

        缺點:記錄日誌量較大

    3 混合日誌格式

        binlog_format=minxed

        特點:根據sql語句由系統決定在基於段和基於行的日誌中進行選擇,資料量的大小由所執行的sql決定

五 mysql日誌格式對複製的影響

    1 基於sql語句的複製

        優點:生成日誌量少,節約網路傳輸i/o;並不強制要求主從資料庫的表定義完全相同;相對基於行的複製更加靈活

        缺點:對於非確定事件,無法保證主從資料的一致性;對於儲存過程、觸發器、自定義函式進行的修改也可能造成資料不一致;相比基於行的複製方式在從上執行需要更多的行鎖               

      2 基於行的複製

        優點:可以應用於任何sql的複製包括非確定性函式,儲存過程;可以較少資料庫索的使用

        缺點:要求主從資料庫的表結構相同,否則可能會中斷複製;無法在從上單獨執行觸發器

六 mysql的工作方式

       

    步驟

        主將變更寫入二進位制日誌

        從讀取主的二進位制日誌變更並寫入到relay_log中

                基於日誌點的複製,基於GTID的複製

        在從上重放relay_log中的日誌

                 基於sql段的日誌是在從庫上執行記錄的sql,基於行的日誌則是在從庫上直接應用對資料庫的修改

七 基於日誌點的複製

   

    配置步驟

        在主DB伺服器上建立複製賬號

            create user 'repl'@'ip段' identified by ‘password’

            grant replication slave on .to 'repl'@'ip段'

       配置從資料庫伺服器

            bin_log=mysql-bin

            server_id=101

            relay_log=mysql-relay-bin

            log_slave_update=on

            read_only=on        

        初始化從伺服器資料

             mysqldump -master-data=2-single-transaction

             xtrabackup -slave-info

        啟動複製鏈路

  change master to master_host="master_host_ip",master_user='repl',master_passwd=''password' master_log_file='mysql_log_file_name',master_log_pos=4

          優點:是mysql最早支援的複製技術,bug相對較少;對sql查詢沒有任何限制;處理故障比較容易

           缺點:故障轉移是重新獲取新主的日誌點資訊比較困難

  八 基於GTID的複製

       

    什麼是GTID:全域性事務id,其保證為每一個在主提交的事務在複製叢集中可以生成一個唯一的id;

    基於日誌點的複製步驟

         在主DB伺服器上建立複製賬號

            create user 'repl'@'ip段' identified by 'passwd'

            grant replication slave on .to 'repl'@'ip段'

        配置從資料庫伺服器

            bin_log=/usr/local/mysql/log/mysql-bin

            server_id=100

            gtid_mode=on

            enforce-gtid-consiste

            log_slave_update=on

            read_only=on

        初始化從伺服器資料

            mysqldump -master-data=2-single-transaction

            xtrabackup -slave-info

        啟動基於GTID的複製

   change master to master_host='master_host_ip',master_user='repl',master_password='password',master_auto_position=1;

          優點:可以很方便的進行故障轉移;從庫上不會丟失上庫上的任何修改

          缺點:故障處理比較複雜;對執行的sql又一定的限制

        選擇複製模式要考慮的問題

            所使用的mysql版本

            複製架構及主從切換方式

            所使用的高可用管理元件

            對應用的支援程度

九 mysql複製拓撲


mysql5.7之前,一個從庫只能又一個主庫,5.7之後,支援一從多主

    1 一主多從的複製拓撲

       

優點:配置簡單,可以用多個從庫分擔讀負載

用途:為不同的業務使用不同的從庫;將一臺從庫放到遠端IDC,用作災備恢復;分擔主庫的讀負載

    2 主主複製拓撲

配置注意事項:兩個主中所操作的表最好能夠分開;使下面兩個引數控制自增id的生成;

auto_increment_increment=2;

auto_increment_offset=1|2

主備模式下的主-主複製配置主要事項

   只有一臺主伺服器對外提供服務

    一臺伺服器處於只讀狀態並且只作為熱備使用

     在對外提供服務的主庫出現故障或是計劃性的維護時才會進行切換

      使原來的備庫成為主庫,而原來的主庫會成為新的備庫,並處理只讀或是下線狀態,待維護完成後重新上線

    確保兩臺伺服器上的初始資料相同

    確保兩臺伺服器上已經啟動binlog並且又不同的server_id

    在初始的備份上啟動read_only

   也可以給主庫分配幾個從庫


級聯複製


十 mysql複製效能優化

    影響主從延遲的因素


    1 主庫寫入二進位制日誌的時間

        解決辦法:控制主庫的事務大小,分割大事務

    2 二進位制日誌的傳輸時間

        解決辦法:使用mixed日誌格式或設定set binlog_row_image=minimal

    3 預設情況下從庫只有一個sql執行緒,主上併發的修改在從庫變成了序列

        解決辦法:使用多執行緒複製,在mysql5.7中可以按照邏輯時鐘的方式來分配執行緒

            stop slave

            set global slave_parallel_type='logical_clock'

            set global slave_parallel_workers=4

            start slave

十一 mysql複製常見問題處理

    mysql資料損壞或丟失所引起的主從複製錯誤

                使用跳過二進位制日誌事件

                注入空事務的方式先恢復中斷的複製鏈路

                再使用其他方法來對比主從伺服器上的資料

    主庫上的二進位制日誌損壞

    備庫上的中繼日誌損壞

    在從庫上進行資料修改造成的主從複製錯誤

十二 mysql複製無法解決的問題

       分擔資料庫的寫負載

        自動進行故障轉移及主從切換

        提供讀寫分離功能

十三 高可用架構

    什麼是高可用:通過儘量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機事件,以提高系統和應用的可用性

     高可用的因子:正常可用時間,全年時間的百分比

     引起系統不可用的原因:嚴重的主從延遲,主從複製中斷,鎖引起的大量阻塞,軟硬體故障造成的伺服器宕機

     如何實現高可用

        避免導致系統不可用的因素,減少系統不可用的時間

            建立完善的監控及報警系統

            對備份資料進行恢復測試

            正確配置資料進行恢復測試

            對不需要的資料進行歸檔和清理

         增加系統冗餘,保證發生系統不可用時可以儘快恢復

              避免存在單點故障

              主從切換及故障轉移

    原因

            有伺服器磁碟空間耗盡

            效能糟糕的sql

            表結構和索引沒有優化

            主從資料不一致

             人為的操作失誤

十四 單點故障

    單點故障是指一個系統中提供相同功能的元件只有一個,如果這個元件失效來額,就會影響整個系統的正常使用

    如何避免mysql單點故障

        利用sun共享儲存或drdb磁碟複製解決mysql單點故障

      

     利用多寫叢集或ndb叢集解決mysql單點故障


如何解決主伺服器的單點問題

    主伺服器切換後,如何通知應用新的主伺服器ip地址

    如何檢查mysql主伺服器是否可用

    如何處理從伺服器和新主伺服器之間的複製關係

十五 MMM架構

        Muti-master Replication Manager

   1 MMM提供了什麼功能

        MMM監控mysql主從複製健康情況

        在主庫上出現宕機進行故障轉移並自動配置其他從對主的複製

            如何找到從庫對應的新的主庫日誌點的同步點

            如果存在多個從庫出現數據不一致的情況如何處理

        提供了讀寫虛擬ip,在主伺服器出現問題時,可以自動遷移虛擬ip

    2 MMM架構

       

    3 MMM部署所需資源

       

    4 MMM優缺點

        優點:使用perl指令碼語言開發及完全開源;提供了讀寫vip,使伺服器的角色的變更對前端應用透明;mmm提供了從伺服器的延遲監控

        缺點:釋出時間比較早不支援mysql新的複製功能;沒有讀負載的功能;在進行主從切換時,容易造成資料丟失;mmm監控服務存在單點故障

十六 MHA架構介紹

        Master High Avaliablility

        1 提供的功能

            監控主資料庫服務是否可用

            當主DB不可用時,從多個從伺服器中選舉出新的主資料庫伺服器

            提供了主從切換和故障轉移功能

    2 MHA主從切換過程

            嘗試從出現故障的主資料庫儲存二進位制日誌

            從多個備選從伺服器中選舉新的備選主伺服器

            在備選主伺服器和其他從伺服器之間同步差異二進位制資料

            應用從原DB伺服器儲存的二進位制日誌

十七 讀寫分離和負載均衡介紹

            進行mysql主從複製配置的一個主要目的:為了分擔主庫的讀負載

        1 為什麼要讀寫分離

                只能在主上進行寫操作

                讀操作主和從上都可以

        2 讀寫分離的兩種方式

            程式實現讀寫分離

            優點:由開發人員控制什麼樣的查詢在從庫中執行,因此比較靈活;有程式直接連線資料庫,所以效能損耗比較少

            缺點:增加了開發工作量,是程式程式碼更加複雜;人為控制,容易出錯    

            中介軟體實現讀寫分離

            優點:由中介軟體根據查詢語法分析,自動完成讀寫分離;對程式透明,對於已有程式不用作任何調整

            缺點:增加了中間層,所以對查詢效率有損耗;對於延遲敏感業務員無法自動在主庫執行

        讀寫分離與讀的負載均衡區別

            讀寫分離要解決的是如何在複製叢集的不同角色上,去執行不同的語句

             讀的負載均衡主要解決的是具有相同角色的資料庫,如何共同分擔相同的負載

    如何實現讀的負載均衡

            軟體:lvs,haproxy,maxscale

            硬體:f5

相關推薦

MySQL可用架構設計(主從複製)

1、MySQL複製功能提供分擔讀負載   複製解決了什麼問題?      1、 實現在不同伺服器上的資料分佈           利用二進位制日誌增量進行    

mysql可用架構設計

主要介紹:複製功能介紹,mysql二進位制日誌,mysql複製拓撲,高可用框架,單點故障,讀寫分離和負載均衡一 mysql複製功能介紹        mysql複製功能提供分擔讀負載二 複製解決的問題     1 實現不同伺服器上的資料分佈         1.1 利用二進位

MySQL可用架構設計】(一)-- mysql復制功能介紹

inf 太多的 info 做了 技術 不用 帶寬 proxy 圖片 一、 介紹 Mysql的復制功能是構建基於SQL數據庫的大規模高性能應用的基礎,主要用於分擔主數據庫的讀負載,同時也為高可用、災難恢復、備份等工作提供了更多的選擇。 二、為什麽要使用mysql復制功

MySQL效能管理及架構設計(二):資料庫結構優化、可用架構設計、資料庫索引優化

一、資料庫結構優化(非常重要)1.1 資料庫結構優化目的    1、減少資料冗餘:(資料冗餘是指在資料庫中存在相同的資料,或者某些資料可以由其他資料計算得到),注意,儘量減少不代表完全避免資料冗餘;  2、儘量避免資料維護中出現更新,插入和刪除異常:             

mysql可用架構可用架構設計

高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。 假設系統一直能夠提供服務,我們說系統的可用性是100%。如果系統每執行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%。很多公司的高可用目標是

MySQL可用架構之MHA

mysql1、關於MHAMHA(Master HA)是一款開源的MySQL的高可用程序,它為MySQL主從復制架構提供了automating master failover功能。MHA在監控到master節點故障時,會提升其中擁有的最新數據的slave節點成為新的master節點,在此期間,MHA會通過其它從

MySQL可用架構之MySQL5.7.19 PXC

mysql高可用 5.7 sta var show mysql clu -- ike mysql> show global status like ‘wsrep_cluster_size‘;+--------------------+-------+| Variabl

互聯網金融MySQL可用架構之-MHA故障切換

文件 ads erro osi ddr app1 bind enabled ive 互聯網金融MySQL高可用架構之-MHA 在線平滑切換過程 --切換命令如下: [root@MHA bin]# masterha_master_switch --conf=/etc/app1

MySql 可用架構Atlas

stop creat st2 正常 utf8 spa key target box Atlas是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基於MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了

MySQL可用架構之基於MHA的搭建

MySQL高可用架構之基於MHA的搭建  一、MySQL MHA架構介紹: MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套

可用架構設計思路

什麼是高可用 高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。 如何保障高可用 減少單點,伺服器叢集化 服務分層,並且每層都是叢集,當叢集中一個節點發生故障時,要自動將請求轉移到可用節點

Mysql可用架構——MHA

MHA(Master High Availability)什麼是資料庫的高可用性呢??資料庫主機中我們會有做成主從關係的或者其他關係型資料庫,如果主掛了,不會影響資料的訪問,假如是一主三從架構,主庫掛了,但主庫能被從庫ssh上去的情況下,MHA從三個從庫中選擇同步最接近的作為

mysql可用架構之MHA和mysql日誌優化

一、MHA簡介: MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於 Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟體。在M

MySQL可用架構之MHA搭建以及測試(二)

一、MHA特點 MHA監控複製架構的主伺服器,一旦檢測到主伺服器故障,就會自動進行故障轉移。 即使有些從伺服器沒有收到最新的relay log,MHA自動從最新的從伺服器上識別差異的relay log並把這些日誌應用到其他從伺服器上,因此所有的從伺服器保持一致性了。MHA通

整個MHA+keepalived+lvs+mysql可用架構配置說明

dex diff vim could not 分區創建 pos ann 試驗 pts 整個MHA+keepalived+lvs+mysql高可用架構配置說明1.1. 環境簡介1.1.1、vmvare虛擬機,系統版本CentOS7.5 x86_64位最小化安裝,mysql的版

MySQL 可用架構之MMM

簡介 MMM(Master-Master replication manager for MySQL)是一套支援雙主故障切換和雙主日常管理的指令碼程式。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入

mysql可用架構誰能提供具體實踐例項!!!

mysql高可用架構目前只查到4中解決方案,如下所示,但是沒有具體實踐,看到本部落格的大神們,能不能給我提供一些實踐的例項,謝謝!!!!! 1  Lvs+keeplived+mysql 的方案 單點寫入讀負載均衡主主同步高可用方案 2 Heartbeat 高可用MySQ

可用性高達五個9!支付系統可用架構設計實戰

對於網際網路應用和企業大型應用而言,多數都儘可能地要求做到7*24小時不間斷執行,而要做到完全的不間斷執行可以說“難於上青天”。為此,對應用的可用性程度一般衡量標準有三個9到五個9。 對於一個功能和資料量不斷增加的應用,要保持比較高的可用性並非易事。為了實現高可用,付錢拉從避免單點故障、保證應用自身的高可

Mysql可用架構

備庫 bdr 運行 不支持 修復 hold 語句 操作 base 低讀低寫並發、低數據量方案 方案一:雙機高可用方案 1.數據庫架構圖 2.特點 一臺機器A作為讀寫庫,另一臺B作為備份庫;A庫故障後B庫作為讀寫庫;A庫恢復後A作為備庫。 3.開發說明