MySQL MHA高可用

第1章 MySQL高可用介绍

1.1 企业高可用评估标准

评估标准是 全年无故障率指标:

3个9 99.9% 0.1%36524*60 = 525.6min (非计划停机时间)

4个9 99.99% 0.01% = 52.56min 互联网级别

5个9 99.999% 0.001% = 5.256min 金融级别

1.2 高可用产品介绍

常见产品:

主备系统类:

  1. KA+双主结构+自主开发的脚本(节点监控,数据校验,数据补偿) 3个9
    传统高可用服务+脚本

  2. Google公司产品 MMM 3-4个9

  3. Facebook公司产品 MHA 4个9 , Taobao产品 TMHA , 腾讯产品TDSQL MHA

多活系统: 金融级别常用

  1. PXC(percona), MGC(mariadb) , MySQL Cluster 5个9

  2. MySQL产品InnoDB Cluster , 阿里PolarDB ,腾讯TiDB 分布式高可用

第2章 MHA基础架构搭建

  1. 准备环境 需要最少三台MySQL服务器+GTID主从模式 每一个mysql都是一个服务节点 需要安装node

  2. 配置关机程序的软连接 (MHA程序内写死了路径 如果不是yum安装 需要我们做个软连接)

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

ln -s /usr/local/mysql/bin/mysql/usr/bin/mysql

  1. 配置个节点ssh免交户互信 截取日志恢复免交互.
rm -rf /root/.ssh

ssh-keygen

cd /root/.ssh

mv id_rsa.pub authorized_keys

scp -r /root/.ssh 10.0.0.52:/root

scp -r /root/.ssh 10.0.0.53:/root

测试: 将yes手工输入

db01:

[root@db01 ~/.ssh]# ssh 10.0.0.51 hostname

[root@db01 ~/.ssh]# ssh 10.0.0.52 hostname

[root@db01 ~/.ssh]# ssh 10.0.0.53 hostname

db02:

[root@db02 ~]# ssh 10.0.0.51 hostname

[root@db02 ~]# ssh 10.0.0.52 hostname

[root@db02 ~]# ssh 10.0.0.53 hostname

db03:

[root@db03 ~]# ssh 10.0.0.51 hostname

[root@db03 ~]# ssh 10.0.0.52 hostname

[root@db03 ~]# ssh 10.0.0.53 hostname

2.1 安装软件

下载mha软件

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

github下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

  1. 所有节点安装Node软件依赖包

yum install perl-DBD-MySQL -y# 依赖包

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

  1. 在db01主库中创建mha需要的用户 (主从同步状态 所有库也会有)

grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';

  1. Manager软件安装(db03) 需要单独占用一个服务器

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes# 依赖包

yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm# 主体

2.2 准备配置文件

配置文件准备MHA安装的主机

(1) 创建配置文件目录

mkdir -p /etc/mha

(2) 创建日志目录

mkdir -p /var/log/mha/app1

(3) 编辑mha配置文件

cat > /etc/mha/app1.cnf<<EOF

[server default]

manager_log=/var/log/mha/app1/manager  # manager 工作日志

manager_workdir=/var/log/mha/app1  # 工作目录

master_binlog_dir=/data/binlog  # 主库的binlog位置        

user=mha # MHA专用管理用户

password=mha  

ping_interval=2 # 心跳检测的时间间隔,自动检测4次                 

repl_password=123   # 复制用户

repl_user=repl

ssh_user=root     # ssh的互信用户

[server1]     # 指定高可用名单

hostname=10.0.0.51

port=3306                                

[server2]           

hostname=10.0.0.52  

candidate_master=1    # 设定选主权重

port=3306

[server3]

hostname=10.0.0.53

port=3306

EOF

2.3 状态检查(MHA服务端)

masterha_check_ssh --conf=/etc/mha/app1.cnf # 检查ssh连接状态

masterha_check_repl --conf=/etc/mha/app1.cnf # 检查repllog状态

2.4 开启MHA:

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
参数解释:
--conf=/etc/mha/app1.cnf: 业务配置文件,可以管理多套MHA架构

--remove_dead_master_conf: 自动剔除故障主节点

--ignore_last_failover : 忽略最后一次failover.

2.5 查看MHA状态

[root@db03 ~]#masterha_check_status --conf=/etc/mha/app1.cnf

2.6 停止命令

[root@db03 ~]# masterha_stop --conf=/etc/mha/app1.cnf

2.7 软件结构

Manager端 :

masterha_manger      # 启动MHA

masterha_check_ssh   # 检查MHA的SSH配置状况

masterha_check_repl  # 检查MySQL复制状况

masterha_master_monitor  # 检测master是否宕机

masterha_check_status    # 检测当前MHA运行状态

masterha_master_switch   # 控制故障转移(自动或者手动)

masterha_conf_host       # 添加或删除配置的server信息

Node 节点端:

这些工具通常由MHA Manager的脚本触发,无需人为操作

save_binary_logs       # 保存和复制master的二进制日志

apply_diff_relay_logs   # 识别差异的中继日志事件并将其差异的事件应用于其他的

purge_relay_logs      # 清除中继日志(不会阻塞SQL线程)

第3章 MHA的工作原理(Fail over 过程)

  1. 通过masterha_manger将MHA的manager进行启动

  2. 监控: 通过masterha_master_monitor 监控主从复制的主库
    利用ping_interval(参数)秒探测一次主库的状态,一共探测4次,无心跳认为主库宕机

  3. 选主: 通过三种模式 顺序
    1. 权重:candidate_master=1
    2. 日志量
    3. 配置文件顺序
    建议: 设置权重,选主最快 并 开启GTID

  4. 数据补偿
    两种情况:
    1. ssh能连: node端通过save_binary_logs自动保存主库的binlog,保存至/var/tmp临时文件,并且应用.
    2. ssh不能连: node端,通过apply_diff_relay_logs自动对比差异,互相补偿.

  5. 切换
    manager端,masterha_master_switch脚本进行切换
    将所有node节点: 使用命令stop slave;reset slave all;从库身份解除
    剩余node节点,重构主从关系.change master to xxx

  6. 故障主库信息会从配置文件清楚,manager程序自杀.

  7. 额外数据补偿的功能(binlog server功能)

  8. 应用透明: vip

  9. 故障通知

  10. 自愈:待开发. 建议配合云环境.

第4章 扩展配置

4.1 MHA 的vip功能

4.1.1 准备vip脚本

需要在官网下载

[root@db03 ~]#cp master_ip_failover.txt /usr/local/bin/master_ip_failover

修改脚本配置

vi /usr/local/bin/master_ip_failover

my $vip = '10.0.0.55/24'; # 配置vip

my $key = '1';

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

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

注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值)

赋予权限

当不提权时的 报错

  dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...

[root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover # 赋予权限

4.1.2 更改manager配置文件:

vim /etc/mha/app1.cnf

在全局设置中添加:

master_ip_failover_script=/usr/local/bin/master_ip_failover # 指定脚本位置

4.1.3 主库上,手工生成第一个vip地址

手工在主库上绑定vip,注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值)

ifconfig eth0:1 10.0.0.55/24 # 重启失效

4.1.4 重启mha

masterha_stop --conf=/etc/mha/app1.cnf

启动:
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null > /var/log/mha/app1/manager.log 2>&1 &

binlog server 宕机补偿日志功能

思路 将主binlog日志 备份到MHA服务器上 防止断电等情况造成slave端数据缺失

4.2.1 配置参数:

vim /etc/mha/app1.cnf

添加模块

[binlog1]

no_master=1           # 开启功能

hostname=10.0.0.53     # 指定存放服务器ip

master_binlog_dir=/data/mysql/binlog # 指定MHA服务器 存放binlog备份文件地址

4.2.2 创建必要目录

mkdir -p /data/mysql/binlog

chown -R mysql.mysql /data/*

4.2.3 拉取主库binlog日志

cd /data/mysql/binlog 

mysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &

注意: 生产中, 拉取起点从正在使用的binlog 开始

4.2.4 重启MHA

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

4.3 邮件提醒

4.3.1 准备脚本

官网下

[root@db03 ~]# unzip email_2019-最新.zip

[root@db03 ~]# cd email/

[root@db03 ~/email]# ll

总用量 88

-rw-r--r-- 1 root root 35 12月 27 2017 send

-rw-r--r-- 1 root root 80213 9月 30 2009 sendEmail

-rw-r--r-- 1 root root 203 4月 19 2019 testpl

转移路径:

[root@db03 ~/email]#cp -a * /usr/local/bin/

[root@db03 ~/email]# cd /usr/local/bin/

提权:

[root@db03 /usr/local/bin]# chmod +x /usr/local/bin/*

4.3.2 修改参数:

vim /etc/mha/app1.cnf

全局中添加参数

report_script=/usr/local/bin/send

4.3.3 重启MHA

关闭
masterha_stop --conf=/etc/mha/app1.cnf
开启
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

第5章 测试MHA高可用能力,并恢复.

5.1 停主库

pkill mysqld

5.2 观察切换结果

观察点包括 但不限于

  1. vip

  2. 主从身份

  3. 配置文件 是否将故障节点清除

  4. binlog server

  5. manager进程

  6. 看日志

[root@db03 ~]# vim /var/log/mha/app1/manager

5.3 修复全新的高可用环境

1 修复主从

原主 : 将原主故障修复完成后 当作从指向新主

change master to

master_host='10.0.0.52',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;

2 修复配置文件

MHA服务器

vim /etc/mha/app1.cnf

将丢弃的原主节点添加上

[server1]

hostname=10.0.0.51

port=3306

3 修复binlog server

[root@db03 ~]# cd /data/mysql/binlog/

删除故障节点的binlog备份

[root@db03 /data/mysql/binlog]#rm -rf /data/mysql/binlog/*

拉去新节点的binlog

mysqlbinlog -R --host=10.0.0.52 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &

检查VIP

新节点ip a

4 互信检查,主从检查

masterha_check_ssh --conf=/etc/mha/app1.cnf

masterha_check_repl --conf=/etc/mha/app1.cnf

5 再次启动manager

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

6 检查状态

[root@db03 /data/mysql/binlog]# masterha_check_status --conf=/etc/mha/app1.cnf

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

推荐阅读更多精彩内容