MySQL數據庫⾼可⽤HA實現小結

MySQL數據庫⾼可⽤HA實現

1、 數據庫⾼可⽤分析

⾼可⽤的衡量標準
數據庫實現⾼可⽤的⼏種⽅式
MySQL數據庫實現⾼可⽤

2、MySQL主從復制的容災處理

MySQL⽀持的復制⽅式分析
主從場景切換⽅式
主從結構如何實現容災

1. 什麼是數據庫⾼可⽤

1.1. 什麼是⾼可⽤集群

N+1:N就是集群,1就是⾼可⽤,⾼可⽤的核⼼就是冗餘,集群是保證服務最低使⽤標準的

1.2. ⾼可⽤集群的衡量標準

⼀般是通過系統的可靠性和可維護性來衡量的
MTTF:平均⽆故障時間,這是衡量可靠性的
MTTR:衡量系統的可維護性的
HA=MTTF/(MTTF+MTTR)*100%
SLA:99.999%:表示⼀年故障時間/宕機時間不超過6分鐘

1.3. 實現⾼可⽤的三種⽅式

主從⽅式(⾮對稱)
    這種⽅式的組織形式通常都是通過兩個節點和⼀個或多個服務器,其中⼀臺作為主節點
(active),另⼀臺作為備份節點(standy),備份節點應該隨時都在檢測主節點的健康狀況,當
    主節點發⽣故障,服務會⾃動切換到備份節點保障服務正常運⾏
對稱⽅式
    兩個節點,都運⾏著不同的服務且相互備份,相互檢測對⽅的健康,當任意⼀個節點發⽣故障,這
    個節點上的服務就會⾃動切換到另⼀節點
多機⽅式
    包含多個節點多個服務,每個節點都要備份運⾏不同的服務,出現問題⾃動遷移

1.4. MySQL數據的⾼可⽤實現

1.4.1. 主從⽅式(⾮對稱)

資源:兩臺同版本的MySQL數據庫
主從實現的內部運⾏原理和機制
    First Step:主數據庫服務器會把數據的修改記錄記錄進binlog⽇志,binlog⼀定要打開
    Second Step:從庫的I/O進⾏讀取主庫的binlog內容後存⼊⾃⼰的Relay Log中繼⽇志中,這
    個I/O線程會和主庫建⽴⼀個普通的客戶端連接,然後主庫啟動⼀個⼆進制轉儲線程,I/O線
    程通過轉儲線程讀取binlog更新事件,同步完畢後I/O進⼊sleep,有新的更新會再喚醒
            Relay Log和Binlog的格式是⼀樣的,可以⽤mysqlbinlog讀取,也可show
            mysql> show relaylog events in 'relay-log.000001';
            ⽬前數據庫有兩種復制⽅式
                    binlog⽇志點position
                    GTID⽅式也要依賴binlog
    第三步:從服務器的SQL進程會從Relay Log中讀取事件並在從庫中重放
            從服務器執⾏重放操作時是可以在配置⾥聲明是否寫⼊服務器的binlog⽇志中

在這裡插入圖片描述

1.4.2. 配置主從服務步驟

1.4.2.1. Binlog的⽇志點⽅式配置主從同步

配置主從服務器參數
在Master服務器上創建⽤於復制並授權的數據庫賬號
備份Master數據庫並初始化Slave服務器數據
啟動復制鏈路

Master服務器配置

chown -R mysql:mysql /usr/local/binlog/
#配置⽂件
server_id=163
log_bin=/usr/local/binlog/mysql-bin
12345

Slave服務器配置

server_id=196
log_bin=/usr/local/binlog/mysql-bin
relay_log=/usr/local/relaylog/relay-bin
#當slave宕機後,如果relay log損壞瞭,導致⼀部分中繼⽇志沒有處理,則放棄所有未完成的,
重新獲取執⾏,保證完整性
relay_log_recovery=1 #讓從庫數據隻讀,super⽤戶,super_read_only=on
read_only=on
#從庫的復制鏈路服務不會隨數據庫重啟⽽重啟,需要⼿動啟動
skip_slave_start=on
#確保數據⼀致性,通過innoDB的崩潰恢復機制來保護哦
master_info_repository=TABLE
relay_log_info_repository=TABLE
#select * from mysql.slave_master_info;
#select * from mysql.slave_relay_log_info;

主庫授權

mysql> use msyql;
mysql> grant replication slave on *.* to 'syncuser'@'192.168.0.103'
identified by '123456';
mysql> flush privileges;
set global validate_password_policy=LOW;
set global validate_password_length=6;

初始化數據

mysqldump -uroot -p123456 --master-data=2 --single-transaction --routines -
-triggers --events --databases mydb > mydb.sql

創建復制鏈路

mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.0.102',
MASTER_PORT=3306,
MASTER_USER='syncuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=8122;
mysql> start slave;
mysql> show slave status \G;

從庫的binlog是否寫⼊?

默認情況下是不寫⼊的:因為寫⼊binlog會消耗I/O,所以性能會下降,如果需要在從庫上恢復數
據就到Relay Log⾥進⾏導出處理
直接在從庫上操作更⾏語句則會寫⼊binlog
如果就是需要寫⼊?在從庫的my.cnf : log_slave_updates=on #開啟同步並寫⼊binlog
開啟同步並寫⼊binlog應⽤於從到從的情況

問題:隻同步其中三個表

#Master配置⽂件
#不同步哪些數據庫
binlog-ignore-db=mysql
binlog-ignore-db=test
binlog-ignore-db=information_schema
#同步哪些庫
binlog-do-db=game
binlog-do-db=mydb

#Slave配置⽂件
#復制哪些數據庫
replicate-do-db=mydb
replicate-do-db=game
#不復制哪些數據庫
replicate-ignore-db=mysql
replicate-ignore-db=test

--replicate-wild-ignore-table=foo%.bar% 不復制使⽤表名稱以開頭foo且表名稱以開頭
的表的更新bar

1.4.2.1. GTID的⽅式來進⾏主從復制

不同點
	主從服務器的參數有不同的地⽅

#在上⾯的基礎上,需要給主從服務器都加上
gtid_mode=on
enforce_gtid_consistency=on #開啟強制GTID的⼀致性確保事務		

GTID下復制鏈路的啟動
mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.0.102',
MASTER_PORT=3306,
MASTER_USER='syncuser',
MASTER_PASSWORD='123456',
MASTER_AUTO_POSITION=1;

啟動GTID後以下數據庫操作不可⽤
	create table tableName.... select
	在⼀個事務中創建臨時表
	在⼀個transaction中更新innoDB表和myisam表

2. 數據主從復制⽅式的容災處理

2.1. MySQL⽀持的復制格式

2.1.1. 基於語句的復制(statement)

優點:記錄少,隻記錄執⾏語句,易懂
    缺點:insert into table1(create_time) values(now()),這個now就不是當時的時間瞭

2.1.2. 基於⾏復制(row)

優點:⼏乎沒有基於⾏復制⽆法處理的場景
    缺點:數據量太⼤瞭

2.1.3. 混合類型的復制(MIXED)

mixed格式默認采⽤statement,⽐如⽤到UUID(),ROW_COUNT()

2.1. MySQL主從復制模式

異步復制:MySQL默認就是異步復制,性能最好,但主從復制的數據不⼀致性概率最⼤
同步復制:當客戶端發過來⼀個請求後,隻有當所有的從庫都寫到Relay Log中,才回復給前端事
務完成,性能最差,但⼀致性很強
半同步復制:⾄少⼀個從庫完成Relay Log寫⼊後就返回事務完成給前端

主從上都要安裝
mysql> install plugin rpl_semi_sync_master soname='semisync_master.so'
rpl_semi_sync_master_enabled
rpl_semi_sync_master_timeout #單位是毫秒,如果主庫等待從庫回復超過這個時間就⾃動切換
為異步

到此這篇關於MySQL數據庫⾼可⽤HA實現的文章就介紹到這瞭,更多相關MySQL數據庫⾼可⽤HA內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: