mysql8.0使用MHA实现高可用

一、环境配置

本实验环境共有四个节点, 其角色分配如下(实验机器均为centos 7.x )

机器名称IP配置服务角色备注
manager192.168.8.145manager控制器用于监控管理
master192.168.8.143数据库主服务器开启bin-log relay-log 关闭relay_log
slave1192.168.8.146数据库从服务器开启bin-log relay-log 关闭relay_log
slave2192.168.8.147数据库从服务器开启bin-log relay-log 关闭relay_log

环境准备如下:

1、准备4台CentOS 7.x , 最下化安装;

2、更换yum源,可以替换为阿里云、163等;

          mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup //备份源
         curl -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo //下载阿里源
        yum clean all    //清除缓存        yum repolist     //查看当前源

3、关闭防火墙、禁用SELINUX;

4、配置主机名和hosts解析,时间同步

5、配置MySQL8 一主两从环境

 为了方便我们后期的操作,我们在各节点的/etc/hosts文件配置内容中添加如下内容:

 同时操作四台机器:
[root@manager ~]# cat >> /etc/hosts <<END
> 192.168.8.145 manager
> 192.168.8.143 master
> 192.168.8.146 slave1
> 192.168.8.147 slave2
> END

1、初始主节点master配置

修改master的数据库配置文件来对其进行初始化配置(需要提前下载好MySQL)

[root@master ~]# vim /etc/my.cnf

[mysql]   
prompt = (\\u@\\h) [\d] >\\
no_auto_rehash  

server_id = 143             //复制集群中的各节点的id均必须唯一      
log-bin = mysql-bin         //开启中继日志       
skip_name_resolve           //关闭名称解析(非必须)     
relay-log = relay-log         //开启二进制日志  
gtid-mode = on                  //启用gtid类型  
enforce-gtid-consistency = true     //强制GTID的一致性
log-slave-updates = 1        //slave更新是否记入日志


[root@master ~]# systemctl start mysqld
[root@master ~]# systemctl status mysqld

2、所有slave节点依赖配置

两台机器同时 复制上面主节点master的数据库配置文件加入的内容,并修改对应的server_id,以及加入relay_log_purge = 0     //#是否自动清空不再需要的中继日志  即可

3、配置一主两从复制架构 

master节点上:

8.0以上的MySQL版本不允许直接授权用户,必须先创建用户才能授权

(root@localhost) [(none)]>create user 'slave'@'192.168.8.%' identified with mysql_native_password by 'MySQL@123';
(root@localhost) [(none)]>grant replication slave,replication client on *.* to 'slave'@'192.168.8.%';
Query OK, 0 rows affected, 1 warning (0.01 sec)

slave节点:

同时操作slave1和slave2 两台机器

(root@localhost) [(none)]>change master to
        master_user='slave',
        master_password='MySQL@123',
        master_host='192.168.8.143',
        master_auto_position=143;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

(root@localhost) [(none)]>start slave;
Query OK, 0 rows affected (0.00 sec)

二、安装配置MHA 

1、master上创建用户并授权

(root@localhost) [(none)] >create user 'mhaadmin'@'192.168.8.%' identified with mysql_native_password by 'Mha@1234';
Query OK, 0 rows affected (0.01 sec)
(root@localhost) [(none)] >grant all on *.* to 'mhaadmin'@'192.168.8.%' ;
Query OK, 0 rows affected (0.00 sec)
 

2、 准备 ssh 互通环境

 MHA集群中的各节点彼此之间均需要基于ssh互信通信,以实现远程控制及数据管理功能。

在所有的节点上面生成密钥对(同步)
[root@manager ~]# ssh-keygen -f ~/.ssh/id_静默模式rsa -P '' -q    其中-P ‘’ 是不做秘钥保护,q是静默模式
[root@all ~]# ssh-copy-id manager

[root@all ~]# cat ~/.ssh/authorized_keys 

所有节点都生成密钥对,然后拷贝到管理节点,最后管理节点的authorized_keys分发到其他节点

[root@manager ~]# scp ~/.ssh/authorized_keys node2:~/.ssh/
[root@manager ~]# scp ~/.ssh/authorized_keys node3:~/.ssh/
[root@manager ~]# scp ~/.ssh/authorized_keys node4:~/.ssh/

验证:所有节点验证
[root@node4 ~]# for i in manager master slave1 slave2;do ssh $i hostname;done

manager
master
slave1
slave2

 

3、安装MHA包 

manager上安装manager和node;主从同步节点机器上只安装node;解决依赖,只需额外安装一个epel扩展源即可;

[root@master,slave1,slave2 ~]# curl -o  /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@master,slave1,slave2 ~]# yum  install    -y  mysql84-community-release-el7-1.noarch.rpm

[root@master,slave1,slave2 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

这里安装依赖比较麻烦

4、初始化MHA,进行配置 

Manager 节点需要为每个监控的 master/slave 集群提供一个专用的配置文件,而所有的 master/slave 集群也可共享全局配置。全局配置文件默认为/etc/masterha_default.cnf,其为可选配置。如果仅监控一组 master/slave 集群,也可直接通过 application 的配置来提供各服务器的默认配置信息。而每个 application 的配置文件路径为自定义。具体操作见下一步骤。  

 5、定义MHA股案例配置文件

为MHA专门创建一个管理用户, 方便以后使用, 在mysql的主节点上, 三个节点自动同步:

创建配置文件目录
[root@manager ~]# mkdir /etc/mha
创建日志目录
[root@manager ~]# mkdir -p /var/log/mha/app1
[root@manager ~]# vim /etc/mha/app1.cnf

[server default]             //适用于server1,2,3个server的配置
user=mhaadmin                 //mha管理用户
password=Mha@1234                                //mha管理密码
manager_workdir=/var/log/mha/app1         //mha_master自己的工作路径
manager_log=/var/log/mha/app1/manager.log     // mha_master自己的日志文件
ssh_user=root                 // 基于ssh的密钥认证
repl_user=slave                //数据库用户名
repl_password=MySQL@123    //数据库密码
ping_interval=1             //ping间隔时长
[master] 随便                     //节点2
hostname=192.168.8.143        //节点2主机地址
ssh_port=22                 //节点2的ssh端口
candidate_master=1             //将来可不可以成为master候选节点/主节点
[slave1]
hostname=192.168.8.146
ssh_port=22
candidate_master=1
[slave2]
hostname=192.168.8.147
ssh_port=22
candidate_master=1

6、对四个节点进行检测 

1)检测各节点间 ssh 互信通信配置是否 ok

[root@manager ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

2)检查管理的MySQL复制集群的连接配置参数是否OK

[root@manager ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

三、命令启动MHA

 我们在 manager 节点上执行以下命令来启动 MHA:
[root@manager ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null >/var/log/mha/app1/manager.log 2>&1 &
[2] 11857
[root@manager ~]#  masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:11857) is running(0:PING_OK), master:192.168.8.143
也可查看监控日志:

[root@manager ~]# tail -f /var/log/mha/app1/manager.log
 

四、配置VIP 

vip配置可以采用两种方式,一种通过keepalived的方式管理虚拟ip的浮动;另外一种通过脚本方式启动虚拟ip的方式 (即不需要keepalived或者heartbeat类似的软件).

为了防止脑裂发生(互相争抢资源),推荐生产环境采用脚本的方式来管理虚拟ip,而不是使用keepalived来完成。

1、编写脚本

[root@manager ~]# vim /usr/local/bin/master_ip_failover

#!/usr/bin/env perluse strict;
use warnings FATAL => 'all';use Getopt::Long;my ($command,          $ssh_user,        $orig_master_host, $orig_master_ip,$orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
);my $vip = '192.168.8.210/24';必须是自己网段中没有用过的
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";  这里ens33可变
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";GetOptions('command=s'          => \$command,'ssh_user=s'         => \$ssh_user,'orig_master_host=s' => \$orig_master_host,'orig_master_ip=s'   => \$orig_master_ip,'orig_master_port=i' => \$orig_master_port,'new_master_host=s'  => \$new_master_host,'new_master_ip=s'    => \$new_master_ip,'new_master_port=i'  => \$new_master_port,
);exit &main();sub main {print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if ( $command eq "stop" || $command eq "stopssh" ) {my $exit_code = 1;eval {print "Disabling the VIP on old master: $orig_master_host \n";&stop_vip();$exit_code = 0;};if ($@) {warn "Got Error: $@\n";exit $exit_code;}exit $exit_code;}elsif ( $command eq "start" ) {my $exit_code = 10;eval {print "Enabling the VIP - $vip on the new master - $new_master_host \n";&start_vip();$exit_code = 0;};if ($@) {warn $@;exit $exit_code;}exit $exit_code;}elsif ( $command eq "status" ) {print "Checking the Status of the script.. OK \n";exit 0;}else {&usage();exit 1;}
}sub start_vip() {`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
sub stop_vip() {return 0  unless  ($ssh_user);`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}sub usage {print"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

 [root@manager ~]# chmod +x /usr/local/bin/master_ip_failover 

2、更改配置文件

[root@manager ~]#  vim /etc/mha/app1.cnf 

[server default]
添加:
master_ip_failover_script=/usr/local/bin/master_ip_failover

3、主库上,手工生成第一个vip地址  

[root@master ~]# ifconfig ens33:1 192.168.8.210/24

4、 重启MHA

[root@manager ~]#  systemctl restart masterha_managerd

五、测试MHA故障转移

六、 提供新的从节点以修复复制集群

七、新节点提供后再次执行检查操作

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

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

相关文章

<论文>DeepSeek-R1:通过强化学习激励大语言模型的推理能力(深度思考)

一、摘要 本文跟大家来一起阅读DeepSeek团队发表于2025年1月的一篇论文《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning | Papers With Code》&#xff0c;新鲜的DeepSeek-R1推理模型&#xff0c;作者规模属实庞大。如果你正在使用Deep…

【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪

文章目录 【Android 开发 AI 实战】选择目标跟踪基于 opencv 实现 —— 运动跟踪一、引言二、Android 开发与 AI 的融合趋势三、OpenCV 简介四、运动跟踪原理&#xff08;一&#xff09;光流法&#xff08;二&#xff09;卡尔曼滤波&#xff08;三&#xff09;粒子滤波 五、基于…

第1章 特征工程

原文&#xff1a;第1章 特征工程 俗话说&#xff0c;“巧妇难为无米之炊”。在机器学习中&#xff0c;数据和特征便是“米”&#xff0c;模型和算法则是“巧妇”。没有充足的数据、合适的特征&#xff0c;再强大的模型结构也无法得到满意的输出。正如一句业界经典的话所说&…

idea 如何使用deepseek 保姆级教程

1.安装idea插件codegpt 2.注册deepseek并生成apikey deepseek 开发平台&#xff1a; DeepSeek​​​​​​​ 3.在idea进行codegpt配置 打开idea的File->Settings->Tools->CodeGPT->Providers->Custom OpenAI Chat Completions的URL填写 https://api.deepseek…

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头&#xff0c;这是一款150万像素的多光谱摄像头。 相较于普通摄像头&#xff0c;它具有以下优势&#xff1a; 色彩还原度高&#xff1a;色彩还原准确度提升约 120%&#xff0c;能捕捉更多光谱信息&#xff0c;使拍摄照片色…

10vue3实战-----实现登录的基本功能

10vue3实战-----实现登录的基本功能 1.基本页面的搭建2.账号登录的验证规则配置3.点击登录按钮4.表单的校验5.账号的登录逻辑和登录状态保存6.定义IAccount对象类型 1.基本页面的搭建 大概需要搭建成这样子的页面: 具体的搭建界面就不多讲。各个项目都有自己的登录界面&#…

vue学习5

1.自定义创建项目 2.ESlint代码规范 正规的团队需要统一的编码风格 JavaScript Standard Style 规范说明&#xff1a;https://standardjs.com/rules-zhcn.html 规则中的一部分&#xff1a; (1)字符串使用单引号 ‘aabc’ (2)无分号 const name ‘zs’ (3)关键字后加空格 if(n…

QTreeView和QTableView单元格添加超链接

QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。 在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。 一.效果 二.实现 QHTreeView.h #ifndef QHTREEVIEW_H #def…

Qt监控设备离线检测/实时监测设备上下线/显示不同的状态图标/海康大华宇视华为监控系统

一、前言说明 监控系统中一般有很多设备&#xff0c;有些用户希望知道每个设备是否已经上线&#xff0c;最好有不同的状态图标提示&#xff0c;海康的做法是对设备节点的图标和颜色变暗处理&#xff0c;离线的话就变暗&#xff0c;有可能是加了透明度&#xff0c;而大华的处理…

IDEA+DeepSeek让Java开发起飞

1.获取DeepSeek秘钥 登录DeepSeek官网 : https://www.deepseek.com/ 进入API开放平台&#xff0c;第一次需要注册一个账号 进去之后需要创建一个API KEY&#xff0c;然后把APIkey记录保存下来 接着我们获取DeepSeek的API对话接口地址&#xff0c;点击左边的&#xff1a;接口…

docker学习笔记

1.docker与虚拟机技术的不同 传统虚拟机&#xff1a;虚拟出一条硬件&#xff0c;运行一个完整的操作系统&#xff0c;然后在这个系统上安装和运行软件。容器内的应用直接运行在&#xff0c;宿主机的内容&#xff0c;容器是没有自己的内核的&#xff0c;也没有虚拟我们的硬件每…

Linux之kernel(4)netlink通信

Linux内核(04)之netlink通信 Author: Once Day Date: 2023年1月3日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可查看专栏: Linux内核知识_Once-Day的博客-…

视觉硬件选型和算法选择(CNN)

基础知识 什么是机械视觉: 机械视觉是一种利用机器代替人眼来进行测量和判断的技术&#xff0c;通过光学系统、图像传感器等设备获取图像&#xff0c;并运用图像处理和分析算法来提取信息&#xff0c;以实现对目标物体的识别、检测、测量和定位等功能。 机械视觉与人类视觉有什…

Qt元对象系统

目录 1.元对象系统概述 2 宏QOBJECT slots emit 2.1 QOBJECT 2.2 信号槽相关宏 3 信号和槽 3.1 信号和槽的链接使用 3.2 信号槽触发流程 3.3 信号参数自定义 3.4 槽函数中获取发射信号的对象&#xff08;widget&#xff09; 3.4.1 使用QObject::sender() 3.4.2 在连…

verilog练习:i2c slave 模块设计

文章目录 前言1. 结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了&#xff0c;网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总&#xff0c;如果对读者有…

什么是中间件中间件有哪些

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…

【键盘识别】实例分割

第一步 键盘检测 方案一 canny边缘检测 canny边缘检测检测结果不稳定,容易因为复杂背景或光线变换检测出其他目标。 如图是用canny边缘检测方法标出的检测出的边缘的四个红点。 参考的是这篇文章OpenCV实战之三 | 基于OpenCV实现图像校正_opencv 图像校正-CSDN博客 方案二…

线程上下文-ThreadLocal原理

ThreadLocal主要作用&#xff1a;为每个线程提供独立的变量副本&#xff0c;实现线程间的数据隔离&#xff0c;从而避免多线程环境下的资源共享冲突。 原理 ThreadLocal有个内部类 ThreadLocalMap&#xff0c;顾名思义是个Map结构&#xff1a;key为 ThreadLocal实例&#xff0…

【Python】元组

个人主页&#xff1a;GUIQU. 归属专栏&#xff1a;Python 文章目录 1. 元组的本质与基础概念1.1 不可变序列的意义1.2 元组与数学概念的联系 2. 元组的创建方式详解2.1 标准创建形式2.2 单元素元组的特殊处理2.3 使用 tuple() 函数进行转换 3. 元组的基本操作深入剖析3.1 索引操…

SpringSecurity:授权服务器与客户端应用(入门案例)

文章目录 一、需求概述二、开发授权服务器1、pom依赖2、yml配置3、启动服务端 三、开发客户端应用1、pom依赖2、yml配置3、SecurityConfig4、接口5、测试 一、需求概述 maven需要3.6.0以上版本 二、开发授权服务器 1、pom依赖 <dependency><groupId>org.springfr…