Mysql 5.7 MHA 高可用方案

Mysql 5.7 MHA 高可用方案

Mysql 5.7 MHA 高可用方案


MHA,即Master High Availability Manager and Tools for Mysql,该工具仅适用于 mysql replication环境,目的在于维持master主库高可用性MHA(master high availiability)是自动的master故障转移和slave提升的软件包,基于mysql复制(异步和半同步),它包含两部分 MHA Manager 和 MHA Node

下载:

https://github.com/yoshinorim/mha4mysql-manager/releases

https://github.com/yoshinorim/mha4mysql-node/releases

Mysql 5.7 MHA 高可用方案

Mysql 5.7 MHA 高可用方案

实战演练

环境介绍:

使用三台机器来完成本次MHA搭建

10.106.145.181 master node(主库,并需要在上面安装数据节点)

10.106.145.182 slave1 node(作为第一个从库,并需要在上面安装数据节点)

10.168.145.183 slave2 manager node(作为第二个从库,在其上面即安装管理节点,又安装数据节点)

Vip 10.168.145.184 虚拟ip地址

Mysql 5.7 MHA 高可用方案


配置三台机器互信

基于安全密钥的验证方式在本地主机中生成密钥对 并将公钥传送到远程主机中

切换到 root使用的账户上产生密钥对


1. 产生密钥 (分别在所有机器上执行)

ssh-keygen -t rsa

产生文件如下两个

id_rsa id_rsa.pub

2. 把本机的公钥追加到自身的 ~/.ssh/authorized_keys 文件里面

cd ~/.ssh/

-- 该指令 后的ip是本身自己的ip地址(有确定 并 输入 密码的动作)

ssh-copy-id 10.106.145.181

文件变成了 四个

authorized_keys id_rsa id_rsa.pub known_hosts

将产生的 authorized_keys 复制到 第二台机器上去

scp /root/.ssh/authorized_keys 10.106.145.182:/root/.ssh/

3. 登录 到182 机器上继续操作

cd ~/.ssh/

ssh-copy-id 10.106.145.182

scp /root/.ssh/authorized_keys 10.106.145.183:/root/.ssh/

4. 登录 到183 机器上继续操作

cd ~/.ssh/

ssh-copy-id 10.106.145.183

最后将在183 上产生的authorized_keys 复制到每个机器上,这里我们是3台电脑

scp /root/.ssh/authorized_keys [email protected]:/root/.ssh/

scp /root/.ssh/authorized_keys [email protected]:/root/.ssh/

5.三台机器上都正确配置 hosts

10.106.145.181 master01.hadoop

10.106.145.182 slave01.hadoop

10.106.145.183 slave02.hadoop

搭建主从环境

一主两从,使用mysql5.7 基于GTID+row 模式搭建所以mysql上创建主从复制账号

create user repl@'10.106.145.%' identified by 'repl';

grant replication slave on *.* to repl@'10.106.145.%';

flush privileges;

创建管理账号

create user zs@'10.106.145.%' identified by '123456';

grant all privileges on *.* to zs@'10.106.145.%';

flush privileges;

因为我们使用的是GTID是的同步,就不需要添加—master-data参数

主库配置

gtid_mode=on

enforce_gtid_consistency=on

binlog_format=row

server_id 不能和从库一样

从库配置

gtid_mode=on

enforce_gtid_consistency=on

log_slave_updates=1

虽然log_slave_updates在mysql5.7之后可以关闭,使用gtid_executed这张表,但是还是建议在从库中开启(万一需要从 从库继续向下一级从库同步数据)

如果需要将从库作为主库继续向下传递数据我们还需要继续在从库上添加下面两项配置log_bin=on 和 binlog_format=row

server_id 和主库不一样


主库上进行备份指令

mysqldump -S /usr/local/mysql/mysql.sock --single-transaction -uroot -p123456 --all-databases>/home/hadoop/all.sql

1. 将all.sql 传递到其他两个库上并进行还原

Source all.sql

2. 开启同步

CHANGE MASTER TO

MASTER_HOST='10.106.145.181',

MASTER_USER='repl',

MASTER_PASSWORD='repl',

MASTER_PORT=3306,

MASTER_AUTO_POSITION=1;

start slave ;

show slave status;

3. 测试gtid主从复制

主库:

use test;

create table a (id int ,primary key (id));

insert into a values(1)

从库:

use test;

select *from a;

Mysql 5.7 MHA 高可用方案

安装MHA-node节点

三台机器全部安装node节点

yum install -y epel-release

yum install perl-DBD-MySQL

安装perl- CPAN*软件包

yum -y install perl-CPAN

tar -zxvf mha4mysql-node-0.58.tar.gz

cd mha4mysql-node-0.58

perl Makefile.PL

make && make install

Mysql 5.7 MHA 高可用方案

给mha创建软连接 注意要根据mysql安装真实路径进行设置

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

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

安装MHA-manager管理节点

在一个从节点安装安装epel源

yum install -y epel-release

加载下面的所需依赖

yum install perl-DBD-MySQL

yum install perl-Params-Validate

yum install perl-Config-Tiny

yum install perl-Log-Dispatch

yum install perl-Parallel-ForkManager

安装管理节点

tar -zxvf mha4mysql-manager-0.58.tar.gz

cd mha4mysql-manager-0.58

perl Makefile.PL

make

make install

给mha创建软连接 (注意要根据mysql安装真实路径进行设置)

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

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

配置/etc/profile

给PATH添加一个路径 /usr/local/bin

创建MHA家目录

mkdir -p /usr/local/mha

mkdir -p /etc/mha

cd /etc/mha

创建并编辑mha.conf 内容如下


[server default]

#MySQL的用户和密码

user=zs

password=123456

#mha manager 工作目录

manager_workdir=/usr/local/mha

manager_log=/usr/local/mha/manager.log

remote_workdir=/usr/local/mha

ssh_user=root

repl_user=repl

repl_password=repl

ping_interval=1

#master_ip_failover_script=/etc/mha/master_ip_failover

[server1]

hostname=10.106.145.181

ssh_port=22

#mysql的binlog路径 可以从my.conf中找到

master_binlog_dir = /usr/local/mysql/data

candidate_master = 1

port=3306

[server2]

hostname=10.106.145.182

ssh_port=22

#mysql的binlog路径 可以从my.conf中找到

master_binlog_dir = /usr/local/mysql/data

candidate_master=1

port=3306

[server3]

hostname=10.106.145.183

ssh_port=22

#mysql的binlog路径 可以从my.conf中找到

master_binlog_dir = /usr/local/mysql/data

no_master=1

port=3306

利用MHA工具检测

检测ssh

安装需要的包

yum -y install perl-Time-HiRes

执行检测命令(使用开启ssh共享的那个用户)

/usr/local/bin/masterha_check_ssh --conf=/etc/mha/mha.conf

Mysql 5.7 MHA 高可用方案

检测主从(至关重要一定要没问题)

/usr/local/bin/masterha_check_repl --conf=/etc/mha/mha.conf

结果如下

Mysql 5.7 MHA 高可用方案

如果有类似报错 比如Can't exec "apply_diff_relay_logs": 没有那个文件或目录 at /usr/local/share/perl5/MHA/ManagerUtil.pm line 116.,

这说明路径没有找到该执行文件,我们需要包mha的安装路径配置到/etc/profile 的path路径中,添加/usr/local/bin 到path中,然后

source /etc/profile 即可


启动MHA

登录管理节点上执行MHA启动

nohup masterha_manager --conf=/etc/mha/mha.conf>/tmp/mha_manager.log&1 &

Mysql 5.7 MHA 高可用方案

masterha_check_status --conf=/etc/mha/mha.conf

Mysql 5.7 MHA 高可用方案

关闭mha

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

模拟故障:

在主库10.106.145.181 上停止mysql服务

systemctl stop mysqld

10.106.145.182 中从库变成主库,而183的主库指向了182,切换完成


Mysql 5.7 MHA 高可用方案

这个时候我们在182上执行sql

insert into test.b values(12346) 然后我们到183上查看数据,发现数据已经同步,mha就搭建成功了

Mysql 5.7 MHA 高可用方案


分享到:


相關文章: