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高可用方案-PXC(Percona XtraDB Cluster)环境部署详解