MySQL高可用

Posted An.amazing.rookie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高可用相关的知识,希望对你有一定的参考价值。

MHA高可用工作过程

MHA对主从节点进行监控,发现主节点故障,会提升一个同步度较高的从节点为新的主;并且应用同步度高的从节点的中继日志到其他从节点上;如果主节点的故障并非是硬件造成,可以进行ssh连接,那么MHA服务器(安装MHA-manager包的主机)会进行故障转移,会从宕机的主机节点中保存二进制日志事件,把二进制日志应用到新提升的主服务器上,使其他的从节点连接新的主
MHA节点具有故障转移帮助程序脚本,例如解析mysql二进制/中继日志,标识中继日志位置(应将中继日志从该位置应用到其他从属服务器,将事件应用于目标从属服务器等)。MHA Node在每个MySQL服务器上运行。当MHA Manager进行故障转移时,MHA Manager会通过SSH连接MHA Node并在需要时执行MHA Node命令。

MHA工作原理

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

MHA原理图

技术图片

MHA的manager和node包下载地址

https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

MHA的实现及配置

最少准备4台机器

主节点配置

[root@localhost ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y  #主从节点需要安装mha的node包
[root@localhost ~]# vim /etc/my.cnf  
[mysqld]
server-id=17
log-bin
skip-name-resolve      #防止mha连接时,把IP反向解析成名字
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# mysql
MariaDB [(none)]> grant replication slave on *.* to repluser@‘192.168.38.%‘ identified by ‘centos‘;   #创建复制用的账号
MariaDB [(none)]> grant all on *.* to mhauser@‘192.168.38.%‘ identified by ‘centos‘;   #创建mha用于管理的账号,提升从为主;主节点创建的账号会同步到从节点

slave1配置

[root@slave1 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
server-id=27
log-bin      #从节点会提升为主节点,二进制日志必须开启
read-only     #当从节点提升为主节点,mha会把read-only属性在mysql中关闭
relay-log-purge=0    #不清空中继日志,mha会把统计日志同步到其他slave上
skip-name-resolve
[root@slave1 ~]# systemctl restart mariadb
[root@slave1 ~]# mysql
MariaDB [(none)]> CHANGE MASTER TO    #指定主节点信息
   -> MASTER_HOST=‘192.168.38.37‘,
   -> MASTER_USER=‘repluser‘,        
   -> MASTER_PASSWORD=‘centos‘,
   -> MASTER_PORT=3306,
   -> MASTER_LOG_FILE=‘mariadb-bin.000001‘,
   -> MASTER_LOG_POS=245;
MariaDB [(none)]> start slave;

slave2配置

[root@slave2 ~]# yum install mha*.rpm -y 
[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
server-id=37
log-bin
read-only
relay-log-purge=0
skip-name-resolve
[root@slave2 ~]# systemctl restart mariadb
[root@slave2 ~]# mysql
MariaDB [(none)]> CHANGE MASTER TO
   -> MASTER_HOST=‘192.168.38.37‘,
   -> MASTER_USER=‘repluser‘,
   -> MASTER_PASSWORD=‘centos‘,
   -> MASTER_PORT=3306,
   -> MASTER_LOG_FILE=‘mariadb-bin.000001‘,
   -> MASTER_LOG_POS=245;
MariaDB [(none)]> start slave;

MHA-manager管理机配置

需要准备的包:

mha4mysql-manager-0.56-0.el6.noarch.rpm   
mha4mysql-node-0.56-0.el6.noarch.rpm
安装mha4mysql-manager包时,需要开启epel源,manager有的依赖包需要从epel源上下载

配置:

[root@mha-manager ~]# ssh-keygen    #生成公钥私钥对,mha是基于ssh协议,连接节点进行相关操作的,所以需要基于Key验证
[root@mha-manager ~]# cd .ssh/
[root@mha-manager .ssh]# ssh-copy-id 127.0.0.1   #把公钥发送到本机的.ssh/authorized_keys文件中
[root@mha-manager ~]# scp -rp .ssh 192.168.38.37:/root/  #把本机的.ssh目录保留属性发送到远程主机的root目录下
[root@mha-manager ~] #scp -rp .ssh 192.168.38.47:/root/
[root@mha-manager ~] #scp -rp .ssh 192.168.38.57:/root/  #mha-manager可以基于key验证连接三个节点,并且4台机器之间可以相互连接
[root@mha-manager ~]# yum install mha*.rpm -y   #安装mha-manager和node包 
[root@mha-manager ~]# vim /etc/mha.conf    #编辑mha配置文件
[server default]
user=mhauser       #指定mysql创建的管理账号,用于提生主节点
password=centos
manager_workdir=/data/mastermha/app1/    #存放manager生成的文件
manager_log=/data/mastermha/app1/manager.log   #指定日志目录,这些目录会自动生成
remote_workdir=/data/mastermha/app1/   #远程节点生成的数据存放目录
ssh_user=root      #ssh连接主节点的用户
repl_user=repluser   #指定mysql复制用户
repl_password=centos
ping_interval=1    #1秒钟发送一次监控报文

[server1]
hostname=192.168.38.37     #mha会自动识别主从
[server2]
hostname=192.168.38.47
candidate_master=1       #优先提升为主节点;如果不指定,系统会自动根据同步进度,自行提升主节点
[server3]
hostname=192.168.38.57

#一个高可用集群用一个配置文件
[root@mha-manager ~]# masterha_check_ssh --conf=/etc/mha.conf   #检查mha的ssh连接,读取配置文件
[root@mha-manager ~]# masterha_check_repl --conf=/etc/mha.conf   #检测配置文件中列出的服务器列表,识别主从及检测复制等信息
[root@mha-manager ~]# masterha_manager --conf=/etc/mha.conf      #执行mha,mha默认是前端执行,不能关闭终端窗口,工作中需要放到后端;并且mha检查到一次故障,提升完主节点之后,就会退出mha进程

注意:

MHA把从节点提升为主节点,用管理账号连接从节点,删除里面的主从复制信息,关闭slave线程,关闭read_only等属性;

MariaDB [(none)]> select @@read_only;     #从节点提升为主节点
+-------------+
| @@read_only |
+-------------+
|           0 |
+-------------+
MariaDB [(none)]> show slave statusG
Empty set (0.00 sec)

以上是关于MySQL高可用的主要内容,如果未能解决你的问题,请参考以下文章

Mysql实现MHA高可用

MySQL-高可用架构MHA

MySQL-高可用架构MHA

MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

MySQL高可用工具Orchestrator raft模式部署

MySQL高可用工具Orchestrator raft模式部署