简单的MySQL高可用还不快来学

MHA高可用

传统的MySQL主从架构会存在单点故障问题

MySQL集群高可用方案

单主:keepalived MHA MMM

多主:MySQL cluster PXC

1 MHA

1.1 MHA简介

MHA(Master High Availability Manager and tools for MySQL)目前在MySQL高可用方面是一个相对成熟的解决方案,它是由日本人youshimaton采用Perl语言编写的一个脚本管理工具。目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制群集必须最少有三台数据库服务器,一主二从,即一台充当Master,一台充当备用Master,另一台充当从库。MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点的问题。MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

1.2 MHA的组成

MHA Manager(管理节点):

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

MHA Node(数据库节点):

运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master节点处现故障时,他可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移的过程对应用程序完全透明。(工作原理)

1.3 MHA的特点

●自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失 ●使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性 ●目前MHA支持一主多从架构,最少三台服务,即一主两从

1.4 MHA的部署过程

1)所有mysql节点都做主从复制授权和mha manager 访问数据库的授权
2)做时间同步和mysql的主从复制并设置所有的从节点(slave)为只读模式
3)所有节点安装mha node组件,在manager节点上还要再安装mha manager组件
4)所有节点做ssh密钥对免交互登录认证
5)在mha manager节点上准备好故障切换脚本和mha manager配置文件
6)在master节点上使用ifconfig创建VIP地址
7)使用masterha_check_ssh 和masterha_check_repl做mha启动前检查,再使用master_manager启动mha进程
8)做故障切换测试(故障切换后mha进程会自动退出,配置文件会自动删除旧master的配置信息,VIP会漂移到新的master节点上,其他的从节点会自动指向新master做主从复制)

1.5 MHA的部署

主服务器:192.168.111.6
备服务器:192.168.111.7
从服务器:192.168.111.8
manager服务器:192.168.111.9
同步主从服务器时间
主服务安装时间服务ntp

修改ntp配置文件

启动时间服务

备服务器和从服务器安装ntp服务并启动

设置时间同步为主服务器地址,并设置定时任务

配置主从同步动静分离
修改主服务器名为mysql1,备服务器名为mysql2,从服务器名为mysql3
<span style="background-color:#f8f8f8"><span style="color:#333333">hostnamectl set-hostname mysql1
hostnamectl set-hostname mysql2
hostnamectl set-hostname mysql3</span></span>
为主、备、从服务器mysql主配置文件文件/etc/my.cnf添加二进制日志功能和中继日志功能(server-id不能相同)
<span style="background-color:#f8f8f8"><span style="color:#333333">[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = mixed
log-slave-updates = true
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index</span></span>

重启服务并创建两个软链接
<span style="background-color:#f8f8f8"><span style="color:#333333">systemctl restart mysqld
[root@mysql1 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@mysql1 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/</span></span>

修改mysql登录用户的密码并,在所有的mysql数据库节点进行mysql授权
<span style="background-color:#f8f8f8"><span style="color:#333333">mysqladmin -u root password "abc123"
grant replication slave on *.* to 'myslave'@'192.168.111.%' identified by 'myslave123';     #从数据库同步使用
grant all privileges on *.* to 'mha'@'192.168.111.%' identified by 'manager123';        #manager 使用
​
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';              #防止从库通过主机名连接不上主库
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
flush privileges;</span></span>

在主服务器查看二进制文件和同步点

在从服务器和备服务器上执行同步操作并开启数据库同步功能
<span style="background-color:#f8f8f8"><span style="color:#333333">change master to master_host='192.168.111.6',master_user='myslave',master_password='myslave123',master_log_file='mysql-bin.000001',master_log_pos=1155;
start slave;</span></span>

查看备、从服务器数据同步结果
<span style="background-color:#f8f8f8"><span style="color:#333333">show slave status\G</span></span>

设置从、备服务器为只读模式
<span style="background-color:#f8f8f8"><span style="color:#333333">set global read_only=1;</span></span>

在主库中插入数据进行数据库同步测试
<span style="background-color:#f8f8f8"><span style="color:#333333">create database test_db;
use test_db;
create table test(id int);
insert into test(id) values (1);</span></span>

安装manager服务
所有服务器上安装MHA的epel源
<span style="background-color:#f8f8f8"><span style="color:#333333">yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN</span></span>

将node源码包放进opt目录下,所有服务器解压、编译并安装node组件
<span style="background-color:#f8f8f8"><span style="color:#333333">tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install</span></span>

把manager源码包放进opt目录中,在manager服务器上解压、编译并安装manage组件(manager 依赖 node 组件)
<span style="background-color:#f8f8f8"><span style="color:#333333">tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install</span></span>

manager 组件安装后在/usr/local/bin 下面会生成几个工具
  • masterha_check_ssh 检查 MHA 的 SSH 配置状况

  • masterha_check_repl 检查 MySQL 复制状况

  • masterha_manger 启动 manager的脚本

  • masterha_check_status 检测当前 MHA 运行状态

  • masterha_master_monitor 检测 master 是否宕机

  • masterha_master_switch 控制故障转移(自动或者手动)

  • masterha_conf_host 添加或删除配置的 server 信息

  • masterha_stop 关闭manager

node 组件安装后也会在/usr/local/bin 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)
  • save_binary_logs 保存和复制 master 的二进制日志

  • apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave

  • filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)

  • purge_relay_logs 清除中继日志(不会阻塞 SQL 线程)

配置免交互登录
在 manager 节点上配置到所有数据库节点的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">ssh-keygen -t rsa               #一路按回车键
ssh-copy-id 192.168.111.6
ssh-copy-id 192.168.111.7
ssh-copy-id 192.168.111.8</span></span>

在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">ssh-keygen -t rsa
ssh-copy-id 192.168.111.7
ssh-copy-id 192.168.111.8</span></span>

在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">ssh-keygen -t rsa
ssh-copy-id 192.168.111.6
ssh-copy-id 192.168.111.8</span></span>

在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">ssh-keygen -t rsa
ssh-copy-id 192.168.111.6
ssh-copy-id 192.168.111.7</span></span>

在manager服务器上配置MHA
将解压后的源码包自带脚本复制到/usr/local/bin 目录
<span style="background-color:#f8f8f8"><span style="color:#333333">cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
ll /usr/local/bin/scripts/</span></span>

复制的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换

创建MHA软件目录并在目录中创建所有节点的相关目录mha-node和manager节点mha
<span style="background-color:#f8f8f8"><span style="color:#333333">mkdir -p /opt/mysql-mha/mha-node
mkdir -p /opt/mysql-mha/mha
ls /opt/mysql-mha/</span></span>

编写配置文件mha-manager.cnf来管理mysql节点服务器
<span style="background-color:#f8f8f8"><span style="color:#333333">vim /opt/mysql-mha/mha-manager.cnf
[server default]
manager_log=/opt/mysql-mha/manager.log
manager_workdir=/opt/mysql-mha/mha
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
user=mha
password=manager
port=3306
ping_interval=1
remote_workdir=/opt/mysql-mha/mha-node
repl_user=myslave
repl_password=123
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.11 -s 192.168.80.12
shutdown_script=""
ssh_user=root
​
[server1]
hostname=192.168.80.10
port=3306
​
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.80.11
port=3306
​
[server3]
hostname=192.168.80.12
port=3306</span></span>

第一次配置需要在主服务器上手动开启虚拟IP(VIP)
<span style="background-color:#f8f8f8"><span style="color:#333333">ifconfig ens33:1 192.168.111.100/24
ifconfig</span></span>

在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully
<span style="background-color:#f8f8f8"><span style="color:#333333">masterha_check_ssh -conf=/opt/mysql-mha/mha-manager.cnf</span></span>

在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常
<span style="background-color:#f8f8f8"><span style="color:#333333">masterha_check_repl -conf=/opt/mysql-mha/mha-manager.cnf</span></span>

在 manager 节点上启动 MHA
<span style="background-color:#f8f8f8"><span style="color:#333333">nohup masterha_manager \
--conf=/opt/mysql-mha/mha-manager.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &</span></span>

查看MHA状态,可以看到当前的mater是mysql1节点
<span style="background-color:#f8f8f8"><span style="color:#333333">masterha_check_status --conf=/opt/mysql-mha/mha-manager.cnf</span></span>

查看 MHA 日志,也以看到当前的 master 是 192.168.80.10
<span style="background-color:#f8f8f8"><span style="color:#333333">cat /opt/mysql-mha/manager.log | grep "current master"</span></span>

若要关闭 manager 服务,可以使用如下命令,查看 mysql1 的 VIP 地址 192.168.80.200 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。
<span style="background-color:#f8f8f8"><span style="color:#333333">masterha_stop --conf=/opt/mysql-mha/mha-manager.cnf</span></span>

1.6 故障模拟恢复

故障模拟
在 manager 节点上监控观察日志记录
<span style="background-color:#f8f8f8"><span style="color:#333333">tail -f /opt/mysql-mha/manager.log</span></span>

在 Master 节点 mysql1 上停止mysql服务
<span style="background-color:#f8f8f8"><span style="color:#333333">systemctl stop mysqld</span></span>

正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 mha-manager.cnf文件内容,将宕机的 mysql1 节点删除。查看 mysql2 是否接管 VIP,mha-manager.cnf是否删除mysql1的配置,manager服务状态是否退出

故障切换备选主库的算法:
1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
2.数据一致的情况下,按照配置文件顺序,选择备选主库。
3.设定有权重(candidate_master=1),按照权重强制指定备选主。
(1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
(2)如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。
故障恢复
重新启动mysql1的mysql服务
<span style="background-color:#f8f8f8"><span style="color:#333333">systemctl restart mysqld</span></span>

查看现主库服务器mysql2的二进制文件和同步点
<span style="background-color:#f8f8f8"><span style="color:#333333">show master status;</span></span>

在原主库mysql1上执行同步操作
<span style="background-color:#f8f8f8"><span style="color:#333333">change master to master_host='192.168.111.7',master_user='myslave',master_password='myslave123',master_log_file='mysql-bin.000002',master_log_pos=1331;
start slave;</span></span>

在 manager 节点上修改配置文件,把mysql1的IP地址和mysql端口加进去
<span style="background-color:#f8f8f8"><span style="color:#333333">vim /opt/mysql-mha/mha-manager.cnf</span></span>

关闭mysql2的mysql服务,并在 manager 节点上启动 MHA
<span style="background-color:#f8f8f8"><span style="color:#333333">systemctl stop mysqld.service
nohup masterha_manager --conf=/opt/mysql-mha/mha-manager.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &</span></span>

查看主是否回到mysql1上

2 MMM

1.1 MMM简介

MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。

1.2 MMM组成

●mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监控主机上运行。 ●mmm_agent:运行在每个MySQL服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。 ●mmm_control:一个简单的脚本,提供管理 mmm_mon 进程的命令。 ●mysql-mmm 的监管端会提供多个虚拟 IP(VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。

在整个监管过程中,需要在 MySQL 中添加相关授权用户,以便让 MySQL 可以支持监控主机的维护。 授权的用户包括一个 mmm_monitor 用户和一个 mmm_agent 用户。

1.3 MMM的特点

  • MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。

  • MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Focal Loss

1、样本不均衡的 问题 与 方案 Focal loss 用于解决上述 样本不均衡的问题 : \quad 1、正负样本数量不均衡 \quad 2、易分类的样本和难分类的样本数量不均衡

【Linux】常用的基本命令指令②

前言&#xff1a;前面我们学习了Linux的部分指令&#xff0c;今天我们将接着上次的部分继续将Linux剩余的基本指令. &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的学习 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的学习日记…

基于gamma矫正的照片亮度调整(python和opencv实现)

import cv2 import numpy as npdef adjust_gamma(image, gamma1.0):invGamma 1.0 / gammatable np.array([((i / 255.0) ** invGamma) * 255 for i in np.arange(0, 256)]).astype("uint8")return cv2.LUT(image, table)# 读取图像 original cv2.imread("tes…

使用qtquick调用python程序

一. 内容简介 使用qtquick调用python程序 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本又无法编译64位程序&#xf…

【算法】递归算法理解(持续更新)

这里写目录标题 一、递归算法1、什么情况下可以使用递归&#xff1f;2、递归算法组成部分3、案例&#xff1a;求n的阶乘4、编写一个递归函数来计算列表包含的元素数。5、通过递归找到列表中最大的数字。6、通过递归的方式实现二分查找算法。 一、递归算法 递归&#xff08;Rec…

pytorch07:损失函数与优化器

目录 一、损失函数是什么二、常见的损失函数2.1 nn.CrossEntropyLoss交叉熵损失函数2.1.1 交叉熵的概念2.2.2 交叉熵代码实现2.2.3 加权重损失 2.2 nn.NLLLoss2.2.1 代码实现 2.3 nn.BCELoss2.3.1 代码实现 2.4 nn.BCEWithLogitsLoss2.4.1 代码实现 三、优化器Optimizer3.1 什么…

【Nodejs】基于node http模块的博客demo代码实现

目录 package.json www.js db.js app.js routes/blog.js controllers/blog.js mysql.js responseModel.js 无开发&#xff0c;不安全。 这个demo项目实现了用Promise异步处理http的GET和POST请求&#xff0c;通过mysql的api实现了博客增删改查功能&#xff0c;但因没有…

elementui loading自定义图标和字体样式

需求&#xff1a;页面是用了很多个loading&#xff0c;需要其中有一个字体大些&#xff08;具体到图标也一样的方法&#xff0c;换下类名就行&#xff09; 遇见的问题&#xff1a;改不好的话会影响其他的loading样式&#xff08;一起改变了&#xff09; 效果展示 改之前 改之…

公司图纸该怎么管理? 公司图纸管理的方案

公司图纸管理是一个重要的环节&#xff0c;涉及到图纸的存储、分类、检索和使用等方面。以下是一些建议&#xff0c;帮助你有效地管理公司图纸&#xff1a; 建立图纸管理制度&#xff1a;制定明确的图纸管理制度&#xff0c;包括图纸的存储、分类、检索和使用等方面的规定。确保…

Eclipse下安装GDB

主要参考资料&#xff1a; 链接: https://blog.csdn.net/u013609041/article/details/18967837 目录 简介Eclipse中安装和配置GDB错误 简介 Eclipse是一款开发软件。 GDB是一个调试软件&#xff0c;但是GDB通常是运行在linux下的&#xff0c;无法直接在windows下运行&#xff…

C++程序设计兼谈对象模型(侯捷)笔记

C程序设计兼谈对象模型&#xff08;侯捷) 这是C面向对象程序设计的续集笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 主要内容&#xff1a;涉及到模板中的类模板、函数模板、成员模板以及模板模板参数&#xff0c;后面包含对象模型中虚函数调用&…

python统计分析——直方图(df.hist)

使用dataframe.hist()或series.hist()函数绘制直方图 import numpy as np import pandas as pd from matplotlib import pyplot as plt.dfpd.DataFrame(data{type:[A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B],value:[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9] }) serpd.Serie…

基于综合特征的细菌噬菌体宿主预测工具iPHoP (Integrated Phage HOst Prediction)的介绍以及使用方法详细流程

介绍 iPHoP&#xff08;Integrated Phage HOst Prediction&#xff09;是一种基于综合特征的细菌噬菌体宿主预测方法。它是通过整合基因组序列、蛋白质序列和宿主基因组信息来预测细菌噬菌体的宿主范围。 iPHoP的预测过程分为三个步骤&#xff1a;特征提取、特征选择和宿主预…

shell sshpass 主机交互 在另外一台主机上执行某个命令 批量管理主机 以及一些案例

目录 作用安装 sshpasssshpass 用法在远程主机执行某个命令 案例批量传输密匙批量拷贝文件批量修改密码 作用 就是用一台主机 控制另外一台主机免交互任务管理工具方便批量管理主机使用方法就是在ssh 前边加一个 sshpass 安装 sshpass # 安装 sshpass yum -y install sshpas…

晨控CK-GW08-EC与欧姆龙PLC工业EtherCAT协议通讯指南

晨控CK-GW08-EC与欧姆龙PLC工业EtherCAT协议通讯指南 晨控CK-GW08系列是一款支持标准工业通讯协议EtherCAT的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口&#xff0c;用户可通过通信接口使用EtherCAT协议对8路读写接口所连接的读卡器进行相对独立的读…

<软考高项备考>《论文专题 - 48 范围管理(7) 》

8 收尾 8.1 经验教训 经验&#xff1a; 1、在规划范围管理的时候&#xff0c;对项目的复杂程度过于乐观&#xff0c;考虑的不够周详&#xff0c;制订的计划粒度过于粗糙 2、在收集需求前&#xff0c;没有对需求收集人员进行项目业务上的培训&#xff0c;导致需求收集人员与客…

Vue3中配置env环境变量

什么时候会用到这个呢&#xff0c;比如我们的后端开发有多名&#xff0c;很多时候需要切换调用不同人的接口地址&#xff0c;或者在打包的时候&#xff0c;需要指定环境中的后台接口地址&#xff0c;那么我们频繁修改代码&#xff0c;就很麻烦&#xff0c;这个时候&#xff0c;…

win10提示“KBDSF.DLL文件缺失”,游戏或软件无法启动运行,快速修复方法

很多用户在日常使用电脑的时候&#xff0c;或多或少都遇到过&#xff0c;在启动游戏或软件的时候&#xff0c;Windows桌面会弹出错误提示框“KBDSF.DLL文件缺失&#xff0c;造成软件无法启动或运行&#xff0c;请尝试重新安装解决”。 首先&#xff0c;先来了解DLL文件是什么&a…

JS运行机制、Event Loop

1、JS运行机制 JS最大的特点就是单线程&#xff0c;所以他同一时间只能做一件事情。使单线程不阻塞&#xff0c;就是事件循环。 在JS当中分为两种任务&#xff1a; 同步任务&#xff1a;立即执行的任务&#xff0c;一般放在主线程中&#xff08;主执行栈&#xff09;。异步任…