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