mysql之MHA架构


角色


Ip地址


主机名


Server id


类型


master


192.168.1.131


master1


1


主(写)


Master(candicate)


192.168.1.132


Master2


2


从(读)


Slave


192.168.1.133


Slave1


3


从(读)


Manager


192.168.1.134


Manager


管理节点

准备基础环境:

1.在配置好 IP 地址后检查 selinux,iptables 设置,关闭 selinux ,iptables 服务以便后期主从同步不出错,时间要同步

2. 在四台机器上配置epelyum和用到perl包

[[email protected] ~]# yum -y install epel-rpm-macros.noarch

[[email protected] ~]#  yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Config-IniFiles  ncftp  perl-Params-Validate perl-CPAN  perl-Test-Mock-LWP.noarch perl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

3. 配置hosts环境

[[email protected] ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.131 master1

192.168.1.132 master2

192.168.1.133 slave1

192.168.1.134 manager

[[email protected] ~]# for i in master2 slave1 manager; do scp /etc/hosts $i:/etc/ ;done

4. 建立ssh交互登录环境,四台都要做

[[email protected] ~]# ssh-keygen -t rsa

[[email protected] ~]# for i in master1 master2 slave1 manager ;do ssh-copy-id -i ~/.ssh/id_rsa.pub $i;done

配置mysql的半同步复制

为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置 MHA 的同时建议配置成MySQL 的半同步复制。

注:mysql 半同步插件是由谷歌提供,具体位置/usr/local/mysql/lib/plugin/下,一个是 master

用的 semisync_master.so,一个是 slave 用的 semisync_slave.so,下面我们就来具体配置一下。如果不清楚 Plugin 的目录,用如下查找:

mysql> show variables like '%plugin_dir%';

+---------------+------------------------------+

| Variable_name | Value                        |

+---------------+------------------------------+

| plugin_dir    | /usr/local/mysql/lib/plugin/ |

+---------------+------------------------------+

1 row in set (0.01 sec)

1、 分别在主从节点上安装相关的插件(master, Candicate master,slave)

在 MySQL 上安装插件需要数据库支持动态载入。检查是否支持,用如下检测

mysql> show variables like '%have_dynamic_loading%';

+----------------------+-------+

| Variable_name        | Value |

+----------------------+-------+

| have_dynamic_loading | YES   |

+----------------------+-------+

所有 mysql 数据库服务器,安装半同步插件(semisync_master.so,semisync_slave.so)

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

检查 Plugin 是否已正确安装:

mysql> show plugins;

| partition                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |

| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |

| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL               | GPL     |

| ngram                      | ACTIVE   | FTPARSER           | NULL               | GPL     |

| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |

| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so  | GPL     |

+----------------------------+----------+--------------------+--------------------+---------+

mysql> select * from information_schema.plugins;

查看半同步相关信息

mysql> show variables like '%rpl_semi_sync%';

+-------------------------------------------+------------+

| Variable_name                             | Value      |

+-------------------------------------------+------------+

| rpl_semi_sync_master_enabled              | OFF        |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

| rpl_semi_sync_slave_enabled               | OFF        |

| rpl_semi_sync_slave_trace_level           | 32         |

+-------------------------------------------+------------+

2. 修改mysql配置文件,设置主从同步

[[email protected] ~]# vim /etc/my.cnf

server-id = 1

log-bin=mysql-bin

binlog_format=mixed

log-bin-index=mysql-bin.index

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1

relay_log_purge=0

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

rpl_semi_sync_master_enabled=1 1 表是启用,0 表示关闭

rpl_semi_sync_master_timeout=10000:毫秒单位 ,该参数主服务器等待确认消息 10 秒后,

不再等待,变为异步方式。

[[email protected] ~]# vim /etc/my.cnf

server-id = 2

log-bin=mysql-bin

binlog_format=mixed

log-bin-index=mysql-bin.index

relay_log_purge=0

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=10000

rpl_semi_sync_slave_enabled=1

注:relay_log_purge=0,禁止 SQL 线程在执行完一个 relay log 后自动将其删除,对于 MHA

场景下,对于某些滞后从库的恢复依赖于其他从库的 relay log,因此采取禁用自动删除功能

[[email protected] ~]# vim /etc/my.cnf

Server-id = 3

log-bin = mysql-bin

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

read_only = 1

rpl_semi_sync_slave_enabled=1

在master上查看半同步相关信息

mysql> show variables like '%rpl_semi_sync%';

查看半同步状态:

mysql> show status like '%rpl_semi_sync%';

rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式

rpl_semi_sync_master_clients :显示有多少个从服务器配置为半同步复制模式

rpl_semi_sync_master_yes_tx :显示从服务器确认成功提交的数量

rpl_semi_sync_master_no_tx :显示从服务器确认不成功提交的数量

rpl_semi_sync_master_tx_avg_wait_time :事务因开启 semi_sync ,平均需要额外等待的时间

rpl_semi_sync_master_net_avg_wait_time :事务进入等待队列后,到网络平均等待时间

主从同步

Master1主机

mysql> grant replication slave on *.* to [email protected]'192.168.1.%' identified by '123';

mysql> grant all privileges on *.* to [email protected]'192.168.1.%' identified by '123';

mysql> show master status;

第一条 grant 命令是创建一个用于主从复制的帐号,在 master 和 candicate master 的主机上创建即可。

第二条 grant 命令是创建 MHA 管理账号,所有 mysql 服务器上都需要执行。MHA 会在配置文件里要求能远程登录到数据库,所以要进行必要的赋权。

Master2主机

mysql> grant replication slave on *.* to [email protected]'192.168.1.%' identified by '123';

mysql> grant all privileges on *.* to [email protected]'192.168.1.%' identified by '123';

mysql> change master to master_host='192.168.1.131',master_port=3306,master_user='rep',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=739;

mysql> start slave;

mysql> show slave slave;

Slave1主机

mysql> grant all privileges on *.* to [email protected]'192.168.1.%' identified by '123';

mysql>  change master to master_host='192.168.1.131',master_port=3306,master_user='rep',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=739;

mysql> start slave;

mysql> show slave status\G;

查看 master1 服务器的半同步状态

mysql> show status like '%rpl_semi_sync%';

配置mysql-mha

在所有数据库节点上安装 mha4mysql-node-0.56.tar.gz

[[email protected] ~]# tar zxf mha4mysql-node-0.56.tar.gz

[[email protected] ~]# cd mha4mysql-node-0.56/

[[email protected] mha4mysql-node-0.56]# perl Makefile.PL

[[email protected] mha4mysql-node-0.56]# make &&make install

其他两个数据节点也安装 mha4mysql-node-0.56.tar.gz(过程略)

在管理节点需要两个都安装:mha4mysql-node-0.56.tar.gz 和 mha4mysql-manager-0.56.tar.gz

[[email protected] ~]# tar zxf mha4mysql-node-0.56.tar.gz

[[email protected] ~]# cd mha4mysql-node-0.56/

[[email protected] mha4mysql-node-0.56]# perl Makefile.PL

[[email protected] mha4mysql-node-0.56]# make && make install

[[email protected] mha4mysql-node-0.56]# cd

[[email protected] ~]# tar zxf mha4mysql-manager-0.56.tar.gz

[[email protected] ~]# cd mha4mysql-manager-0.56/

[[email protected] mha4mysql-manager-0.56]# perl Makefile.PL

[[email protected] mha4mysql-manager-0.56]# make &&make install

[[email protected] mha4mysql-manager-0.56]# mkdir /etc/masterha

[[email protected] mha4mysql-manager-0.56]# mkdir -p /masterha/app1

[[email protected] mha4mysql-manager-0.56]# mkdir /scripts

[[email protected] mha4mysql-manager-0.56]# cp samples/conf/* /etc/masterha/

[[email protected] mha4mysql-manager-0.56]# cp samples/scripts/* /scripts/

[[email protected] mha4mysql-manager-0.56]# vim /etc/masterha/app1.cnf

[server default]

manager_workdir=/masterha/app1

manager_log=/masterha/app1/manager.log

user=manager

password=123

ssh_user=root

repl_user=rep

repl_password=123

ping_interval=1

[server1]

hostname=192.168.1.131

port=3306

master_binlog_dir=/usr/local/mysql/data

candidate_master=1

[server2]

hostname=192.168.1.132

port=3306

master_binlog_dir=/usr/local/mysql/data

candidate_master=1

[server3]

hostname=192.168.1.133

port=3306

master_binlog_dir=/usr/local/mysql/data

no_master=1

保存退出

[[email protected] mha4mysql-manager-0.56]# > /etc/masterha/masterha_default.cnf

manager_workdir=/masterha/app1 //设置 manager 的工作目录

manager_log=/masterha/app1/manager.log //设置 manager 的日志

user=manager //设置监控用户 manager

password=123456 //监控用户 manager 的密码

ssh_user=root //ssh 连接用户

repl_user=mharep //主从复制用户

repl_password=123.abc //主从复制用户密码

ping_interval=1 //设置监控主库,发送 ping 包的时间间隔,默认是 3 秒,尝试三次没有回

应的时候自动进行 railover

master_binlog_dir=/usr/local/mysql/data //设置 master 保存 binlog 的位置,以便 MHA 可

以找到 master 的日志,我这里的也就是 mysql 的数据目录

candidate_master=1 //设置为候选 master,如果设置该参数以后,发生主从切换以后将会

将此从库提升为主库。

ssh有效性验证:

[[email protected] mha4mysql-manager-0.56]# masterha_check_ssh --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf

正确显示结果没有报错

集群复制的有效性验证(mysql必须都启动):

[[email protected] mha4mysql-manager-0.56]# masterha_check_repl --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf

命令执行完最后报错的地方

解决办法在所有服务器上执行:

[[email protected] mha4mysql-manager-0.56]# ln -s /usr/local/mysql/bin/* /usr/local/bin/

启动manger

[[email protected] ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /tmp/mha_mager.log &

[1] 1319

状态检查

[[email protected] ~]# masterha_check_status --conf=/etc/masterha/app1.cnf

app1 (pid:1319) is running(0:PING_OK), master:192.168.1.131

故障转移验证:

1. 停掉master1

[[email protected] mha4mysql-node-0.56]# service mysqld stop

2. 查看MHA日志

[[email protected] ~]# tail -f /masterha/app1/manager.log

3. 登录slave1的mysql查看slave状态

mysql> show slave status\G;

MHA Manager 端日常主要操作步骤

1)检查是否有下列文件,有则删除。

发生主从切换后,MHAmanager 服务会自动停掉,且在 manager_workdir(/masterha/app1)

目录下面生成文件 app1.failover.complete,若要启动 MHA,必须先确保无此文件)

[[email protected] ~]# ll /masterha/app1/

total 24

-rw-r--r-- 1 root root     0 Aug  8 02:02 app1.failover.complete

-rw-r--r-- 1 root root 20955 Aug  8 02:02 manager.log

[[email protected] ~]# rm -rf /masterha/app1/app1.failover.complete

2)检查 MHA 复制检查:(需要把 master1 设置成 candicatade 的从服务器)

mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.132', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=739, MASTER_USER='rep', MASTER_PASSWORD='123';

mysql> start slave;

3)停止 MHA: masterha_stop --conf=/etc/masterha/app1.cnf

4)启动 MHA:

#nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/tmp/mha_manager.log &

当有 slave 节点宕掉时,默认是启动不了的,加上 --ignore_fail_on_start 即使有节点宕掉也

能启动 MHA,如下:

#nohup  masterha_manager  --conf=/etc/masterha/app1.cnf  --ignore_fail_on_start

&>/tmp/mha_manager.log &

5) 检查状态:

# masterha_check_status --conf=/etc/masterha /app1.cnf

6) 检查日志:

#tail -f /masterha/app1/manager.log

7)主从切换后续工作

重构:

重构就是你的主挂了,切换到 Candicate master 上,Candicate master 变成了主,因此重构的一种方案原主库修复成一个新的 slave主库切换后,把原主库修复成新从库,然后重新执行以上 5 步。原主库数据文件完整的情况下,可通过以下方式找出最后执行的 CHANGE MASTER 命令:

[[email protected] ~]#  grep "CHANGE MASTER TO MASTER" /masterha/app1/manager.log | tail -1

Wed Aug  8 02:02:40 2018 - [info]  All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.1.132', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=739, MASTER_USER='rep', MASTER_PASSWORD='xxx';

定期删除中继日志

在配置主从复制中,slave 上设置了参数 relay_log_purge=0,所以 slave 节点需要定期删除中继日志,建议每个 slave 节点删除中继日志的时间错开。

corntab -e

0 5 * * * /usr/local/bin/purge_relay_logs --user=root --password=pwd123 --port=3306 --disable_relay_log_purge >> /var/log/purge_relay.log 2>&1

原文地址:http://blog.51cto.com/13525347/2155989

时间: 2024-10-08 05:58:59

mysql之MHA架构的相关文章

MySQL之MHA架构的介绍

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

mysql高可用集群——MHA架构

目录 1.下载 2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰到的问题 3.测试切换 3.1 正常切换测试 3.2 回切测试 3.3 雪崩测试 3.4 主从不一致切换测试 下载 mha链接地址:http://pan.baidu.com/s/1pJkDGX9#dir/path=%2Fmysql%2FHA%2Fmha 或者:https://code.googl

MySQL高可用架构之MHA (未完,待续)

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

MySQL高可用架构-MHA环境部署记录

一.MHA介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是日本的一位 MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQLReplication(二层)环境,目的在于维持Master主库的高可用性.是一套优秀的作为MySQL高可用性 环境下故障切

MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken

MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有的部署环境,适用于任何存储引擎. MHA提供在线主服务器切换,改变先正运行的主服务器到另外一台上,这个过程只需0.5-2s的时间,这个时间内数据无法写入. MHA Manager通过ssh连接mysql slave服务器.所以在配置MHA的时候,我们首先实现的就是各个节点的互信. 虽然MHA试图从宕

整个MHA+keepalived+lvs+mysql高可用架构配置说明

整个MHA+keepalived+lvs+mysql高可用架构配置说明1.1. 环境简介1.1.1.vmvare虚拟机,系统版本CentOS7.5 x86_64位最小化安装,mysql的版本5.7.21,1.1.2.虚拟机器的ssh端口均为默认22,1.1.3.虚拟机的iptables全部关闭,1.1.4.虚拟机的selinux全部关闭,1.1.5.虚拟机服务器时间全部一致 ntpdate 0.asia.pool.ntp.org1.1.6.3台机器的ssh端口为22**1.2.此次试验采用的是3

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas 1.Atlas介绍 Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目. 它是在mysql-proxy-0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性. 360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条. 下载地址:https://github.com/Qihoo360/Atlas/releases 注意: 1.Atlas只能安装运

MySQL数据库---MHA高可用群集架构

MHA概述 日本DeNA公司youshimaton (现就职于Facebook公司) 开发 一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件 MHA的组成 MHA Manager (管理节点) MHA Node (数据节点) MHA特点 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失 使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险 实验思路 1.MHA架构 (1)数据库安装 (2)一主两从 (3)MHA搭建 2.故障

MySQL数据库——MHA高可用集群架构(实战!!!)

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