MySQL的高可用——MHA

在之前的博客中,介绍了mysql的主从模型以及深层次的mysql的读写分离插件——ProxySQL,让我们可以很大程度上提升数据库服务器的性能和优化用户的体验,但是,我们对于数据库的可靠性似乎缺了一点,因为一旦master数据库服务器宕机,我们的数据库基本上就是瘫痪了,所以,我们需要一个解决方案针对于数据库服务器的可靠性。

       MHA(MySQL|Master  High Availability)是一种基于主从模型的相当成熟的一种解决方案,我们对于master做一个高可用,使得哪怕在master数据库服务器宕机时,我们的slave可以及时顶上,直接变成master主机,保证服务可靠的运行;


由于mha4mysql不存在于镜像仓库和epel中,所以需要下载rpm包,我下载的是

mha4mysql-manager-0.56-0.el6.noarch.rpm

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


建议mha服务器和master服务器分开;否则master物理宕机的话,mha也会宕机;

Master和slave上安装mha4mysql-node节点;

mha服务器两个rpm包都需要安装;


MHA:   CentOS 7.5B  172.16.75.2

Master: CentOS 7.5D  172.16.75.4

Slave:   CentOS 7.5C  172.16.75.3


三台主机都需要进行SSH免密通信


因为如果master宕机,slave需要顶上,所以slave和master都需要开启二进制日志和中继日志;


Master配置文件:

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# Settings user and group are ignored when systemd is used.# If you need to run mysqld under a different user or group,# customize your systemd unit file for mariadb according to the# instructions in http://fedoraproject.org/wiki/Systemdinnodb_file_per_table=ONskip_name_resolve=ONserver_id=401log_bin=/var/lib/mysql/binlogsync_binlog=1innodb_flush_log_at_trx_commit=1relay_log_purge=0relay_log=relay_log[mysqld_safe]log-error=/var/log/mariadb/mariadb.logpid-file=/var/run/mariadb/mariadb.pid## include all files from the config directory#!includedir /etc/my.cnf.d


Slave配置文件:

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# Settings user and group are ignored when systemd is used.# If you need to run mysqld under a different user or group,# customize your systemd unit file for mariadb according to the# instructions in http://fedoraproject.org/wiki/Systemdinnodb_file_per_table=ONskip_name_resolve=ONserver_id=301read_only=ONrelay_log=slavelogrelay_log_purge=0log_bin=binlog[mysqld_safe]log-error=/var/log/mariadb/mariadb.logpid-file=/var/run/mariadb/mariadb.pid## include all files from the config directory#!includedir /etc/my.cnf.d

然后其他配置不变,搭建主从模型;


1.下载完mha的rpm包后,分别在对应的节点安装对应的安装包,通过查看mha4mysql-manager配置文件,全是二进制执行脚本。所以mha的配置文件需要自己写;


[root@slave1 ~]# rpm -ql mha4mysql-manager/usr/bin/masterha_check_repl/usr/bin/masterha_check_ssh/usr/bin/masterha_check_status/usr/bin/masterha_conf_host/usr/bin/masterha_manager/usr/bin/masterha_master_monitor/usr/bin/masterha_master_switch/usr/bin/masterha_secondary_check/usr/bin/masterha_stop/usr/share/man/man1/masterha_check_repl.1.gz/usr/share/man/man1/masterha_check_ssh.1.gz/usr/share/man/man1/masterha_check_status.1.gz/usr/share/man/man1/masterha_conf_host.1.gz/usr/share/man/man1/masterha_manager.1.gz/usr/share/man/man1/masterha_master_monitor.1.gz/usr/share/man/man1/masterha_master_switch.1.gz/usr/share/man/man1/masterha_secondary_check.1.gz/usr/share/man/man1/masterha_stop.1.gz/usr/share/perl5/vendor_perl/MHA/Config.pm/usr/share/perl5/vendor_perl/MHA/DBHelper.pm/usr/share/perl5/vendor_perl/MHA/FileStatus.pm/usr/share/perl5/vendor_perl/MHA/HealthCheck.pm/usr/share/perl5/vendor_perl/MHA/ManagerAdmin.pm/usr/share/perl5/vendor_perl/MHA/ManagerAdminWrapper.pm/usr/share/perl5/vendor_perl/MHA/ManagerConst.pm/usr/share/perl5/vendor_perl/MHA/ManagerUtil.pm/usr/share/perl5/vendor_perl/MHA/MasterFailover.pm/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm/usr/share/perl5/vendor_perl/MHA/MasterRotate.pm/usr/share/perl5/vendor_perl/MHA/SSHCheck.pm/usr/share/perl5/vendor_perl/MHA/Server.pm/usr/share/perl5/vendor_perl/MHA/ServerManager.pm

2.创建mha相对应的配置文件;

[root@slave1 ~]# mkdir /etc/mha[root@slave1 ~]# vim /etc/mha/app1.cnf[root@slave1 ~]#[root@slave1 ~]# cat /etc/mha/app1.cnf[server default]user=mha#登录用户password=mhapassmanager_workdir=/data/masterha/app1manager_log=/data/masterha/app1/manager.logremote_workdir=/data/masterha/app1ssh_user=rootrepl_user=repuser#master做replication slave授权的用户repl_password=123456ping_interval=1[server1]hostname=172.16.75.4candidate_master=1[server2]hostname=172.16.75.3candidate_master=1[root@slave1 ~]#[root@slave1 ~]# mkdir -pv /data/masterha/app1mkdir: 已创建目录"/data"mkdir: 已创建目录"/data/masterha"mkdir: 已创建目录"/data/masterha/app1"

3.根据配置文件内容,master还需要对mha做一个授权用户。

Master mysql:

MariaDB[(none)]>grant all on *.* to'mha'@'%'identified by'mhapass';Query OK, 0 rows affected(0.08 sec)


4.在mha服务器上进行ssh测试和repl测试(最后显示 OK即可);

[root@slave1 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnfWed Nov  7 20:46:17 2018 -[warning]Global configurationfile/etc/masterha_default.cnf not found. Skipping.Wed Nov  7 20:46:17 2018 -[info]Reading application default configuration from /etc/mastermha/app1.cnf..Wed Nov  7 20:46:17 2018 -[info]Reading server configuration from /etc/mastermha/app1.cnf..Wed Nov  7 20:46:17 2018 -[info]Starting SSH connection tests..Wed Nov  7 20:46:18 2018 -[debug]Wed Nov  7 20:46:17 2018 -[debug]Connecting via SSH from root@172.16.75.4(172.16.75.4:22)to root@172.16.75.3(172.16.75.3:22)..Wed Nov  7 20:46:17 2018 -[debug]ok.Wed Nov  7 20:46:18 2018 -[debug]Wed Nov  7 20:46:17 2018 -[debug]Connecting via SSH from root@172.16.75.3(172.16.75.3:22)to root@172.16.75.4(172.16.75.4:22)..Wed Nov  7 20:46:18 2018 -[debug]ok.Wed Nov  7 20:46:18 2018 -[info]All SSH connection tests passed successfully.

[root@slave1 ~]# masterha_check_repl  --conf=/etc/mha/app.cnf…172.16.75.4(172.16.75.4:3306)(current master)+--172.16.75.3(172.16.75.3:3306)Thu Nov  8 09:37:35 2018 -[info]Checking replication health on 172.16.75.3..Thu Nov  8 09:37:35 2018 -[info]ok.Thu Nov  8 09:37:35 2018 -[warning]master_ip_failover_script is not defined.Thu Nov  8 09:37:35 2018 -[warning]shutdown_script is not defined.Thu Nov  8 09:37:35 2018 -[info]Gotexitcode 0(Not master dead). MySQL Replication Health is OK.

5.启动mha4mysql进程;

[root@slave1 ~]# nohup masterha_manager --conf=/etc/mha/app.cnf > /data/masterha/app1/manager.log  2>&1 &[1]85154


6.检测mha的状态;

[root@slave1 ~]# masterha_check_status --conf=/etc/mha/app.cnfapp(pid:85154)is running(0:PING_OK), master:172.16.75.4


7.测试:直播抓娃娃APP找上海捌跃网络科技有限公司

       把master的mysql进程关掉;然后查看manager上的mha日志:

Master:

[root@slave2 ~]# systemctl stop mariadb


Manager:

[root@slave1 ~]# masterha_check_status --conf=/etc/mha/app.cnfapp master is down and failover is running(50:FAILOVER_RUNNING). master:172.16.75.4[root@slave1 ~]# cat /data/masterha/app1/manager.log…… ----- Failover Report ----- app: MySQL Master failover 172.16.75.4(172.16.75.4:3306)to 172.16.75.3(172.16.75.3:3306)succeeded Master 172.16.75.4(172.16.75.4:3306)is down!Check MHA Manager logs at slave1.ljy.com:/data/masterha/app1/manager.logfordetails. Started automated(non-interactive)failover.The latest slave 172.16.75.3(172.16.75.3:3306)has all relay logsforrecovery.Selected 172.16.75.3(172.16.75.3:3306)as a new master.172.16.75.3(172.16.75.3:3306): OK: Applying all logs succeeded.Generating relaydifffiles from the latest slave succeeded.172.16.75.3(172.16.75.3:3306): Resetting slave info succeeded.Master failover to 172.16.75.3(172.16.75.3:3306)completed successfully.

最后,当出现Master failover to 172.16.75.3(172.16.75.3:3306) completed successfully.

就意味着我们的master已经转到slave上了,虽然之前的Master数据库服务器down掉,但是我们通过mha及时的切换到slave主机上,保证数据库服务器的可靠性。


遇到的大坑:Checking if super_read_only is defined and turned on..DBD::mysql::st execute failed: Unknown system variable'super_read_only' at /usr/share/perl5/vendor_perl/MHA/SlaveUtil.pm line 245.

一开始用的0.58版本的mha,结果在进行repl检测的时候,出现了“super read only”的错误,这是因为我们的mysql版本和mha版本有不兼容的情况,换用0.56的版本就可以,因为0.58版本的mha兼容的是mariadb-10以后版本有”super_read_only”选项,我们正常CentOS-7系列主机上安装的MariaDB-5.56没有”super_read_only”选项,所以检测repl权限时,会说我们没有设置此选项;


总之,mha在生产环境中有很高的必要性,我们需要Proxysql做读写分离提升服务器型男的同时,又需要mha对master做高可用来保证服务器的可靠性,保障我们的数据库不间断的运行;

转自:http://blog.51cto.com/liujingyu/2314335

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容