MySQL实现(高可用方案-MHA安装及配置)

MySQL高可用性解决方案Master High Availability (MHA) 是一种在 MySQL 故障转移环境中实现快速故障转移和数据保护的开源软件。MHA 能在 MySQL 主节点发生故障时,自动将备节点提升为主节点,并且不会中断正在进行的 SQL 操作。

需求:主从配置中如果主服务故障后,主库配置需自动切换至其中一个从库,MHA框架为此实现方案之一。

① 从宕机崩溃的master 保存二进制日志事件(binlog events );

② 识别含有最新更新的slave;

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

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

提升一个slave(从库) 为新master(主库);

⑥ 使用其他的slave 连接新的master

一、MHA安装

1. 前置环境

三台已经搭建好的MySQL集群,并已配置好主从复制。

在所有节点上执行如下命令

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

2. 安装aliyun wget安装源配置(可选)

# 三台服务器均需要安装
yum install perl-DBD* -y
yum -y install wget
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

3. 下载MHA软件

# 三台服务器均需要下载
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
​
# 
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

4. 安装Node软件以及依赖包(db1,db2,db3)

百度网盘

链接:https://pan.baidu.com/s/1MAKy-D-cbLbXEPtNYNGH7g?pwd=oxcn 
提取码:oxcn

# node依赖
tar zxf mha-node-dep.tar.gz
rpm -ivh node/*
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
# 如果上述命令失败,则使用
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm --nodeps --force
# node依赖也可以在线yum安装:yum install perl-DBD-MySQL

5. 安装Manager软件(db3)

#管理节点安装Manager软件
#需要安装依赖
tar zxf mha-manager-dep.tar.gz  #manager依赖
rpm -ivh manager/*
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm --nodeps --force
#manager依赖也可以在线yum安装:
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManag 

6. 验证manager版本(db3)

masterha_manager  -v

7. 配置ssh免密(db1,db2,db3)

ssh-keygen -t rsa (一路回车)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@db1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@db2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@db3
#三台服务器之间无需密码校验,可参考文章服务器SSH(免密登录),免密登录必须测试成功!

8. 建立配置文件目录(db3)

mkdir -p /etc/mha/{conf,log,scripts}

9. 创建配置文件(db3)

vi /etc/mha/conf/mha.cnf
#注意修改里面的ip,路径,用户,密码等(password与repl_password均为mysql密码)
[server default]
manager_log=/etc/mha/log/manager.log
manager_workdir=/etc/mha/log
master_binlog_dir=/usr/local/mysql/data
#failover和switchover脚本
master_ip_failover_script=/etc/mha/scripts/master_ip_failover
master_ip_online_change_script=/etc/mha/scripts/master_ip_online_change
password=123456
#配置检查主节点的次数
ping_interval=3
repl_password=123456
repl_user=root
ssh_user=root
user=root
​
# masters
[server1]
hostname=192.168.31.135
port=3306
#cadidate_master为1表示优先考虑此节点转为主节点
#candidate_master=1
master_binlog_dir=/usr/local/mysql/data
remote_workdir=/etc/mha/log
​
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.31.140
port=3306
​
[server3]
hostname=192.168.31.141
port=3306

注意:

配置中引用的脚本在附件里面,需要修改脚本master_ip_failover/master_ip_online_change中的my $vip和my $ifdev,代表vip和网卡名称,并上传到db3目录/etc/mha/scripts/

# 安装ifconfig命令
yum install net-tools
# 第一次配置需要在 Master 节点上手动开启虚拟IP,虚拟ip与之前在脚本中配置的保持一直,选用未占用的地址
ifconfig ens33:1 192.168.170.200/24

修改脚本master_ip_failover、master_ip_online_change中的vip信息和网卡信息

my $vip = '192.168.170.200';
my $ifdev = 'ens33';
my $key = '1';
my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 dev $ifdev label $ifdev:$key";
my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";

11. 脚本添加执行权限(db3)

#将脚本文件移到/etc/mha/scripts/中
chmod +x /etc/mha/scripts/*
yum install -y dos2unix
dos2unix /etc/mha/scripts/master_ip_failover

脚本中记着修改vip地址以及用户密码,均为后续需要登录的数据库密码,方便切换主从。

12. ssh免密检查(db3)

# 注意配置[server3]时一定要对自己进行免密登录
masterha_check_ssh --conf=/etc/mha/conf/mha.cnf
. . .
[info] All SSH connection tests passed successfully.

13. 各节点复制情况检查(db3)

masterha_check_repl --conf=/etc/mha/conf/mha.cnf
#Result:Checking the Status of the script.. OK 
#       MySQL Replication Health is OK.

如出现”MySQL Replication Health is NOT OK!“,说明配置有问题

14. 检查manager的状态(db3)

masterha_check_status --conf=/etc/mha/conf/mha.cnf
# mha is stopped(2:NOT_RUNNING).
此处还未启动,停止状态为正常结果。

15. 启动manager(db3)

nohup masterha_manager --conf=/etc/mha/conf/mha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/log/manager.log 2>&1 &# 检查日志
tail -f /etc/mha/log/manager.log
...
Ping(SELECT) succeeded, waiting until MySQL doesn't respond.. 
...

16. 再次检查manager状态(db3)

masterha_check_status --conf=/etc/mha/conf/mha.cnf
#mha (pid:5535) is running(0:PING_OK), master:192.168.31.135

17. 主从高可用切换测试(可选)

确认当前主从状态(检查、检查、检查、一定要检查)

当前主从状态db1(主)、db2(从)、db3(从)

18. 将db1主节点的mysql进程停掉

systemctl stop mysqld

#如非systemctl启动,可用kill -9 pid 杀死进程

19. 检查manager.log

tail -f /etc/mha/log/manager.log
..
Master failover to 192.168.31.140(192.168.31.140:3306) completed successfully.#显示主库已切换到db2

如图所示,可以看到主节点192.168.31.135的mysql进程已经下线,而从节点192.168.31.140的mysql节点也已经代替主节点在运行。

恭喜你的MySQL高可用已经配置成功!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣295. 数据流的中位数(java,堆解法)

Problem: 295. 数据流的中位数 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 由于该题目的数据是动态的我们可以维护两个堆来解决该问题 1.维护一个大顶堆&#xff0c;一个小顶堆 2.每个堆中元素个数接近n/2&#xff1b;如果n是偶数&#xff0c;两个堆中的数据个数…

MyBatis的强大特性--动态SQL

目录 前言 if trim where set foreach 前言 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表…

File类

File 概述 File: 路径 IO流: 传输 路径 相对路径, 绝对路径 File File对象就表示一个路径&#xff0c;可以是文件的路径、也可以是文件夹的路径这个路径可以是存在的&#xff0c;也允许是不存在的 构造方法 代码示例: package FileTest1;import java.io.File;public c…

1+X网络系统建设与运维练习题

1.OSPF的最优路由&#xff0c;会放到IP路由表中指导数据转发 &#xff08;x&#xff09; 2.当AP工作在2.4GHz频段的时候&#xff0c;AP工作的频率范围是2.4GHz~2.4835GHZ。在此频率范围内又划分出14个信道。每信道的中心频率相隔5MHz&#xff0c;每个信道可供占用的带宽为22MHz…

虚幻学习笔记1—给UI添加动画

一、前言 本文所使用的虚幻版本为5.3.2&#xff0c;之前工作都是用unity&#xff0c;做这类效果用的最多的是一个DoTween的插件&#xff0c;在虚幻中都内置集成了这这种效果制作。 图1.1 UI动画 二、过程 1、首先&#xff0c;在诸如按钮、图像等可交互控件中选中&#xff0c;如…

R语言单因素方差分析+差异显著字母法标注+逐行详细解释

R语言单因素方差分析 代码如下 df <- read.csv("data.csv",header TRUE,row.names 1) library(reshape2) df <- melt(df,idc()) names(df) <- c(trt, val) df aov1 <- aov(val~trt,datadf) summary(aov1)library(agricolae) data <- LSD.test(aov…

5 存储器映射和寄存器

文章目录 5.3 芯片内核5.3.1 ICache5.3.2 DCache5.3.3 FlexRAM 5.4 存储器映射5.4.1 存储器功能划分5.4.1.1 存储器 Block0 内部区域功能划分5.4.1.2 储存器 Block1 内部区域功能划分5.4.1.3 储存器 Block2 内部区域功能划分 5.5 寄存器映射5.5.1 GPIO1的输出数据寄存器 5.3 芯…

客户案例:EDLP助力金融行业打造高效数据防泄露体系

客户背景 某金融机构是一家以金融科技为核心&#xff0c;致力于为客户提供全方位、智能化、便捷化金融服务的综合性企业。公司总部位于南京&#xff0c;业务范围覆盖全国&#xff0c;拥有强大的技术研发团队和优秀的业务精英&#xff0c;为客户提供全方位的金融服务解决方案。 …

子类出现和父类同名的成员,子类如何访问父类的同名成员?

一. 子类访问子类同名的成员&#xff0c;直接访问即可。 #include <iostream> using namespace std;class Base { public:Base(int age 0) : m_age(age) {}int get_age() {return m_age;}static int get_counter() {return ms_counter;}int m_age;static int ms_counte…

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …

什么是网络攻击?阿里云服务器可以避免被攻击吗?

网络攻击是指:损害网络系统安全属性的任何类型的进攻动作。进攻行为导致网络系统的机密性、完整性、可控性、真实性、抗抵赖性等受到不同程度的破坏。 网络攻击有很多种&#xff0c;网络上常见的攻击有DDOS攻击、CC攻击、SYN攻击、ARP攻击以及木马、病毒等等&#xff0c;所以再…

xxl-job适配postgresql数据库

xxl-job支持了mysql数据库&#xff0c;其他的数据库适配得自己弄一下&#xff0c;下面以目前最新的2.4.1为例进行说明适配postgresql数据库的过程。 获取源代码 从github或gitee获取源代码&#xff0c;目前最新版本2.4.1 xxl官网&#xff1a;分布式任务调度平台XXL-JOB 建立…

Linux安装Java环境

处理安装环境 检查系统版本 [rootjeven ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core)检查系统内核版本 [rootjeven ~]# uname -r 6.1.8-1.el7.elrepo.x86_64清空卸载java环境&#xff08;如果已经安装了&#xff09; 查询java所在位置 [rootjeven …

什么是Anaconda?作用是?使用python必须要安装嘛?

一、什么是Anaconda以及其作用&#xff1f; 通俗来讲&#xff0c;Anaconda算是一个环境容器&#xff0c;也可以叫环境管理器。 作用&#xff1a;可以在Anaconda容器中为python项目创建不同的环境。在各个不同环境中可以安装不同版本的包并且各个环境互不影响。可以在使用不同项…

自动驾驶DCLC 功能规范

目录 1 概述Summary....................................................................................................... 4 1.1 目的Purpose....................................................................................................... 4 1.2 范围Ran…

每天学习一点点之 MySQL TINYINT

我已经不是第一次遇到关于 TINYINT 的问题了。在 MySQL 中&#xff0c;当我们将某个字段设置为 TINYINT&#xff0c;随着业务的扩展&#xff0c;我们可能会发现 TINYINT 的范围无法满足需求。这时需要修改字段属性。但如果表的数据量很大&#xff0c;或者由于分表导致涉及的表数…

java+springboot物流管理系统设计与实现wl-ssmj+jsp

物流管理系统的开发和综合性的物流信息网站平台的建设。研究的重点是运输管理信息系统&#xff0e;本系统是一套基于运输作业流程的管理系统&#xff0c;该系统以运输任务、货品、商务三大线索设计开发。运输任务是该管理系统的核心&#xff0c;系统通过对运输任务中的接收、调…

[cocos creator]EditBox,editing-return事件,清空输入框

需求&#xff1a; 监听EditBox&#xff0c;editing-return 回车事件&#xff0c;在输入框内点击回车后&#xff0c;发送内容&#xff0c;并清空输入框 问题&#xff1a; 设置node.getComponent(EditBox).string ; 没有效果 解决办法&#xff1a; //设置string 为空 this.v…

应用程序APP制作用Vue3CreateApp打包有什么优势?有哪些好处?

在当代的前端开发领域&#xff0c;Vue.js作为一个领先的JavaScript框架&#xff0c;一直处于技术革新和发展的前沿。Vue3作为该框架的最新版本&#xff0c;带来了更多的新特性和优化。在这些新特性中&#xff0c;createApp方法是一个非常值得关注的变化。对于开发者而言&#x…

MyBatis教程之逆向工程(十一)

正向工程&#xff1a;先创建Java实体类&#xff0c;由框架负责根据实体类生成数据库表。Hibernate是支持正向工程 的。逆向工程&#xff1a;先创建数据库表&#xff0c;由框架负责根据数据库表&#xff0c;反向生成如下资源&#xff1a; 1.Java实体类 2.Mapper…