MySQL高可用架构之MHA

一、 准备实验MYSQLReplication环境:

MHA对MYSQL复制环境有特殊要求,例如各节点都要开启二进制日志及中继日志,各从节点必须显示启用其read-only属性, 并关relay_log_purge功能等, 这里对配置做事先说明。

本实验环境共有四个节点,其角色分配如下:

node1:  MariaDBmaster

node2: MariaDB slave

node3: MariaDB slave

node4: MHA Manager

各节点的/etc/hosts文件配置内容中添加:(可不写,只要在各节点配置skip_name_resolve = ON)

172.17.160.76 node1.magedu.com node1

72.17.160.79 node2.magedu.com node2

172.17.160.80 node3.magedu.com node3

172.17.160.81 node4.magedu.com node4

 

1、 初始主节点master配置:

vim /etc/my.cnf

[mysqld]

server-id = 1

log-bin = master-log

relay-log =relay-log

skip_name_resolve =ON

2、 所有slave节点依赖的配置:

vim /etc/my.cnf

[mysqld]

server-id = 2#复制集群中的各节点的id均必须唯一;

relay-log =relay-log

log-bin = master-log

read_only = ON

relay_log_purge = 0#是否自动清空不再需要中继日志

skip_name_resolve =ON

3、 按上述要求分别配置好主从节点之后,按MYSQL复制配置架构的配置方式将其配置完成

并启动master节点和各slave节点,以及为各slave节点启动其IO和SQL线程, 确保主从复制运行无误。 操作如下:

master节点上:

MariaDB [(none)]>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON  *.* TO 'slave@172.17.%.%' IDENTIFIED BY 'magedu';(这个命令在其他从节点也可能用到,所以尽量也写上去)

MariaDB[(none)]> FLUSH  PRIVILEGES;

MariaDB [(none)]>SHOW MASTER STATUS;

各slave节点上:

mysql-uroot

MariaDB [(none)]>CHANGE MASTER TO MASTER_HOST='172.17.160.80',

->MASTER_USER='slave',

->MASTER_PASSWORD='magedu',

->MASTER_LOG_FILE=’ master-log.000003′,

->MASTER_LOG_POS=647;

MariaDB[(none)]> start slave;

MariaDB[(none)]> show slave status\G;


二、 安装配置MHA

1、在所有MYSQL节点授权拥有管理权限的用户可在本地网络中有其他节点上远程访问。 当然, 此时仅需要且只能在master节点运行类似如下SQL语句即可。基于安全,需要在各节点都要运行以下的这个命令,因为可能在其他节点没有mhaadmin这个用户。

mysql>GRANT ALL ON *.* TO 'mhaadmin'@'172.17.%.%'IDENTIFIED BY  'mhapass';

2、 准备基于SSH互信通信环境:

MHA集群中的各节点彼此之间均需要基于ssh互信通信,以实现远程控制及数据管理功能。简单起见, 可在Manager节点生成密钥对儿, 并设置其可远程连接本地主机后,将私钥文件及authorized_keys文件复制给余下的所有节点即可。

下面操作在node4:

 Manager节点上操作:

[root@node4 ~]#ssh-keygen -t rsa

[root@node4 ~]#ssh-copy-id -i /root/.ssh/id_rsa.pubroot@172.17.160.76

(所有节点之间都要互相发,这样为了使各节点之间ssh连接无需输入密码)

3、 进行MHA安装包安装

首先把安装包给下载下来,安装包默认支持6版本,但是可以与7版本兼容。

Manager 节点: #yum install mha4mysql-manager-0.56-0.el6.noarch.rpm

所有节点包括Manager节点: #yum install mha4mysql-node-0.56-0.el6.norch.rpm

4、 初始化MHA, 进行配置

Manager节点需要为每个监控的master/slave集群提供一个专用的配置文件, 而所有的master/slave集群也可共享全局配置。 全局配置文件为/etc/masterha_default.cnf,其为可选配置。 如果仅监控一master/slave集群, 也可直接通过application的配置来提供各服务器的默认配置信息。而每个application的配置文件路径为自定义。

5、 定义MHA管理配置文件

为MHA专门创建一个管理用户,方便以后使用, 在mysql的主节点上, 三个节点自动同步

Manager节点

mkdir/etc/mha_master

vim/etc/mha_master/app1.cnf

配置文件内容如下;

[server default]

user=mhaadmin   #master上授权的具有管理权限的mha用户

password=mhapass#mha密码

manager_workdir=/etc/mha_master/app1 #mha_master的工作路径

manager_log=/etc/mha_master/manager.log  #mha_master的日志路径

remote_workdir=/mydata/mha_master/app1  #每个远程主机的工作目录

ssh_user=root #基于ssh的秘钥认证

repl_user=slave

repl_password=magedu

ping_interval=1

[server1]

hostname=172.17.160.79   #这三个ip分别是主的,还有从的ip.

ssh_port=22

candidate_master=1

[server2]

hostname=172.17.160.80

ssh_port=22

candidate_master=1

[server3]

hostname=172.17.160.76

ssh_port=22

candidate_master=1

6、检测各节点间ssh互信通信配置是否Ok:

[root@node4 ~]#masterha_check_ssh -conf=/etc/mha_master/app1.cnf

输出信息最后一行类似如下信息,表示其通过检测。

[info]All SSHconnection tests passed successfully.

检查管理的MySQL复制集群的连接配置参数是否OK:

[root@node4~]#masterha_check_repl -conf=/etc/mha_master/app1.cnf

如果测试时会报错,可能是从节点上没有账号, 因为这个架构, 任何一个从节点, 将有可能成为主节点, 所以也需要创建账号。因此,这里只要在mater节点上再次执行以下操作即可:

MariaDB[(none)]>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON

*.* TO'slave@172.17.%.%' IDENTIFIED BY 'magedu';

MariaDB [(none)]>FLUSH PRIVILEGES;

Manager节点上再次运行,就显示Ok了。

三、 启动MHA

[root@node4~]#nohup masterha_manager -conf=/etc/mha_master/app1.cnf  &>/etc/mha_master/manager.log &

# 启动成功后,可用过如下命令来查看master节点的状态:

[root@node4~]#masterha_check_status -conf=/etc/mha_master/app1.cnf

app1 (pid:4978)isrunning(0:PING_OK),master:172.16.252.18

上面的信息中“app1(pid:4978)is running(0:PING_OK)”表示MHA服务运行OK,否则, 则会显示为类似“app1 isstopped(1:NOT_RUNNINg).”如果要停止MHA,需要使用master_stop命令。

[root@node4~]#masterha_stop -conf=/etc/mha_master/app1.cnf

四、 测试MHA测试故障转移

(1)在master节点关闭mariadb服务,模拟主节点数据崩溃

#killall -9 mysqldmysqld_safe

#rm -rf/var/lib/mysql/*

(2)在manager节点查看日志:

/data/masterha/app1/manager.log日志文件中出现如下信息, 表manager检测到172.17.160.79节点故障, 而后自动执行故障转移, 172.17.160.80提升为主节点。 注意, 故障转移完成后, manager将会自动停止, 此时使用masterha_check_status命令检测将会遇到错误提示,如下所示:

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

app1 isstopped(2:NOT_RINNING).

四、 测试MHA测试故障转移

(3) 提供新的从节点以修复复制集群

原有 master 节点故障后,需要重新准备好一个新的 MySQL 节点。 基于来自于master 节点的备份恢复数据后,将其配置为新的 master 的从节点即可。 注意,新加入的节点如果为新 增节点, 其 IP地址要配置为原来 master 节点的 IP, 否则, 还需要修改 app1.cnf中相应的 ip 地址。 随后再次启动 manager, 并再次检测其状态。

把原来的master挂掉之后,其中一个从节点接管master位置,待主节点修复好后,基于节约资源考虑,将其变为从节点继续使用,变为从节点方法:

1、把配置文件/etc/my.cnf中的内容改为从节点的配置

2、再次安装数据库,并进行如下配置:

mysql -uroot

MariaDB [(none)]>CHANGE MASTER TO MASTER_HOST='172.17.160.80',

->MASTER_USER='slave',

->MASTER_PASSWORD='magedu',

->MASTER_LOG_FILE=’ master-log.000003′,

->MASTER_LOG_POS=647;

MariaDB[(none)]>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON  *.*TO 'slave@172.17.%.%' IDENTIFIED BY 'magedu';

mysql>GRANT ALL ON *.* TO 'mhaadmin'@'172.17.%.%'IDENTIFIED BY  'mhapass';

MariaDB[(none)]> start slave;

MariaDB[(none)]> show slave status\G;

这样才可能保证mha检测通过。

3、在后来居上的master上也需要修改配置文件:

#read_only=On把这句话给注释掉,因为它已经变为主节点了,所以不能设为只读。

4、在现在的主节点上,关闭slave,因为它已经不需要了。Stopslave.

(4)新节点提供后再次执行检查操作

masterha_check_status-conf=/etc/mha_master/app1.cnf

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

检查无误, 再次运行, 这次要记录日志

masterha_manager-conf=/etc/mha_master/app1.cnf  >/etc/mha_master/manager.log2>&1

、 新节点上线, 故障转换恢复注意事项

(1)、 在生产环境中,当你的主节点挂了后, 一定要在从节点上做一个备份, 拿着备份文件把主节点手动提升为从节点,并指明从哪一个日志文件的位置开始复制

(2)、 每一次自动完成转换后,每一次的(replication health )检测不ok始终都是启动不了必须手动修复主节点,除非你改配置文件

(3)、 手动修复主节点提升为从节点后,再次运行检测命令

[root@node5 ~]#masterha_check_repl --conf=/etc/mha_master/app1.cnf

app1 (pid:3211) isrunning(0:PING_OK), master:172.16.5.103

(4)、 再次运行起来就恢复成功了

masterha_manager--conf=/etc/mha_master/app1.cnf

六、本次实验遇到的各种需要注意的问题

master挂掉前:

1、没有在所有节点上安装mha4mysql-node-0.56-0.el6.norch.rpm

2、配置文件没有写正确

3、在slave 节点上没有创建对应的slavemhaadmin用户

4、主节点没有与两个从节点信息同步,即

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

5、在manager节点上妹纸文件时少配置了一个ip

6ssh无密码连接没有做好

master挂掉后:

1、把前master的配置文件修改成slave的配置文件,因为它已经不再是master了。

2、重新授权数据库用户。

3、关闭现有masterslave,因为它之前是slave,但是现在不是了,所以要关掉。

4、修改现在的master配置文件,把read-only关闭。

5、进入数据库,检查各从节点是否与现在的主节点连接。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值