当前位置:   article > 正文

Mysql 高可用MHA简介原理 架构部署_mha高可用原理

mha高可用原理

MHA简介

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。

MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。

MHA原理

Manager 作为监控,不断的对master、slave1、slave2、slave3进行监控
Manger如果发现master有异常,则会将其中一个延迟较小的从库提升为主库,而且使得数据一致

开始部署

准备4台Centos7虚拟机

在这里插入图片描述
关掉防火墙 setenforce

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
  • 1
  • 2

准备 ssh 互通环境

四台机器都做

[root@localhost ~]# ssh-keygen 
[root@localhost ~]# ssh-copy-id  root@192.168.27.136
[root@localhost ~]# ssh-copy-id  root@192.168.27.137
[root@localhost ~]# ssh-copy-id  root@192.168.27.138
[root@localhost ~]# ssh-copy-id  root@192.168.27.139
  • 1
  • 2
  • 3
  • 4
  • 5

部署master节点

[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id = 1           #集群中的各节点的id均必须唯一
log-bin = master-log    #开启二进制日志
relay-log = relay-log   #开启中继日志
[root@localhost ~]# systemctl restart mariadb
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

部署slave节点

slave1
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id = 2              #集群中的各节点的id均必须唯一;
relay-log = relay-log       #开启中继日志
log-bin = master-log        #开启二进制日志
read_only = ON              #启用只读属性
relay_log_purge = 0         #是否自动清空不再需要中继日志
log_slave_updates = 1       #使得更新的数据写进二进制日志中 

slave2
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id = 3              #集群中的各节点的id均必须唯一;
relay-log = relay-log       #开启中继日志
log-bin = master-log        #开启二进制日志
read_only = ON              #启用只读属性
relay_log_purge = 0         #是否自动清空不再需要中继日志
log_slave_updates = 1       #使得更新的数据写进二进制日志中 
[root@localhost ~]# systemctl restart mariadb
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

部署一主多从

在主上授权用户并 查看master

MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      369 |              |                  |
+-------------------+----------+--------------+------------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

从节点

MariaDB [(none)]> change master to
    -> master_host='192.168.27.137',
    -> master_user='tom',
    -> master_password='123',
    -> master_log_file='master-log.000003',
    -> master_log_pos=369;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.27.137
                  Master_User: tom
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003
          Read_Master_Log_Pos: 369
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 530
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

安装配置MHA

在master上进行授权
在所有 Mysql 节点授权拥有管理权限的用户可在本地网络中有其他节点上远程访问。

MariaDB [(none)]> grant all on *.* to 'mhaadmin'@'%' identified by '123';
MariaDB [(none)]> flush privileges;
  • 1
  • 2

四个节点都需安装:mha4mysql-node

[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
  • 1

Manager 节点另需要安装:mha4mysql-manager

[root@localhost ~]# yum -y install perl-DBD-MySQL epel-release
[root@localhost ~]# yum -y install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm 
  • 1
  • 2

定义MHA管理配置文件

[root@localhost ~]# mkdir /etc/mha_master
[root@localhost ~]# vim /etc/mha_master/mha.cnf
[server default]                        //适用于server1,2,3个server的配置
user=mhaadmin                           //mha管理用户
password=123                            //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=tom                   //数据库用户名
repl_password=123               //数据库密码
ping_interval=1                         //ping间隔时长
[server1]                                       //节点2
hostname=192.168.27.137         //master主机地址
ssh_port=22                             //节点ssh端口 
candidate_master=1                      //将来可不可以成为master候选节点/主节点
[server2]
hostname=192.168.27.138         //slave主机地址
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.27.139         //slave主机地址
ssh_port=22
candidate_master=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

对四个节点进行检测
检测各节点间 ssh 互信通信配置是否 ok 我们在 Manager 机器上输入下述命令来检测:

在这里插入图片描述
检查管理的MySQL复制集群的连接配置参数是否OK

[root@localhost ~]#  masterha_check_repl -conf=/etc/mha_master/mha.cnf
  • 1

在这里插入图片描述
我们发现检测失败,这可能是因为从节点上没有账号,因为这个架构,任何一个从节点, 将有可能成为主节点, 所以也需要创建账号。
因此,我们需要在master节点上再次执行以下操作:

MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
MariaDB [(none)]> flush privileges;
  • 1
  • 2

再次查看
在这里插入图片描述

启动MHA 查看master节点

[root@localhost ~]# nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
[1] 24349
[root@localhost ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:24349) is running(0:PING_OK), master:192.168.27.137
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/294848
推荐阅读
相关标签
  

闽ICP备14008679号