MySQL高可用

MySQL高可用

  本文主要圍繞MHA和Galera Cluster來講述兩種方案在MySQL中是怎樣實現高可用的。

1.幾種常見的高可用模式

MMM: Multi-Master Replication Manager for MySQL,Mysql主主複製管理器是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)

官網: http://www.mysql-mmm.org
https://code.google.com/archive/p/mysql-master-master/downloads

MHA: Master High Availability,對主節點進行監控,可實現自動故障轉移至其它從節點;通過提升某一從節點爲新的主節點,基於主從複製實現,還需要客戶端配合實現,目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫,出於機器成本的考慮,淘寶進行了改造,目前淘寶TMHA已經支持一主一從

官網:https://code.google.com/archive/p/mysql-master-ha/

Galera Cluster:wsrep(MySQL extended with the Write Set Replication)通過wsrep協議在全局實現複製;任何一節點都可讀寫,不需要主從複製,實現多主讀寫
MHA集羣架構

2.MHA

MHA工作原理

1 從宕機崩潰的master保存二進制日誌事件(binlog events)
2 識別含有最新更新的slave
3 應用差異的中繼日誌(relay log)到其他的slave
4 應用從master保存的二進制日誌事件(binlog events)
5 提升一個slave爲新的master
6 使其他的slave連接新的master進行復制

MHA

MHA軟件由兩部分組成,Manager工具包和Node工具包
Manager工具包主要包括以下幾個工具:
masterha_check_ssh 檢查MHA的SSH配置狀況
masterha_check_repl 檢查MySQL複製狀況
masterha_manger 啓動MHA
masterha_check_status 檢測當前MHA運行狀態
masterha_master_monitor 檢測master是否宕機
masterha_master_switch 故障轉移(自動或手動)
masterha_conf_host 添加或刪除配置的server信息

MHA Node工具包:這些工具通常由MHA Manager的腳本觸發,無需人爲操作)主要包括以下幾個工具:

save_binary_logs 保存和複製master的二進制日誌
apply_diff_relay_logs 識別差異的中繼日誌事件並將其差異的事件應用於其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs 清除中繼日誌(不會阻塞SQL線程)

注意:爲了儘可能的減少主庫硬件損壞宕機造成的數據丟失,因此在配置MHA的同時建議配置成MySQL 5.5的半同步複製

MHA 自定義擴展:

secondary_check_script: 通過多條網絡路由檢測master的可用性
master_ip_ailover_script: 更新Application使用的masterip
shutdown_script: 強制關閉master節點
report_script: 發送報告
init_conf_load_script: 加載初始配置參數
master_ip_online_change_script:更新master節點ip地址

配置文件:

global配置,爲各application提供默認配置
application配置:爲每個主從複製集羣

實現MHA

在管理節點上安裝兩個包:

啓用epel源
mha4mysql-manager   
mha4mysql-node

在被管理節點安裝:

yum install mha4mysql-node

實現MHA

在管理節點建立配置文件

vim /etc/mastermha/app1.cnf 
[server default]
user=mhauser
password=magedu
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=magedu
ping_interval=1

[server1]
hostname=192.168.8.17
candidate_master=1
[server2]
hostname=192.168.8.27
candidate_master=1
[server3]
hostname=192.168.8.37

實現Master

vim /etc/my.cnf
[mysqld]
log-bin
server_id=1         
skip_name_resolve=1 MHA必須設

mysql>show master logs
mysql>grant replication slave on *.* to repluser@'192.168.8.%' identified by ‘magedu'; 用於從服務器複製
mysql>grant all on *.* to mhauser@'192.168.8.%’identified by‘magedu';  管理賬號

實現slave

vim /etc/my.cnf
[mysqld]
server_id=2 不同節點此值各不相同
log-bin
read_only
relay_log_purge=0
skip_name_resolve=1

mysql>CHANGE MASTER TO MASTER_HOST=‘MASTER_IP', 
MASTER_USER='repluser', MASTER_PASSWORD=‘magedu', 
MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=245;

實現MHA

在所有節點實現相互之間ssh key驗證  注意時間的同步   

Mha驗證和啓動
    masterha_check_ssh --conf=/etc/mastermha/app1.cnf
    masterha_check_repl --conf=/etc/mastermha/app1.cnf
    masterha_manager --conf=/etc/mastermha/app1.cnf

排錯日誌:
    /data/mastermha/app1/manager.log

3.Galera Cluster

Galera Cluster:集成了Galera插件的MySQL集羣,是一種新型的,數據不共享的,高度冗餘的高可用方案,目前Galera Cluster有兩個版本,分別是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即採用multi-master的集羣架構,是一個既穩健,又在數據一致性、完整性及高性能方面有出色表現的高可用解決方案
右圖圖示:三個節點組成了一個集羣,與普通的主
從架構不同,它們都可以作爲主節點,三個節點是對等的,稱爲multi-master架構,當有客戶端要寫入或者讀取數據時,連接哪個實例都是一樣的,讀到的數據是相同的,寫入某一個節點之後,集羣自己會將新數據同步到其它節點上面,這種架構不共享任何數據,是一種高冗餘架構

Galera Cluster特點

多主架構:真正的多點讀寫的集羣,在任何時候讀寫數據,都是最新的
同步複製:集羣不同節點之間數據同步,沒有延遲,在數據庫掛掉之後,數據不會丟失
併發複製:從節點APPLY數據時,支持並行執行,更好的性能
故障切換:在出現數據庫故障時,因支持多點寫入,切換容易
熱插拔:在服務期間,如果數據庫掛了,只要監控程序發現的夠快,不可服務時間就會非常少。在節點故障期間,節點本身對集羣的影響非常小
自動節點克隆:在新增節點,或者停機維護時,增量數據或者基礎數據不需要人工手動備份提供,Galera Cluster會自動拉取在線節點數據,最終集羣會變爲一致
對應用透明:集羣的維護,對應用程序是透明的

Galera Cluster工作過程

Galera Cluster官方文檔:

http://galeracluster.com/documentation-webpages/galera-documentation.pdf
http://galeracluster.com/documentation-webpages/index.html 
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/

Galera Cluster包括兩個組件

Galera replication library (galera-3) 
WSREP:MySQL extended with the Write Set Replication 

WSREP複製實現:

percona-cluster
MariaDB-Cluster mariadb集羣專業版

注意:都至少需要三個節點,不能安裝mariadb-server

MySQL複製

yum install MariaDB-Galera-server  需要官方yum源
vim /etc/my.cnf.d/server.cnf
[galera]
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.8.7,192.168.8.17,192.168.8.27"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

下面配置可選項
wsrep_cluster_name = ‘mycluster‘默認my_wsrep_cluster
wsrep_node_name = 'node1'
wsrep_node_address = ‘192.168.8.7'

MySQL複製

首次啓動時,需要初始化集羣,在其中一個節點上執行命令

/etc/init.d/mysql start --wsrep-new-cluster

而後正常啓動其它節點

service mysql start

查看集羣中相關係統變量和狀態變量

SHOW VARIABLES LIKE 'wsrep_%';
SHOW STATUS LIKE 'wsrep_%';
SHOW STATUS LIKE 'wsrep_cluster_size';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章