Mysql—高可用集群MHA

1:什么是MHA?

 MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 

MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 

MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

2:MHA 的组成 

MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点)

MHA  Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。 

MHA Manager 会定时探测集群中的 master 节点。 

当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。

3:MHA 的特点

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

使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日 志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数 据一致性

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

4.MHA工作原理

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器, 一主二从,即一台充当Master,台充当备用Master,另一台充当从库。

MHA Node 运行在每台 MySQL 服务器上

MHAManager 会定时探测集群中的master 节点 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master

然后将所有其他的slave 重新指向新的master,VIP自动漂移到新的master。

整个故障转移过程对应用程序完全透明。

5.MHA部署实施

5.1:搭建主两从架构

准备虚拟机:四台虚拟机:172.25.254.10,172.25.254.20,172.25.254.30,172.25.254.50

准备安装包MHA

172.25.254.50上与172.25.254.10,172.25.254.20,172.25.254.30做免密验证

[root@node4 ~]# ssh-keygen

172.25.254.50上与172.25.254.10做免密验证

[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.10

输入密码172.25.254.10主机解析创建成功

172.25.254.50上与172.25.254.20做免密验证

[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.20

输入密码172.25.254.20主机解析创建成功

172.25.254.50上与172.25.254.30做免密验证

[root@node4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30

输入密码172.25.254.30主机解析创建成功

确定本地解析是否存在

[root@node4 ~]# vim /etc/hosts

5.2:创建半同步模式

还原10,20,30主机的配置文件信息

172.25.254.10与172.25.254.20和172.25.254.30主机创建半同步模式

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

停止数据库

[root@node1 ~]# /etc/init.d/mysqld stop

清除mysql数据

[root@node1 ~]# rm -fr /data/mysql/*

对数据库进行初始化

[root@node1 ~]# mysqld --user=mysql --initialize

启动数据库

[root@node1 ~]# /etc/init.d/mysqld start

登录数据库,输入自己的密码

[root@node1 ~]# mysql -uroot -p'LEfu9_uS*B<h'

修改密码'lee'

mysql> alter user root@localhost identified by 'lee';

建立同步用户'lee'

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';

同意远程授权

mysql> GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'%';

开启半同步模式

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

同理172.25.254.20也进行相应的配置

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

停止数据库

[root@node2 ~]# /etc/init.d/mysqld stop

清除mysql数据

[root@node2 ~]# rm -fr /data/mysql/*

对数据库进行初始化

[root@node2 ~]# mysqld --user=mysql --initialize

[root@node2 ~]# /etc/init.d/mysqld start

[root@node2 ~]# mysql -uroot -p'kird_l5Pkg#0'

修改密码

mysql> alter user root@localhost identified by 'lee';

建立同步用户'lee'

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';

同意远程授权

mysql> GRANT REPLICATION SLAVE ON . TO repl@'%';

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;

开启slave模式

mysql> start slave;

加载半同步模块

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> STOP SLAVE IO_THREAD;

mysql> START SLAVE IO_THREAD;

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

mysql> SHOW SLAVE STATUS\G

172.25.254.20与172.25.254.10主机建立半同步模式成功

172.25.254.30

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

停止数据库

[root@node2 ~]# /etc/init.d/mysqld stop

清除mysql数据

[root@node2 ~]# rm -fr /data/mysql/*

[root@node3 ~]# mysql -uroot -p'1;o0/rSwpg2L'

mysql> alter user root@localhost identified by 'lee';

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl', MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> start slave;

mysql> SHOW SLAVE STATUS\G

172.25.254.30与172.25.254.10建立半同步模式成功

5.3:安装MHA所需要的软件

[root@node4 ~]# cd MHA-7/
[root@node4 MHA-7]# yum install *.rpm

在172.25.254.50传递软件包到172.25.254.10,172.25.254.20和172.25.254.30主机上

[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.10:/root

[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root
[root@node4 MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root

172.25.254.10,172.25.254.20和172.25.254.30主机上对传递的包进行安装

[root@node1 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node2 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@node3 ~]# yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm

172.25.254.50上生成配置文件并解压压缩包

[root@node4 MHA-7]# mkdir /etc/masterha
[root@node4 MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz 

将底下的文件app1.conf进行拷贝

[root@node4 MHA-7]# cd mha4mysql-manager-0.58/
[root@node4 mha4mysql-manager-0.58]# ls

[root@node4 mha4mysql-manager-0.58]# cd samples/conf
[root@node4 conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf 

进入新拷贝的文件中修改配置文件

[root@node4 conf]# vim /etc/masterha/app1.cnf

在172.25.254.50主机上进行检测将其底下文件传递到10,20和30主机上

[root@node4 ~]# cd .ssh/
[root@node4 .ssh]# ls

[root@node4 ~]#scp id_rsa root@172.25.254.10:/root/.ssh/

[root@node4 ~]#scp id_rsa root@172.25.254.20:/root/.ssh/

[root@node4 ~]#scp id_rsa root@172.25.254.30:/root/.ssh/

检测网络及SSH免密验证

[root@node4 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

保证了连接完整性

检测数据主从复制情况

[root@node4 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf

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

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

相关文章

WordPress 中使用 wp_localize_script 从 PHP 传递参数给 JavaScript

WordPress 的 wp_localize_script 函数从它名字可以看出它是用来进行前端本地化的&#xff0c;它的工作方式是加载翻译之后的文本&#xff0c;接着将它们当做一个 JavaScript 对象输出到 HTML 中&#xff0c;然后 JS 脚本就用该对象去输出对应语言的文本了。 使用 wp_localize…

22个无版权的4K高清视频素材网站,各种风格视频都有!

平时我也会做一些短视频和宣传片&#xff01; 所以&#xff0c;对找素材这回事不在话下&#xff0c;国内外也有不少高清无水印的视频素材网站&#xff0c;今天就分享一些高清剪辑必备的视频素材渠道&#xff0c;不少也是免费哒&#xff0c;平时需要找素材的同学千万不要错过啦…

解决 Django 数据库迁移报错:无法添加带有 `auto_now_add=True` 的字段20241008

解决 Django 数据库迁移报错&#xff1a;无法添加带有 auto_now_addTrue 的字段 引言 在使用 Django 进行开发时&#xff0c;数据库迁移是不可避免的一部分。然而&#xff0c;添加新字段特别是带有 auto_now_addTrue 的日期时间字段时&#xff0c;可能会遇到一些令人头疼的错…

Python中的数据可视化艺术:用Matplotlib和Seaborn讲故事

Python中的数据可视化艺术&#xff1a;用Matplotlib和Seaborn讲故事 数据可视化不仅仅是图表的绘制&#xff0c;更是通过视觉形式传达复杂信息的一种艺术。使用Python中的两个强大的库——Matplotlib和Seaborn&#xff0c;可以将数据转化为清晰、优美的图表&#xff0c;帮助我…

【Kubernetes】常见面试题汇总(五十六)

目录 123. pod 创建失败&#xff1f; 124. kube-flannel-ds-amd64-ndsf7 插件 pod 的 status 为 Init:0/1 &#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#x…

道可云人工智能元宇宙每日资讯|中国发布首个汽车智能安全评价体系

道可云元宇宙每日简报&#xff08;2024年10月11日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 《新疆维吾尔自治区“数据要素”三年行动实施方案》发布 近日&#xff0c;新疆维吾尔自治区数字化发展局、自治区党委网信办、自治区科学技术厅等17部门联合印发《…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04目录1. LLM-Augmented Symbolic Reinforcement Learning with Landmark-Based Task Decomposition摘要研究背景问题与挑战如何…

【大数据】大数据治理的全面解析

目录 引言一、什么是大数据治理&#xff1f;1.1 定义1.2 关键要素 二、大数据治理的框架三、大数据治理的重要性四、大数据治理的实施步骤五、数据治理中的关键技术六、大数据治理面临的挑战七、未来趋势总结 引言 大数据治理是现代企业管理中不可或缺的一部分&#xff0c;随着…

『网络游戏』下线数据清理【29】

修改服务端脚本&#xff1a;ServerSession.cs 修改服务端脚本&#xff1a;ServerRoot.cs 修改服务端脚本&#xff1a;CacheSvc.cs 修改服务端脚本&#xff1a;LoginSys.cs 运行服务器 运行客户端 - 连续登录账号 本章结束

VSCode的常用插件(持续更新)

点击左边工具栏的“扩展”&#xff0c;在搜索栏中查找对应插件&#xff0c;点击“安装”&#xff0c;安装完成后右边界面的插件会显示“卸载”按钮。 1、中文&#xff08;简体&#xff09;语言包 2、Auto Rename Tag 修改开始标签&#xff0c;结束标签也会随之自动变化。 3、O…

Python 网络爬虫高阶用法

网络爬虫成为了自动化数据抓取的核心工具。Python 拥有强大的第三方库支持&#xff0c;在网络爬虫领域的应用尤为广泛。本文将深入探讨 Python 网络爬虫的高阶用法&#xff0c;包括处理反爬虫机制、动态网页抓取、分布式爬虫以及并发和异步爬虫等技术。以下内容结合最新技术发展…

docker+mysql创建用户名密码_docker里面的mysql 更换密码

进入mysql容器 操作vi etc/mysql/my.cnf 默认是不安装vi编辑器的&#xff0c;下面安装vi 更新安装包 apt-get update 安装vim 执行这条语句 apt-get install vim 到修改docker容器里面的mysql数据库密码了 启动mysql容器 docker exec -it mysql /bin/bash 编辑配置文件 我这里是…

TON(四)底层编译——PROGRAM{

系列文章目录 文章目录 系列文章目录前言一、PROCGRAM{ 是什么&#xff1f;二、详细分析PROCGRAM{1. 0 : main2. proclist null!variable ( – )hole ( – p)box (x – p)示例 3. proccnt 0!4. gvarcnt 0!5. { bl word newproc } : NEWPROCdeclproc 前言 这次我们将详细讲解PR…

Python 爬取天气预报并进行可视化分析

今天&#xff0c;我们就来学习如何使用 Python 爬取天气预报数据&#xff0c;并用数据可视化的方式将未来几天的天气信息一目了然地展示出来。 在本文中&#xff0c;我们将分三步完成这一任务&#xff1a; 使用 Python 爬取天气数据数据解析与处理用可视化展示天气趋势 让我…

【C++】第五节:内存管理

1、C/C内存分布 看下面一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(s…

在 Oracle 中利用 `ORA_HASH` 高效处理大规模数据:并行分片的最佳实践20241008

在 Oracle 中利用 ORA_HASH 高效处理大规模数据&#xff1a;并行分片的最佳实践 在数据处理规模越来越庞大的今天&#xff0c;如何高效地处理数百万甚至数千万条记录成为数据库性能优化的重要课题。面对这种挑战&#xff0c;单线程处理数据显然会成为瓶颈。通过使用多线程并行…

与C++内存管理和STL简介的爱恨情仇

本文 1.C/C内存分布2.C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free总结 3.C内存管理方式new/delete操作内置类型new和delete操作自定义类型 4.operator new与operator delete函数&#xff08;重要点进行讲解&#xff09;5.new和delete的实现原理内置类型自定…

制造业DT数字化之生产制造业务建模

一、工厂建模为何物&#xff1f; 对制造业人员&#xff08;人&#xff09;、设备&#xff08;机&#xff09;、材料&#xff08;料&#xff09;、工艺流程&#xff08;法&#xff09;、工厂环境&#xff08;环&#xff09;数据化管理的过程就叫工厂建模。 二、制造建模有哪几大…

HTTP 和 WebSocket

目录 HTTP是什么HTTP局限性&#xff08;HTTP1.1&#xff09;请求和响应HTTP的主要特点&#xff1a;HTTP版本&#xff1a; HTTP与TCP关系数据封装传输过程1. **协议层次模型**&#xff1a;2. **封装过程**&#xff1a;1. **应用层&#xff08;HTTP&#xff09;**&#xff1a;2. …

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…