Mysql實戰之高可用MHA

主節點高可用

MHA是一款開源的MySQL的高可用程序,他為MySQL主從復制架構提供了automating master failover功能。MHA在監控到master節點故障時,會提升其中擁有最新數據的slave節點成為新的master節點。在此期間,MHA會通過其他從節點獲取額外信息來避免一致性方面的問題。MHA還提供了master節點切換功能,即按需切換master/slave節點。

MHA服務有兩種角色,MHA Manager(管理節點)和HMA Node(數據節點)

  • MHA Manager:通常部署在一臺獨立機器上管理多個master/slave集群,每個master/slave集群乘坐一個application;
  • MHA node:運行在每臺MySQL服務器上(master/slave/manager),他通過監控解析和清理logs功能的腳本來加快故障轉移。

MHA組件說明

Manager節點:
-masterha_check_ssh:MHA依賴的SSH環境檢測工具;
-masterha_check_repl:MySQL復制環境檢測工具;
-masterha_manager:MHA服務主程序;
-masterha_check_status:MHA運行狀態探測工具;
-masterha_master_monitor:MySQL master節點可用性檢測工具;
-masterha_master_switch:master節點切換工具;
-masterha_conf_host:添加或刪除配置的節點;
-masterha_stop:關閉MHA服務的工具;

Node節點:
-save_binary_logs:保存和復制master的二進制日志;
-apply_diff_relay_logs:識別差異的中繼日志事件并用于其他slave;
-fiter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不再使用這個工具);
-purge_relay_logs:清除中繼日志(不會阻塞SQL線程);

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

高可用MHA架構部署及測試

節點角色

mysql-master 172.16.252.82
mysql-slave1 172.16.252.92
mysql-slave2 172.16.252.100
manager      172.16.252.67

配置各節點之間可以通過主機名通信

[root@manager  ~]# vim /etc/hosts
172.16.252.82 mysql-master
172.16.252.92 mysql-slave1
172.16.252.100 mysql-slave2
172.16.252.67 manager 
其他各主機依次配置主機名解析文件

mysql-master

[root@mysql-master ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 1
relay-log = relay-log
log-bin = master-log
skip_name_resolve = ON
innodb_file_per_table = ON
[root@mysql-master ~]# systemctl start mariadb

[root@mysql-master ~]# mysql
授權一個有權限做主從復制的用戶
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';
MariaDB [(none)]> FLUSH PRIVILEGES;

查看master節點的狀態,記錄二進制文件的位置信息,用于從節點的復制起點
MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000001 |      501 |              |                  |
+-------------------+----------+--------------+------------------+

mysql-slave1

[root@mysql-slave1 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 2
relay-log = relay-log
log-bin = master-log
skip_name_resolve = ON
innodb_file_per_table = ON
read_only = ON
relay_log_purge = OFF
[root@mysql-slave1 ~]# systemctl start mariadb   

[root@mysql-slave ~]# mysql
MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'read_only';  \\查看數據庫為只讀
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON   |
+---------------+-------+
連接主節點數據庫
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.198.139',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=501;
啟動從節點復制進程
MariaDB [(none)]> START SLAVE;
查看SLAVE節點的狀態
MariaDB [(none)]> SHOW SLAVE STATUS\G;
連接manager的用戶
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

mysql-slave2

root@mysql-slave2 ~]# vim /etc/my.cnf.d/server.cnf 
[mysqld]
server_id = 3
relay-log = relay-log
log-bin = master-log
skip_name_resolve = ON
innodb_file_per_table = ON
read_only = ON
relay_log_purge = OFF
[root@mysql-slave2 ~]# systemctl start mariadb  
[root@mysql-slave ~]# mysql
MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'read_only';  \\查看數據庫為只讀
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | ON   |
+---------------+-------+
連接主節點數據庫
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.198.139',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=501;
啟動從節點復制進程
MariaDB [(none)]> START SLAVE;
查看SLAVE節點的狀態
MariaDB [(none)]> SHOW SLAVE STATUS\G;
連接manager的用戶
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

mysql-master(master/slave上都需有此用戶權限來連接manager)

MariaDB [(none)]> GRANT ALL ON *.* TO 'mha'@'172.16.%.%' IDENTIFIED BY 'mhapass';

MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

MHA安裝

github官網下載manager到本地
[root@manager ~]# ls mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm 
mha4mysql-manager-0.56-0.el6.noarch.rpm  
mha4mysql-node-0.56-0.el6.noarch.rpm
[root@manager ~]# yum install ./mha4mysql-*   安裝MHA程序包

復制mha4mysql-node-0.56-0.el6.noarch.rpm程序包到各節點上
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-master:/root
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-slave1:/root
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-slave2:/root

mysql-master、mysql-slave1和mysql-slave2節點依次安裝mha4mysql-node-0.56-0.el6.noarch.rpm程序包
[root@mysql-master ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm 
[root@mysql-slave1 ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mysql-slave2 ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm
配置各節點之間SSH互信的通信環境

MHA

[root@manager ~]# ssh-keygen -t rsa -P ''  生成ssh秘鑰文件
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager
[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-master:/root/.ssh
[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-slave1:/root/.ssh
[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-slave2:/root/.ssh

[root@mysql-master ~]# ssh -o StrictHostKeyChecking=no mysql-slave1 直接連接mysql-slave主機,無詢問,無提示

初始化MHA

manager
    [root@manager ~]# mkdir /data/masterha
    [root@manager ~]# mkdir /data/masterha/app
    [root@manager ~]# mkdir /etc/masterha
    [root@manager ~]# vim /etc/masterha/app.cnf
    [server default]
    user=mha
    password=mhapass  \\node節點連接manager的用戶
    manager_workdir=/data/masterha/app
    manager_log=/data/masterha/app/manager.log
    remote_workdir=/data/masterha/app
    ssh_user=root
    repl_user=repluser
    repl_password=replpass
    ping_interval=1

    [server1]
    hostname=172.16.252.82
    candidate_master=1

    [server2]
    hostname=172.16.252.92
    candidate_master=1

    [server3]
    hostname=172.16.252.100
    candidate_master=1

測試后端主機的集群

[root@manager ~]# masterha_check_repl --conf=/etc/masterha/app.cnf  

測試運行MHA程序

[root@manager ~]# masterha_manager --conf=/etc/masterha/app.cnf 

查看MHA集群的狀態

[root@manager ~]# masterha_check_status
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容

  • 文/Bruce.Liu1 文章大綱MHA簡介1.1. mha組件介紹1.2. 背景和目標MHA原理2.1. MHA...
    BruceLiu1閱讀 10,364評論 4 19
  • 架構圖 故障轉移過程 介紹 MHA(Master High Availability)目前在MySQL高可用方面是...
    mvictor閱讀 3,829評論 2 3
  • 在某些條件下,經濟的外部性或曰非效率可以通過當事人的談判而得到糾正,從而達到社會效益最大化。比較流行的說法是...
    木頭的隨筆閱讀 1,569評論 0 1
  • 剛上大學的學子這會應該是剛剛經歷完名叫軍訓的階段,從最開始的新鮮開心到堅持不懈再到最后的不舍,這是每個上大學的人都...
    凸涂土兔閱讀 1,294評論 9 29
  • 一天,一個博士坐船欣賞風景。 在船上,博士問漁夫:“你會生物嗎?”漁夫說不會,博士就說:“那你的生命就要失去4分之...
    沅沨閱讀 409評論 0 0