maraidb高可用——MHA

基礎知識

MHA簡單功能介紹

MHA是目前實現mysql高可用的一種流行的解決方案,MHA能夠在較短的時間內實現自動故障檢測和故障轉移,通常在10-30秒以內;在複製框架中,MHA能夠很好地解決複製過程中的數據一致性問題,由於不需要在現有的replication中添加額外的服務器,僅需要一個manager節點,而一個Manager能管理多套複製,所以能大大地節約服務器的數量;另外,安裝簡單,無性能損耗,以及不需要修改現有的複製部署也是它的優勢之處。
MHA還提供在線主庫切換的功能,能夠安全地切換當前運行的主庫到一個新的主庫中(通過將從庫提升爲主庫),大概0.5-2秒內即可完成。

MHA工作原理

1.從宕機崩潰的master上保存二進制日誌文件;
2.識別含有最新更新的slave;
3.應用差異的中繼日誌到其他的slave上;
4.應用從master上保存的二進制日誌文件;
5.自動提升一個slave作爲新的master工作;
6.使得其他的slave連接到新的master進行復制。
maraidb高可用——MHA

MHA的組成

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

Node工具包:這些工具通常由MHA Manager的腳本觸發,無需人爲操作)主
要包括以下幾個工具:
1.save_binary_logs 保存和複製master的二進制日誌
2.apply_diff_relay_logs 識別差異的中繼日誌事件並將其差異的事件應用於其他
的slave
3.filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用這個工具)
4.purge_relay_logs 清除中繼日誌(不會阻塞SQL線程)
注意:爲了儘可能的減少主庫硬件損壞宕機造成的數據丟失,因此在配置MHA
的同時建議配置成的半同步複製

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

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

模擬實驗

實驗架構圖

Manager 192.168.99.130
master 192.168.99.131
slave1 192.168.99.135
slave2 192.168.99.136

圖示如下:

maraidb高可用——MHA

實驗流程

準備工作

這裏準備了四臺centos7主機,分別作爲manager,master,slave1和slave2。數據庫使用的是maraidb10.2.15

做基本的軟件環境清理,4臺主機都要進行

#關閉selinux
setenforce 0
#清空防火牆規則
 iptables -F
 iptables -X
#進行時間同步,由於是做集羣實驗,所以時間不同步會導致實驗失敗。
ntpdate cn.pool.ntp.org

做四臺主機基於ssh的相互訪問

# 生成密鑰
ssh-keygen
# 配置ssh訪問
ssh-copy-id 192.168.99.130
scp -pr .ssh 192.168.99.131:/root/
scp -pr .ssh 192.168.99.135:/root/
scp -pr .ssh 192.168.99.136:/root/

完成後,進行驗證
ssh 192.168.99.131
ssh 192.168.99.135
ssh 192.168.99.136
...

配置管理節點

安裝mha軟件包,需要有epel源的支持。

yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm -y 

創建對應目錄

mkdir /etc/mha
mkdir /mha/test -pv

修改配置文件

vim vim /etc/mha/test.cnf
# 填入以下字段
[server default]
#數據庫的管理賬號和密碼
user=mha
password=mha

#manager使用的工作目錄,如果沒有設置,默認使用/var/tmp.
manager_workdir=/mha/test/
#MHA manager日誌文件的絕對目錄和文件名,如果沒有設置,那麼將直接打印到標準輸出和標準錯誤輸出.當執行交互式的failover時,MHA manager將會忽略manager_log設置,直接答應到標準輸出和標準錯誤輸出.
manager_log=/mha/test/manager.log
#每個MHA node上,MHA工作使用的目錄的絕對路徑.如果目錄不存在,MHA會自動創建,如果權限不夠,那麼MHA node會意外終止,注意MHA manager和MHA node都不會檢查這個目錄的磁盤可用空間,你需要自己保證有足夠的可用空間.默認的remote_workdir是'/var/tmp'.
remote_workdir=/mha/test/
# 基於ssh登陸的賬號
ssh_user=root
#進行數據庫備份的賬號和密碼
repl_user=slave
repl_password=slave
#這個參數聲明MHA manager pings(通過執行sql來ping) master的間隔.當連續三次ping失敗,MHA manager認爲這個Mysql master宕機,從宕機到檢測到宕機,最大的消耗時間是這個參數的四倍,這個參數默認值是3(3秒).如果MHA manager因爲權限問題多次連接失敗,這不認爲master dead
ping_interval=1
# 指定二進制日誌的目錄,如果參數的主要目的是在master mysql宕機以後,爲了通過ssh拷貝需要的binlog event.這個參數是需要的,因爲當mysql宕機以後,沒法自動獲取binary log的目錄。
#默認情況下,master_binlog_dir的值是"/var/lib/mysql/,/var/log/mysql/",/var/lib/mysql/是大部分mysql發佈版本的默認mysql輸出目錄,你可以設置多個目錄,使用逗號分隔.比如(/data1,/data2,/data3)
master_binlog_dir=/data/binlog/
#節點配置
[server1]
hostname=192.168.99.131
#聲明可以作爲主的資格
candidate_master=1
[server2]
hostname=192.168.99.135
candidate_master=1
[server3]
hostname=192.168.99.136

管理節點基本配置完畢
maraidb高可用——MHA

節點配置

安裝node包

在master,slave1,slave2上安裝mha節點包

yum install  mha4mysql-node-0.56-0.el6.noarch.rpm

master節點配置

編輯數據庫配置文件

vim /etc/my.cnf

[mysqld]
# 數據和二進制日誌分離
datadir=/data/mysql
log_bin=/data/binlog/mysql-bin
#配置唯一id
server_id=1
#跳過名稱解析,這裏必須配置
skip_name_resolve=1
#關閉清理中繼日誌
relay_log_purge=0

maraidb高可用——MHA
編輯完配置文件後,啓動數據庫.

systemctl start mariadb

進行管理賬號和備份賬號的授權

#這裏先查看二進制日誌是爲了,之後從數據庫可以直接同步主庫的賬號授權信息。
MariaDB [(none)]>show master logs;
MariaDB [(none)]> grant replication slave on *.* to slave@'192.168.99.%' identified by'slave';
MariaDB [(none)]> grant all on *.* to mha@'192.168.99.%' identified by 'mha';

推薦開啓半同步複製,mariadb10.3無需安裝插件可以直接命令開啓。

# 安裝半同步複製的主從插件
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 
# 啓動半同步複製
MariaDB [(none)]>  SET GLOBAL rpl_semi_sync_master_enabled=1;
MariaDB [(none)]>  SET GLOBAL rpl_semi_sync_slave_enabled=1;
#查看狀態
MariaDB [(none)]> show variables like '%semi%';

slave節點配置

編輯數據庫配置文件

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
log_bin=/data/binlog/mysql-bin
#不同節點id號必須不同
server_id=2
skip_name_resolve=1
relay_log_purge=0

啓動數據庫

systemctl start mariadb

開啓半同步複製

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 
MariaDB [(none)]>  SET GLOBAL rpl_semi_sync_master_enabled=1;
MariaDB [(none)]>  SET GLOBAL rpl_semi_sync_slave_enabled=1;

配置同步信息

MariaDB [(none)]> change master to \
    -> master_host='192.168.99.131',
    -> master_user='slave',
    -> master_password='slave',
        #二進制日誌文件和起始點爲之前,在master節點查看到的信息,不能寫錯
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=703;

啓動同步並且查看同步信息

MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G

管理節點檢查狀態並啓動mha

#檢查ssh密鑰登陸是否正常
masterha_check_ssh --conf=/etc/mha/test.cnf 
#檢查備份配置是否正常
masterha_check_repl --conf=/etc/mha/test.cnf 
#啓動mha開啓監控,由於默認在前臺執行,所以可以考慮轉到後臺或者開啓會話再執行
masterha_manager --conf=/etc/mha/test.cnf   啓動mha

MHA配置完成

注意:

1.在master宕機後,mha會自動挑選備用節點中有資格的節點成爲新的主;
2.宕機的節點在修復後需要手動加入集羣,要配置爲從服務器;
3.如果在宕機期間數據有了更新,要手動同步新 主的數據並啓動同步,作爲新從;
4.修復完成後,想重啓mha監控要刪除/mha/test/目錄下的complete結尾的文件,否則無法重啓監控;
5.修復完成重新運行監控命令
masterha_manager --conf=/etc/mha/test.cnf

mha的rpm包下載在google code,不過版本有點老,這裏提供我這邊使用包
官方下載
https://code.google.com/archive/p/mysql-master-ha/downloads
個人分享,centos7 也可以安裝
https://pan.baidu.com/s/1AGKc7iSZBUAonO9QSqwF-Q

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