Bootstrap

MYSQL实战案例——高可用架构MHA

MySQL高可用架构MHA

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

工作原理:

  • 从宕机崩溃的master保存二进制日志事件(binlog events)
  • 识别最新更新的slave
  • 应用差异的中继日志(relay log)到其他slave
  • 应用从master保存的二进制日志事件
  • 提升一个slave为新master
  • 使用其他的slave连接新的master进行复制

注意:MHA需要基于ssh-key验证登入方法

实验环境

10.0.2.7       MHA manager
10.0.2.8       master 
10.0.2.18      slave1
10.0.2.28      slave2

所需安装包
MHA manager和node的rpm包网址:
https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads(需要科学上网)
实验过程

先在master,slave1,slave2主机上配置主从复制
master

[root@master ~]#yum install mariadb-server -y
[root@master ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=8
log-bin=/data/logbin/mysql-bin
skip-name-resolve
[root@master ~]#mkdir /data/logbin/
[root@master ~]#chown -R mysql.mysql /data/logbin/
[root@master ~]#systemctl resrart mariadb
[root@master ~]#mysql
MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     28196 |
| mysql-bin.000002 |       540 |
+------------------+-----------+
2 rows in set (0.000 sec)

MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.2.%' identified by 'xiurong';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> grant all on *.* to mha@'10.0.2.%' identified by 'xiurong';

#安装MHA node 的rpm包
[root@master ~]#yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

slave1

[root@slave1 ~]#yum install mariadb-server -y
[root@slave1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=18
read-only
log-bin=/data/logbin/mysql-bin
relay_log_purge=0
skip_name_resolve


[root@slave1 ~]#mkdir /data/logbin/
[root@slave1 ~]#chown -R mysql.mysql /data/logbin/
[root@slave1 ~]#systemctl restart mariadb
[root@slave1 ~]#mysql
MariaDB [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='10.0.2.8',
    ->   MASTER_USER='repluser',
    ->   MASTER_PASSWORD='xiurong',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mysql-bin.000002',
    ->   MASTER_LOG_POS=540;
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 
MariaDB [(none)]> 
MariaDB [(none)]> 
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.0.2.8
                   Master_User: repluser
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000004
           Read_Master_Log_Pos: 342
                Relay_Log_File: relay-log.000004
                 Relay_Log_Pos: 641
         Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB: 
           Replicate_Ignore_DB: 
            Replicate_Do_Table: 
        Replicate_Ignore_Table: 
       Replicate_Wild_Do_Table: 
   Replicate_Wild_Ignore_Table: 
                    Last_Errno: 0
                    Last_Error: 
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 342
               Relay_Log_Space: 2234
               Until_Condition: None
                Until_Log_File: 
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File: 
            Master_SSL_CA_Path: 
               Master_SSL_Cert: 
             Master_SSL_Cipher: 
                Master_SSL_Key: 
         Seconds_Behind_Master: 0
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error: 
                Last_SQL_Errno: 0
                Last_SQL_Error: 
   Replicate_Ignore_Server_Ids: 
              Master_Server_Id: 8
                Master_SSL_Crl: 
            Master_SSL_Crlpath: 
                    Using_Gtid: No
                   Gtid_IO_Pos: 
       Replicate_Do_Domain_Ids: 
   Replicate_Ignore_Domain_Ids: 
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Sla
;