1. 程式人生 > >【MySQL】高可用

【MySQL】高可用

說明

高可用對於網際網路應用基本上是標配,目的是最大程度的為使用者提供服務,避免因為伺服器宕機等意外故障而終止服務。相比於無狀態服務(如前後端應用),資料庫服務的高可用問題更為複雜,不僅僅是能訪問,更需要保證其資料的正確性。

在考慮資料庫高可用架構時,需要考慮以下問題:

  • 資料庫伺服器如果發生宕機或者意外中斷等故障,能夠儘快恢復資料庫服務的可用性,減少停機時間
  • 用作備份、只讀副本等功能的非主節點應該與主節點的資料實時或者最終保持一致
  • 當業務發生資料庫切換時,切換前後的資料庫內容應當一致,不會因為資料缺失或者資料不一致而影響業務

方案

主從複製

MySQL主從複製是目前使用較為廣泛的“讀”高可用解決方案,官方原生支援,技術比較成熟,配置也不復雜,能夠有效緩解資料庫讀寫壓力,很大程度上可以解決中小型網站的資料庫壓力瓶頸問題。

MySQL主從複製採用典型的Master-Slave架構,Slave從Master處同步資料來保證主從資料一致。通過修改配置檔案,可以設定同步粒度,如特定資料庫,甚至是資料庫中的某一張表。


image.png | center | 578x283

主從複製主要涉及binlog、I/O、SQL三個執行緒。

  • binlog:Master程序,將資料更改寫入二進位制日誌檔案(Binary log)
  • I/O:Slave程序,從Master伺服器讀取二進位制日誌檔案,寫入Slave的中繼日誌(Relay log)
  • SQL:Slave程序,讀取中繼日誌,執行其中的SQL語句

優點:

  • 成本低,部署簡單
  • 可以作為一種備份機制,相當於熱備份,保障資料安全
  • 可以實現讀寫分離,Master上寫資料,Slave上讀資料,有效提高資料庫讀寫效能

缺點:

  • Master可能出現單點故障問題,寫資料仍然不是高可用
  • 資料一致性問題(同步延遲)

雙主複製

主從複製存在“寫”單點故障問題,為了保障“寫”的高可用,可以採用雙主互備的方式。


雙主複製.png | center | 392x273

兩臺Master都可以讀寫,互為主備,採用Keepalive等方案實現高可用(使用VIP對外提供服務),預設只有一臺(MasterA)負責資料寫入,另一臺(MasterB)備用。雙主複製解決了主從複製的單點寫故障問題,可以一定程度保障Master的高可用,一臺Master宕機後,可以在極短時間內自動切換到另一臺Master。

缺點:

  • 資源利用率只有50%,高可用就是通過冗餘實現,二者不可兼得
  • 兩臺Master雙寫同步,資料可能衝突(如自增id同步衝突),需要解決衝突

MHA

MHA(Master High Availability)由日本程式設計師yoshinorim開發,目前在MySQL高可用方面是一個相對成熟的解決方案,在10-30秒之間可以自動完成資料庫的故障切換,最大程度上保證資料的一致性,以達到真正意義上的高可用。
MHA主要包含Manager和Node兩個元件:


MHA元件.png | center | 402x334
  • Node元件要部署到所有的MySQL伺服器上。
  • Manager元件通常單獨部署在一臺獨立機器上來管理多個master/slave組,包含有主節點(Master)監控、故障轉移等管理程式。

Manager會定時探測叢集中Master節點,當Master故障時,它可以自動將包含最新資料的Slave提升為新的Master,然後讓所有其他的Slave重新指向新Master,整個故障轉移過程對應用程式完全透明。

MySQL Cluster

MySQL Cluster是官方提供的叢集高可用解決方案,但是依賴於NDB儲存引擎,如果使用InnoDB儲存引擎(大多數情況)則無法發揮出叢集的優勢。

參考資料

相關推薦

MySQL可用

說明 高可用對於網際網路應用基本上是標配,目的是最大程度的為使用者提供服務,避免因為伺服器宕機等意外故障而終止服務。相比於無狀態服務(如前後端應用),資料庫服務的高可用問題更為複雜,不僅僅是能訪問,更需要保證其資料的正確性。 在考慮資料庫高可用架構時,需要考

架構可用併發系統設計原則

網際網路架構下的【高可用高併發】系統設計原則,希望對你有用。   ------------------------------------------------------ ------------------------------------

keepalived可用方案

原理 lvs + vrrp結合體,實現高可用的負載均衡 主要功能 1> 提供負載均衡 基於lvs實現 2> 高可用 vrrp協議 通過接管vip實現 3> 健康檢查 故障點剔除 重點模組 IPVS(核心層) ---> 負載均衡 NETLIN

MySQL可用purge_relay_logs工具的使用

auto 用戶 binding pin read clas oca Language lob 【MySQL】【高可用】purge_relay_logs工具的使用 背景: ? 在MHA高可用架構中切換的步驟中,主要靠對各個實例的relay log文件新舊程度進行比較,選取

MySQL可用基於MHA架構的MySQL可用故障自動切換架構

bin candidate nlog repo sage $1 內容 data from 基於MHA架構的MySQL高可用切換架構 環境: ? CentOS7+MySQL 5.7 + GTID 業務系統:mainBusiness ? nod

MySQL MHA可用方案四、MHA部署

4.1 建立普通使用者 所有伺服器上建立普通使用者toor、設定密碼及sudo授權ifconfig,加入mysql使用者組 useradd -u 900 toor echo "chenliang"|passwd --stdin toor id toor sed -i '92a t

MySQL MHA可用方案三、主從複製

3.1 db01伺服器上的操作 db01是用作Master,所以需要先在上面建立主從複製的帳號 [[email protected] ~]# mysql -uroot -pchenliang -S /data/3306/mysql.sock mysql> mysql&g

MySQL MHA可用方案五、故障切換

5.1 故障模擬 01:在db01(Master)伺服器上檢視主從複製及mha是否正常 02:停止db01(Master)伺服器上的mysql服務 02:在db04上檢查MHA的日誌(/var/log/mha/app/app1/manager.log) 03:檢視VIP是否飄移到新Ma

MySQL性能MySQL》學習筆記,第四章,Schema與數據類型優化

MySQL優化 MySQL表設計 MySQL開發規範 MySQL數據類型 【MySQL】《高性能MySQL》學習筆記,第四章,Schema與數據類型優化 良好的邏輯設計和物理設計是高性能的基石,應該根據系統將要執行的查詢語句來設計schema。 反範式的設計可以加快某些類型的查詢,單同時可能使

MYSQL比前一天的溫度

給定一個 Weather 表,編寫一個 SQL 查詢,來查詢與之前(昨天的)日期相比溫度更高的所有日期的 Id。 例如,根據上述給定的 Weather 表格,返回如下 Id: 解法一:使用to_days()。TO_DAYS(date)

mysql 第二的薪水

編寫一個 SQL 查詢,獲取 Employee 表中第二高的薪水(Salary) 。 +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300

MYSQLCPU資源和可用記憶體大小對資料庫效能的影響

前言 可能影響到資料庫效能的幾個點,其一就是伺服器硬體,也是本節要說的CPU與可用記憶體。 引入 當熱資料超過可用記憶體大小,MemCache儲存引擎快取層容易失效(當快取大量失效時,容易產生大量的網路傳輸),從而影響伺服器的效能。 當出現這類I/O系統瓶頸時,我們

SQL Server可用資料庫複製:SQL Server 2008R2中通過資料庫複製,把A表的資料複製到B表

經常在論壇中看到有人問資料同步的技術,如果只是同步少量的表,那麼可以考慮使用連結伺服器+觸發器,來實現資料同步,但當要同步的資料表比較多,那麼可以考慮用資料庫複製技術,來實現資料的同步。 一、使用場

Mysql常用命令

flush mysq tmp pri nec 清除 int 用戶 創建 登錄mysql -uroot -p 查看有哪些數據庫show databases; 創建一個普通用戶 sa ,密碼是 some_passCREATE USER [email protecte

MySQL可用架構—MHA

mysql mha MySQL高可用目前有heartbeat+drbd、MHA、MySQL復制等幾種較成熟的方案,heartbeat+drbd的方案可擴展性較差,而且讀寫都由主服務器負責,從庫並不提供讀功能,適合於數據增長量不大、一致性要求很高的環境,如銀行、金融業等。今天重點講下MHA的高可用架構。

mysqlservice mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤

開機 init.d starting 設置 tin 執行 rest root lan service MySQL start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤的方法如下: [[email protected]/

Mysql經常使用指令之——忘記password

my.cnf 執行cmd mysql blank lan service 重裝 授權 環境變量 上一篇文章基本總結了下myql下通過指令怎麽創建用戶。詳見:【Mysql】經常使用指令之——用戶操作(創建,授權,改動。刪除) 今天說下特殊情況,忘記passw

mysql一個很小但很影響速度的地方

統一 速度 values self. class .exe 註意 logs 差距 如果要插入一大批數據,千萬不要一條一條的execute, commit。而應該是先全部execute,最後統一commit!!! 千萬註意,時間差距還是很大的!! 正確示範:快 fo

MySQL配置MySQL安裝和遠程訪問步驟

image 新建 oar 最新 rest word clas 字段 sql安裝 以遠程服務器為例,安裝Mysql到Linux並配置遠程訪問,步驟如下: 1.下載安裝最新的rpm文件 方法一: rpm -Uvh http://repo.mysql.com/mysql-co

MySQLLinux創建MySQL的角色信息

user 工具 選擇 好的 rest upd 配置 roo cnblogs 1.進入數據庫 mysql -u root -p 輸入密碼 2.進入之後輸入: use mysql; 3.直接從連接客戶端的工具,選擇數據庫mysql->user表裏面復制