mha mysql 两台机器_基于gtids一主两从复制搭建MHA高可用MySQL最终版

本文详细介绍了如何在两台机器上使用MHA(MySQL High Availability)搭建基于GTIDs的一主两从复制,并实现高可用性。包括环境准备、MHA用户创建、软件安装、SSH互信配置、VIP设置、MHA配置文件创建、监控与故障切换测试等步骤。
摘要由CSDN通过智能技术生成

一、MHA部署

##环境准备

角色IPserver-id功能

MHA-Node(Master)

172.16.1.5

100

数据节点

MHA-Node(Slave1)

172.16.1.6

200

数据节点

MHA-Node(Slave2)和MHA-Manager

172.16.1.7

300

数据节点

1, 所有服务器配置yum源

在centos7安装后的默认源基础上,再加上拷贝mha的源(假设拷贝到/root/mha-yum/)

# vim /etc/yum.repos.d/mha.repo

[mha]

name=mha soft

baseurl=file:///root/mha/mha-yum

enabled=1

gpgcheck=0

2, 所有服务器安装依赖包

注意:所有服务器均需要安装

yum install perl-DBD-MySQL \

perl-Config-Tiny \

perl-Time-HiRes \

perl-Mail-Sender \

perl-Mail-Sendmail \

perl-MIME-Base32 \

perl-MIME-Charset \

perl-MIME-EncWords \

perl-Params-Classify \

perl-Params-Validate.x86_64 \

perl-Log-Dispatch \

perl-Parallel-ForkManager \

net-tools -y

主从复制已经搭建好,需要在每台机子配置文件里添加:

log-slave-updates=1

[mysqld]

log-slave-updates=1 #参数意思是把中继日志里的操作同步到二进制日志里

二、创建mha监控用户

在master,slave1,slave2三台mysql服务器上创建mha监控用户, 需要对管理节点授权(==授权时IP为管理节点IP==)

mysql> grant all on *.* to mha@'172.16.1.7' identified by 'jsUFeS6sjfJ76TGG';

mysql> flush privileges;

mysql> select user,host from mysql.user;

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

| user          | host      |

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

| slave         | %         |

| mha           | 127.16.1.7 |

| mysql.session | localhost |

| mysql.sys     | localhost |

| root          | localhost |

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

MHA软件安装,用slave2作管理节点

在所有节点安装 ==mha-node== 软件包,在 ==mha管理节点==上再安装 mha-manager 软件包

[root@master ~]# rpm -ivh /root/mha/mha4mysql-node-0.57-0.el7.noarch.rpm

[root@slave1 ~]# rpm -ivh /root/mha/mha4mysql-node-0.57-0.el7.noarch.rpm

[root@slave2 ~]# rpm -ivh /root/mha/mha4mysql-node-0.57-0.el7.noarch.rpm

[root@slave2 ~]# rpm -ivh /root/mha/mha4mysql-manager-0.57-0.el7.noarch.rpm

配置ssh互信

1,所有服务器上都使用root产生空密码密钥对

[root@master ~]# ssh-keygen -P "" -f /root/.ssh/id_rsa

[root@slave1 ~]# ssh-keygen -P "" -f /root/.ssh/id_rsa

[root@slave2 ~]# ssh-keygen -P "" -f /root/.ssh/id_rsa

2, 将master,slave1,slave2上产生的公钥拷给mgr管理节点上对应的路径

[root@master ~]# ssh-copy-id root@172.16.1.7

[root@slave1 ~]# ssh-copy-id root@172.16.1.7

[root@slave2 ~]# ssh-copy-id root@172.16.1.7

3, 在slave2管理节点将所有的公钥(包括自己的)都追加到同一个authorized_keys文件里

[root@slave2 ~]# cd /root/.ssh/

[root@slave2.ssh]# cat authorized_keys #所有公钥都在authorized_keys文件中了

4,在mgr管理节点上将authorized_keys文件分发给master,slave1,slave2上

[root@slave2.ssh]# for i in 5 6; do scp /root/.ssh/authorized_keys 172.16.1.$i:/root/.ssh/; done

5, 自行验证是否互相ssh不需要密码了(如果这里不验证,后面会有命令验证)

挂载VIP

在master上虚拟出VIP,(VIP为前面程序访问mysql的IP,随着master切换)

[root@master ~]# ifconfig bond0:0 172.16.1.243/24

创建mha相关配置文件

创建 mha 相关的工作目录

[root@slave2 ~]# mkdir /etc/mha/

[root@slave2 ~]# mkdir -p /data/mha/app1

创建mha局部配置文件

[root@slave2 ~]# vim /etc/mha/app1.conf

[server default]

# 设置监控用户和密码

user=mha

password=jsUFeS6sjfJ76TGG

# 设置复制环境中的复制用户和密码

repl_user=root

repl_password=jsUFeS6sjfJ76TGG

# 设置ssh的登录用户名

ssh_user=root

# 设置监控主库,发送ping包的时间间隔,默认是 3 秒,尝试三次没有回应的时候自动进行failover

ping_interval=3

# 设置mgr的工作目录

manager_workdir=/data/mha/app1

# 设置mysql master 保存 binlog 的目录,以便 MHA 可以找到 master 的二进制日志

master_binlog_dir=/mysql/lib/mysql

# 设置 master 的 pid 文件

master_pid_file=/var/run/mysqld/mysqld.pid

# 设置 mysql master 在发生切换时保存 binlog 的目录(在mysql master上创建这个目录)

remote_workdir=/mysql/data

# 设置 mgr 日志文件

manager_log=/data/mha/app1/app1-3306.log

# MHA 到 master 的监控之间出现问题,MHA Manager 将会尝试从slave2登录到master上

secondary_check_script=/usr/bin/masterha_secondary_check  -s 172.16.1.6 --user=root --port=22 --master_host=172.26.1.5 --master_port=3306

# 设置自动 failover 时候的切换脚本,172.16.1.243为VIP,0为VIP产生在网卡上的子接口

master_ip_failover_script="/etc/mha/master_ip_failover.sh 172.16.1.243 0"

[server1]

hostname=172.16.1.5

port=3306

candidate_master=1

[server2]

hostname=172.16.1.6

port=3306

candidate_master=1

[server3]

hostname=172.16.1.7

port=3306

no_master=1

上传相关脚本并改权限

[root@slave2 ~]# ls /etc/mha/

app1.conf  master_ip_failover.sh

[root@slave2 ~]# chmod +x /etc/mha/master_ip_failover.sh

检查ssh互信和集群状态

检查ssh互信

[root@slave2 ~]# masterha_check_ssh --conf=/etc/mha/app1.conf

......

- [info] All SSH connection tests passed successfully.

检查集群状态

[root@slave2 ~]# masterha_check_repl --conf=/etc/mha/app1.conf

......

MySQL Replication Health is OK.

启动MHA-Mgr状态监控

先检查状态, 为NOT_RUNNING状态

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

app1 is stopped(2:NOT_RUNNING).

开启MHA Manager监控

[root@slave2 ~]# nohup masterha_manager --conf=/etc/mha/app1.conf --ignore_last_failover &

说明:

此监控命令需要放在后台执行,而且关闭终端后进程会关闭,所以需要nohup命令挂起

因为MHA不允许多次failover切换的间隔时间太短,所以需要加--ignore_last_failover参数实现多次切换验证

再次查看监控状态,为running状态

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

app1 (pid:10121) is running(0:PING_OK), master:172.16.1.7

PS: 手动停止监控命令:masterha_stop --conf=/etc/mha/app1.conf

三、自动Failover测试

在MHA管理节点上先监控日志变化

[root@slave2 ~]# tail -f /data/mha/app1/app1-3306.log

##模拟故障

在master上关闭服务(或者关闭机器)

[root@master ~]# systemctl stop mysqld

查看切换过程

[root@slave2 ~]# tail -f /data/mha/app1/app1-3306.log

####

四、后续讨论

切换成功后, 原来的slave1变为新的master,原来的master要变为slave1,也就是两个人要==互换角色==了

但是MHA只把原来的slave1变为新的master,而原来的master要变为slave1则需要现在手动再做

1, 启动原master(新slave1)的mysql服务(前面模拟故障把它停掉了),并配置为新的slave1

[root@slave2 ~]# systemctl start mysqld

[root@slave2 ~]# mysql -p123456

下面是连接原slave1(新master)

mysql> change master to master_host='172.16.1.6', master_user='root',master_password='jsUFeS6sjfJ76TGG',master_port=3306, master_auto_position=1;

mysql> start slave;

mysql> show slave status\G

3, 重新开启MHA

[root@slave2 ~]# masterha_check_repl --conf=/etc/mha/app1.conf

......

......

MySQL Replication Health is OK.

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

app1 is stopped(2:NOT_RUNNING).

[root@slave2 ~]# nohup masterha_manager --conf=/etc/mha/app1.conf --ignore_last_failover &

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

app1 (pid:12608) is running(0:PING_OK), master:172.16.1.6

5, 测试验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值