MHA安装部署

1.概述

       MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

       MHA工作原理总结为以下几条:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log)到其他slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新master;

(6)使用其他的slave连接新的master进行复制。

       本文主要讲述生产线上MHA安装部署步骤,以及生产线上MHA安装部署规范。

安装MHA步骤

安装部署要求先安装MySQL一主多从架构,MySQL主从部署此处不作详述。

安装前环境准备

apt-get install -y libdbd-mysql-perl libconfig-tiny-perl liblog-dispatch-perl libparallel-forkmanager-perl libmodule-install-perl

apt-get install -y perl-modules

cpan Module::Install

以上3步骤安装MHA相关依赖包。

配置ssh免密登录

MHA需要通过管理机名密登录到其它主机实现相关操作,因此需要配置各主机间的名密登录。包括:管理机能免密登录到主、从机,主从库之前能名密登录。

执行ssh-keygen,按下回车,即可生成公钥。

cd /root/.ssh

cat id_rsa.pub 

查看生成公钥。

              然后将相关内容追加至远程主机/root/.ssh/authorized_keys文件下。

              执行ssh 10.1.8.70查看登录是否正常。然后根据需要,配置各主机间名密登录。


安装manager

安装manager需要下载MHA软件包,但源码包:

/usr/local/share/perl/5.18.2/MHA/DBHelper.pm

/usr/local/share/perl/5.18.2/MHA/HealthCheck.pm

两个文件有bug,导致MHA连接数据库失败而造成数据库切换失败。

需要修改HealthCheck.pm文件第98行:

将   "DBI:mysql:;host=[$self->{ip}];" 修改成:

"DBI:mysql:;host=$self->{ip};"

即将中括号”[]”去掉,否则数据库连接会失败。

同样,DBHelper.pm文件,158 198现行需要同样作出修改。

以下给出修改后的源码包:

解压安装

tar –xzvf mha4mysql-manager-master-debug.tar

cd mha4mysql-manager-master

执行:perl Makefile.PL

make && make install

安装node

根据2.1节所述安装相关perl模块。然后上传node包:

解压:unzip  mha4mysql-node-master-0.57.zip

cd mha4mysql-node-master

perl Makefile.PL

make && make install

2.5数据库权限配置

       1.配置同步权限:从库也需要给主库相关的权限:

GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'10.1.8.71' IDENTIFIED BY PASSWORD  '*AAB87B764AC144C101917F99B63F1B2A46B41D1C' ;

2.主从库给MHA管理机root权限:

       create user 'hauser'@'10.1.8.72' identified by PASSWORD '*87EB1403CFDEF808C504AE04319E580EF2177C18';

GRANT ALL PRIVILEGES ON *.* TO 'hauser'@'10.1.8.72' ;

   MHA配置文件

主要config文件参数

[server default]

manager_workdir=/data/mha/worddir   ##manager工作目录

remote_workdir=/data/mha/remote/   ##保存远程binlog目录

manager_log=/data/mha/log/managerlog/mha-armdb.log  ##MHA日志

ssh_user=root        ##连接远程所用用户

ssh_port=22         ##ssh端口

repl_user=repuser    ##复制user

repl_password=repuser21cn   ##复制密码

#multi_tier_slave=1

ping_interval=1 

ping_type=CONNECT

master_ip_failover_script="/opt/MHA/worddir/armdb/master_ip_failover   --orig_master_ssh_port=22"      ###自动切换脚本

#master_ip_online_change_script=/opt/MHA/mha_work_dir/master_ip_online_change 

#secondary_check_script=masterha_secondary_check -s 192.168.76.134 --user=root      ##备机作切换,防止脑裂(此处由于资源限制没有设置)

[server1]

user=hauser    ##MHA远程登录MySQLoot权限

password=xxxxx    ##MHA远程登录MySQL

candidate_master=1    ##是否可以选为主

ignore_fail=1        

check_repl_delay = 1

hostname=10.1.8.70

#ip=10.1.8.70

port=3301

master_binlog_dir=/data/mysql/mysql3301/logs/binlog/   ##MySQLbinlog位置

[server2]

user=hauser

password=xxx

candidate_master=1

ignore_fail=1

check_repl_delay = 1

hostname=10.1.8.71

#ip=10.1.8.71

port=3301

master_binlog_dir=/data/mysql/mysql3301/logs/binlog/

自动切换脚本

自动切换脚本详见附件,此处需要注意的是:

my $vip = '10.1.8.74/24';

my $key = "2";

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

切换脚本需要修改VIP,其中VIP需要指定子网掩码。

运行MHA

nohup /usr/local/bin/masterha_manager    --conf=/opt/MHA/worddir/armdb/mha-armdb.cnf   --ignore_last_failover  < /dev/null > /opt/MHA/worddir/armdb/manager.log 2>&1 &

MySQL relay log purge

1.数据库新增权限:

grant super,reload on *.* to hauser@10.1.8.70 identified by xxxxxxxx;

grant  select on mysql.slave_relay_log_info to hauser@10.1.8.70 identified by 'cisnewLYMwnL';

2. 改/usr/local/bin/purge_relay_logs

/usr/local/bin/purge_relay_logs源码(目前 只发现0.57有这个BUG,需要按下面的方法修改一下)

将第178行: my $dsn = "DBI:mysql:;host=[$opt{host}];port=$opt{port}";

改成:  my $dsn = "DBI:mysql:;host=$opt{host};port=$opt{port}";

3.建脚本

cat>/data/pufan/scripts/clearRelay

#!/usr/bin/perl

use 5.10.1;

use strict;

use POSIX;

use File::Path qw( mkpath );

my $user="hauser";

my $passwd="xxxxxx";

my $host="10.1.8.71";

my $port=3301;

my $purge="/usr/local/bin/purge_relay_logs";

my $logPath="/data/mha/arm/logs";

mkpath "$logPath/tmpRelayLog" ||die;

my $year_month_day=strftime("%Y%m%d",localtime());

open ERROR,'>>',"$logPath/purge_relay_logs.log.$year_month_day" or die "$!\n";

!system "$purge --user=$user --password=$passwd  --host=$host  --port=$port  --workdir=$logPath/tmpRelayLog --disable_relay_log_purge >> $logPath/purge_relay_logs.log.$year_month_day 2>&1" or print ERROR "\n purge error !\n";

加入crontab

#MHA clear mysql relay log

0 6 * * * perl /data/pufan/scripts/clearRelay &

生产部署规范

本章主要说明MHA生产部署规范,主要包括各目录规范;权限管理规范;配置文件规范等。

目录规范

配置文件目录:

/opt/MHA/worddir/

该目录下,根据不同项目,创建不同目录及配置文件,以arm为例,配置文件及配置目录为:/opt/MHA/worddir/armdb/mha-armdb.cnf

数据目录:/data/mha

log:保存日志文件

remote:保存远程binlog文件

worddir:mha工作目录

权限管理规范

1.配置文件有比较敏感信息,需要设置权限位为600。

2.mha管理数据库用户hauser需要指定给mha主机权限,不能出现通配符。

运行规范

统一放后台运行:

nohup /usr/local/bin/masterha_manager    --conf=/opt/MHA/worddir/armdb/mha-armdb.cnf   --ignore_last_failover  < /dev/null > /opt/MHA/worddir/armdb/manager.log 2>&1 &

切换测试

部署好MHA后,关掉主库,观察切换情况,查看日志输出。若切换失败,查看日志并排查原因。

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

推荐阅读更多精彩内容