当前位置: 首页 > news >正文

MHA实现mysql数据库高可用

目录

MHA原理

MHA工具包

MHA实现mysql高可用实战


MHA原理

①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)

②识别含有最新更新的slave

③应用差异的中继日志(relay log)到其他的slave

④应用从master保存的二进制日志事件(binlog events)

⑤提升一个slave为新的master

⑥使其他的slave连接新的master进行复制

MHA工具包

MHA软件由两部分组成,Manager工具包和Node工具包

①Manager工具包主要包括以下几个工具:

masterha_check_ssh       检查MHA的SSH配置状况
masterha_check_repl     检查MySQL复制状况
masterha_manger         启动MHA
masterha_check_status   检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 故障转移(自动或手动)
masterha_conf_host     添加或删除配置的server信息
masterha_stop  --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用

②Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs     #保存和复制master的二进制日志
apply_diff_relay_logs   #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog   #去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)

③MHA配置文件:

global配置,为各application提供默认配置,默认文件路径 /etc/masterha_default.cnf
application配置:为每个主从复制集群

MHA实现mysql高可用实战

①实验环境:

MHA服务器:192.168.30.14
master:   192.168.30.11
slave1:   192.168.30.12
slave2:   192.168.30.13

②首先将MHA客户端安装包(node包)、服务器安装包(manger包)及master_ip_failover脚本上传到主MHA服务器,master和slave服务器只需要上传客户端安装包(node包),上传到root用户家目录下。本人博客资源中(MHA高可用实战部署包)

③安装MHA

MHA:
yum install epel-release.noarch -y
#有依赖性用yum安装需要先安装epel源
yum -y install mha4mysql-*.rpm
#安装MHA
Master和2个slave:
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
#安装MHA

④MHA配置免密登录建立mha 文件夹 和配置文件

ssh-keygen 
#生成秘钥,4个回车
ssh-copy-id 127.0.0.1
#自己和自己实现免密钥登录
rsync -a .ssh   192.168.30.11:/root/
rsync -a .ssh   192.168.30.12:/root/
rsync -a .ssh   192.168.30.13:/root/
#将秘钥传给所有服务器,-a表示保留权限,rsync可以理解为scp
mkdir /etc/mastermha
#创建mha文件夹
vim /etc/mastermha/app1.cnf
#配置app1.cnf文件,内容全部删除复制以下内容
[server default]
user=mhauser
password=Admin@123
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=test
repl_password=Admin@123
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
#report_script=/usr/local/bin/sendmail.sh     可以不加
check_repl_delay=0
master_binlog_dir=/data/mysql/
[server1]
hostname=192.168.30.11
candidate_master=1
[server2]
hostname=192.168.30.12
candidate_master=1
[server3]
hostname=192.168.30.13
#注意将3个server改为自己的地址,1为主2位备用主,3为从。保存退出
vim   master_ip_failover 
#修改mha脚本,只需要将拷贝的脚本此2行修改即可,其他无须操作
my $vip = '192.168.30.188/24';    
#设置自己网段的Virtual IP  
my $gateway = '192.168.30.2';     
#自己网段的网关Gateway IP  保存退出
mv master_ip_failover  /usr/local/bin/
chmod +x /usr/local/bin/master_ip_failover 
#脚本文件文件剪切到/usr/local/bin/目录下并添加可执行权限使其可以执行
ifconfig ens33:1 192.168.91.188/24
#MHA配置虚拟ip,主挂掉后虚拟ip到备主上

⑤准备主从复制环境

Master执行:
vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=100
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log 
#添加完毕保存退出
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
show master status;
#查看记录二进制日志位置,一会从配置使用
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.30.%' identified by 'Admin@123';
#建立mha管理账户2个slave执行:
vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=102
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
skip_name_resolve=1
general_log 
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
CHANGE MASTER TOMASTER_HOST='192.168.30.11',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
#配置master信息
start slave
#开启主从复制
show slave status;
#查看配置是否成功

⑥MHA服务器上检查 mha 环境并启动mha

masterha_check_ssh --conf=/etc/mastermha/app1.cnf
#检查mha的ssh免密登录环境All SSH connection tests passed successfully
#结尾行出现此信息表示无问题
masterha_check_repl --conf=/etc/mastermha/app1.cnf
#检查mha主从环境
MySQL Replication Health is OK.
#结尾行出现此信息表示无问题
masterha_check_status --conf=/etc/mastermha/app1.cnf
#查看mha状态,默认是停止状态stop
masterha_manager --conf=/etc/mastermha/app1.cnf 
#开启mha,需要等待较长时间启动成功
masterha_check_status --conf=/etc/mastermha/app1.cnf 
#重新查看状态是running

⑦关闭master的mysql查看是否备1成为主且备2的slave信息变为备2的且备1的slave信息为空

master:
systemctl stop mysqld
#主关闭mysql
slave1:
mysql -uroot  -p'Admin@123'
#登录数据库
show  slave  status;
#slave信息为空
slave2:
mysql -uroot  -p'Admin@123'
#登录数据库
show  slave  status;
#slave信息中Master_Host:变为slave1的ip地址##注意就算重新开启master的数据库也不会成为主,需要手动添加为slave。
http://www.lryc.cn/news/42301.html

相关文章:

  • leetcode每日一题:55. 跳跃游戏
  • 【C++】map 和 set
  • 基于SpringBoot的酒店管理系统
  • JAVA框架知识整理
  • 运算放大器:电压比较器
  • Linux的基础知识
  • 【JavaEE】 IntelliJ IDEA 2022.2最新版Tomcat导入依赖详细教程全解及创建第一个Servlet程序
  • 常见的卷积神经网络结构——分类、检测和分割
  • 20230323英语学习
  • 【粉丝投稿】上海某大厂的面试题,岗位是测开(25K*16)
  • shell简单使用介绍
  • RK3568平台开发系列讲解(调试篇)内核函数调用堆栈打印方法汇总
  • 一次内存泄露排查
  • 「Mac安装ps」Adobo Photoshop 2023 下载安装详情教程,支持 AI 插件的 24 版 Photoshop
  • Redis单线程还是多线程?IO多路复用原理
  • 小菜鸟Python历险记:(第五集)
  • 【思维模型】五分钟了解<复利思维>,为何学习复利思维?什么是复利思维?如何应用复利思维?
  • Vue.js语法详解:从入门到精通
  • 程序员的代码行数越少越好?
  • 【每日一题Day156】LC1032字符流 | 字典树
  • V2G模式下含分布式能源网优化运行研究(Matlab代码实现)
  • 手写一个简单的RPC框架
  • 【剑指offer】旋转数组的最小数字
  • 【Dorker】Portainer轻量级可视化工具
  • 基于 vue.js 进行组件封装的方案
  • 【Unityc#专题篇】之c#基础篇
  • Python(白银时代)——模块、包、异常
  • 小程序和Vue写法的区别
  • 如何实现分布式锁
  • 使用VS2019连接Microsoft SQL Server Compact 4.0数据库