随缘操作:MySQL实现MHA高可用配置及故障切换理论加实操演练--------------------电脑CPU100%照样干

MHA高可用前言一:MHA架构1.1:MHA概述1.2:MHA的组成1.3:MHA Manager与MHA Node的作用1.31:MHA Manager1.32:MHA Node1.4:MHA特点1.5:MHA工作原理二:案列环境2.1:搭建Mysal主从复制环境2.21:修改主机名便于分区各个服务器2.22:安装编译依赖的环境2.23:安装gmak2.24:安装Mysql数据库2.25:修改Master的主配置文件2.26:三台分别启动mysql服务2.27:配置Mysql一主两从2.28:验证主从复制
摘要由CSDN通过智能技术生成

前言

MHA是由日本人youshimaton(原就职于DeNA,现就职于FaceBook)开发的比较成熟的MySQL高可用方案。MHA能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品TMHA,目前已支持一主一从。在这里插入图片描述

一:MHA架构

** MHA由MHA Manager和MHA Node组成。如下图:**
在这里插入图片描述

1.1:MHA概述

  • —套优秀的MySQL高可用环境下故障切换和主从复制的软件
  • MySQL故障过程中,MHA能做到O-30秒内自动完成故障切换

1.2:MHA的组成

  • MHA Manager(管理节点)
  • MHA Node(数据节点)

1.3:MHA Manager与MHA Node的作用

1.31:MHA Manager

  • 运行一些工具,比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具实现手动实现master故障切换、在线mater转移、连接检查等等。一个Manager可以管理多个master-slave集群。

1.32:MHA Node

  • 部署在所有运行MySQL的服务器上,无论是master还是slave。主要作用有三个。

  • Ⅰ、保存二进制日志如果能够访问故障master,会拷贝master的二进制日志

  • II、应用差异中继日志从拥有最新数据的slave上生成差异中继日志,然后应用差异日志。

  • III、清除中继日志在不停止SQL线程的情况下删除中继日志

1.4:MHA特点

  • 自动故障切换过程中,MHA视图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

  • 使用半同步复制,可以大大降低数据丢失的风险

  • 目前MHA支持一主多从架构,最少三台服务,即一两从

1.5:MHA工作原理

在这里插入图片描述

  • 当master出现故障时,通过对比slave之间I/O线程读取masterbinlog的位置,选取最接近的slave做为latestslave。其它slave通过与latest slave对比生成差异中继日志。在latest slave上应用从master保存的binlog,同时将latest slave提升为master。最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制。

  • 在MHA实现Master故障切换过程中,MHA Node会试图访问故障的master(通过SSH),如果可以访问(不是硬件故障,比如InnoDB数据文件损坏等),会保存二进制文件,以最大程度保证数据不丢失。MHA和半同步复制一起使用会大大降低数据丢失的危险。

二:案列环境

  • 案列拓扑图如下
    在这里插入图片描述

  • 实验思路:

    • 1、 安装MySQL数据库
    • 2、 配置MySQl一主两从
    • 3、 安装MHA软件
    • 4、 配置无密码认证
    • 5、 配置MySQL MHA 高可用
    • 6、 模拟 master 故障切换
  • 实验过程

  • 因为操作系统是centos7,所以要下载MHA 0.57版本 系统:centos 7.6
    在三台MySQL 节点上分别安装数据库,MySQL版本请使用5.6.36,cmake版本请使用2.8.6。下面只在Mysql1上面做演示,安装过程如下。

主服务器(master) IP:20.0.0.41
从服务器(slave) IP:20.0.0.42
主/从服务器 (tom03) IP:20.0.0.43
MHA-manager IP: 20.0.0.44

  • 软件包直接下载即可

链接:https://pan.baidu.com/s/1loTBbGw88a9yv5MOi98ZnQ
提取码:owxk

2.1:搭建Mysal主从复制环境

2.21:修改主机名便于分区各个服务器

  • 关闭所有防火墙跟安装防护功能
[root@localhost ~]# hostnamectl set-hostname MHA
[root@localhost ~]# su
[root@mha ~]# iptables -F
[root@mha ~]# setenforce 0



[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# su
[root@master ~]# iptables -F
[root@master ~]# setenforce 0



[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# su
[root@slave ~]# iptables -F
[root@slave ~]# setenforce 0



#作为主备
[root@tom03 ~]# iptables -F
[root@tom03 ~]# setenforce 0

2.22:安装编译依赖的环境

  • 三台服务器都安装
[root@master~]# yum install ncurses-devel gcc-c++ gcc perl-Module-Install -y

2.23:安装gmak

#把安装包移动到家目录
[root@master ~]# ls   
anaconda-ks.cfg       mha4mysql-manager-0.57.tar.gz  ruby-2.4.1.tar.gz  图片  桌面
cmake-2.8.6           mha4mysql-node-0.57.tar.gz     公共               文档
cmake-2.8.6.tar.gz    mysql-5.6.36                   模板               下载
initial-setup-ks.cfg  mysql-5.6.36.tar.gz            视频               音乐
#进行解压camke
[root@master ~]# tar zxvf cmake-2.8.6.tar.gz 
#切换到cmake目录
[root@master ~]# cd cmake-2.8.6/
#执行脚本配置文件
[root@master cmake-2.8.6]# ./configure 
#编译安装
[root@master cmake-2.8.6]# gmake && gmake install

2.24:安装Mysql数据库

#解压mysql
[root@master ~]# tar zxvf mysql-5.6.36.tar.gz 
[root@master ~]# cd mysql-5.6.36/

[root@master mysql-5.6.36]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc

#编译
[root@master mysql-5.6.36]# make
[root@master mysql-5.6.36]# make install

#把主配置文件复制到etc/my.cf
[root@master mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf
#启动脚本
[root@master mysql-5.6.36]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

#增加执行权限
[root@localhost mysql-5.6.36]# chmod +x /etc/rc.d/init.d/mysqld 

#将mysql加入到chkconfig系统表中
[root@master mysql-5.6.36]# chkconfig --add mysqld

#配置环境变量便于系统所识别
[root@master mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

#使环境变量生效
[root@master mysql-5.6.36]# source /etc/profile

#设置组
[root@master mysql-5.6.36]# groupadd mysql
[root@master mysql-5.6.36]# useradd -M -s /sbin/nologin mysql -g mysql
[root@master mysql-5.6.36]# chown -R mysql.mysql /usr/local/mysql/

#创建数据文件存放位置
[root@master mysql-5.6.36]# mkdir -p /data/myssql


#初始化数据库

/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--user=mysql

2.25:修改Master的主配置文件

  • 三台服务器的server-id不能一样
[root@master mysql-5.6.36]# vim /etc/my.cnf

[mysqld]段落添加
server-id =1                     //表示唯一id
log_bin=master-bin              //主服务器日志文件
log-slave-updates=true          //从服务器更新二进制日志

#配置从从服务器
[root@slave ~]# vim /etc/my.cnf

[mysqld]段落添加
server-id = 2                    //不能与主服务器一样
log_bin = master-bin
relay
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值