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

MHA架构实战



MHA架构

启动顺序:44,46,47,45

ip主机名serve_id类型环境
192.168.242.45Admin监控mysql集群
192.168.242.44Master44写入(主)mysql
192.168.242.46Slave0146读取(Master故障转移候选)mysql
192.168.242.47Slave0247读取mysql

时间同步

# 时间同步
yum -y install ntp
ntpdate pool.ntp.org
systemctl start ntpd

设置主机名

# 所有节点全部配置自己的主机名
echo '主机名' > vi /etc/hostname
hostname 主机名

配置host文件(必须,后面配置需要主机名)

# 所有节点全部配置所有人的host
echo '192.168.242.45    Admin' >> /etc/hosts
echo '192.168.242.46    Slave01' >> /etc/hosts
echo '192.168.242.47    Slave02' >> /etc/hosts
echo '192.168.242.44    Master' >> /etc/hosts

配置互信

# 四台机器都生成密钥
ssh-keygen -t rsa
# 四台机器都运行以下代码,将公钥上传
ssh-copy-id 192.168.242.44
ssh-copy-id 192.168.242.45
ssh-copy-id 192.168.242.46
ssh-copy-id 192.168.242.47

配置文件

master配置

vi /etc/my.cnf
# 设置唯一节点id
server-id=44
# 开启二进制日志
log-bin=master-log
# 开启中继日志
relay-log=relay-log
# 关闭名称解析
skip_name_resolve
# 开启gtid
gtid-mode=on
# 强制gtid一致
enforce-gtid-consistency=true
# 密码加密方式为原生方式
default_authentication_plugin=mysql_native_password

记得重启mysql

slave配置(两台slave配置仅server_id不同)

# 设置唯一节点id
server-id=46
# 开启二进制日志
log-bin=master-log
# 开启中继日志
relay-log=relay-log
# 开启只读属性
read_only=ON
# 取消自动清理二进制中继日志
relay_log_purge=0
# 关闭名称解析
skip_name_resolve
# 使得更新的数据写入二进制日志中
log_slave_updates=1
# 开启gtid
gtid-mode=on
# 强制gtid一致
enforce-gtid-consistency=true
# 密码加密方式为原生方式
default_authentication_plugin=mysql_native_password

查看三台机器是否开启gtid一致

show variables like '%gtid%';

在这里插入图片描述

主从同步

主库操作

# 创建复制账号,这个用户将用于设置主从复制。
create user repl@'%' identified with mysql_native_password by '123';
# 授予 repl 用户 replication slave 权限,使其能够从主服务器读取复制的二进制日志。
grant replication slave on *.* to repl@'%' with grant option;
# 刷新权限
flush privileges;# 查看用户权限select user,host,grant_priv,Super_priv,password_last_changed from mysql.user;

在这里插入图片描述

从库操作

change master to
master_host='192.168.242.44',
master_port=3306,
master_user='repl',
master_password='123',
master_auto_position=1;# 启动slave
start slave;
----------------------------------参数解读--------------------------------------
master_host='192.168.242.44':
指定主库的 IP 地址或主机名。这里是 192.168.242.44,即从库将连接到这个主库地址。
master_port=3306:
指定主库的端口号。默认情况下,MySQL 使用 3306 端口进行连接。
master_user='repl':
指定用于连接主库的 MySQL 用户名。repl 是一个之前创建的用户,并且该用户应该具有 REPLICATION SLAVE 权限,用于从库从主库读取复制数据。
master_password='123':
指定连接主库时使用的密码。该密码应与 repl 用户的密码一致。
master_auto_position=1:
启用基于 GTID(全局事务标识符)的复制模式。master_auto_position=1 表示 MySQL 会自动使用 GTID 来同步事务,而不需要手动指定 binlog 的文件和位置。这样,主库的每个事务都带有一个唯一的 GTID,MySQL 会自动保证从库同步到主库的最新事务。在 GTID 复制模式下,不需要像传统的基于位置的复制一样关心 binlog 的位置(log_file 和 log_pos),MySQL 会自动管理。

配置验证

主库验证

show slave hosts;
select @@server_id,@@server_uuid;

在这里插入图片描述

从库验证

show slave status \G;
SELECT user, host, grant_priv, Super_priv, password_last_changed  FROM mysql.user; 

在这里插入图片描述

Master设置VIP

# 添加虚拟ip 192.168.242.99
ifconfig ens33:1 192.168.242.99
# 查看ip
ifconfig

在这里插入图片描述

安装MHA

源码包安装

**源码node地址:**https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

**源码manage地址:**https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58

在这里插入图片描述

所有节点服务器都装node(manager依赖node运行)

# 即所有主从,不包含独立监控机,如果监控在主机,那么主机两个都装
# 安装编译需要的依赖
yum install -y perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN
# 解压MHA—node安装包
tar -zxf /home/hadoop/mha4mysql-node-0.58.tar.gz -C /usr/local/
# cd进安装目录
cd /usr/local/mha4mysql-node-0.58
# 编译安装
perl Makefile.PL
make
make install

manager安装

# 只有监控机安装
# 特别注意一定要看看安装是否有失败的,一定不能有失败的
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Mail-Sender -y
# 解压MHA-manager包
tar -zxf /home/hadoop/mha4mysql-manager-0.58.tar.gz -C /usr/local/
# 进入安装目录
cd /usr/local/mha4mysql-manager-0.58/
# 编译安装
perl Makefile.PL
make
make install

manager配置

vi /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_failovermy $vip='192.168.242.99/24'; #配置一个闲置网段(虚拟ip网段)
my $key='1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 192.168.242.99";————————————!!!注意——————————————
# 此文件中 FIXME_xxx; 需要注释,否则会报错

配置MHA(监控机)


# 创建MHA软件所需目录
mkdir -p /usr/local/mha
mkdir -p /etc/mha# 由于脚本中并没有master_ip_failover脚本,启动时会报错,到mha4mysqlmanager-0.5X/samples/scripts下拷贝对应脚本到指定位置。
cd /usr/local/mha/scripts
cp /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_* .vi /etc/mha/mha.cnf[server default]
manager_workdir=/usr/local/mha
manager_log=/usr/local/mha/manager_running.log
master_ip_failover_script=/usr/local/mha/scripts/master_ip_failover
master_ip_online_change_script=/usr/local/mha/scripts/master_ip_online_change
ping_interval=1
# 此句Slave01,Slave02为从机主机名
secondary_check_script=/usr/local/bin/masterha_secondary_check -s Slave01 -s Slave02 --user=root --master_host=MHA-Master --master_ip=192.168.242.44 --master_port=3306
shutdown_script=""
ssh_user=root  //基于ssh的密钥认证user=root  //mha管理用户
password=123  //mha管理密码
repl_user=repl  //数据库用户名(你主库创建的复制账号)
repl_password=123  //数据库密码[server1]
hostname=192.168.242.44
port=3306[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.242.46
port=3306[server3]
hostname=192.168.242.47
port=3306
masterha_check_status --conf=/etc/mha/mha.cnf1.检查SSH情况
[root@MHA-Monitor ~]# masterha_check_ssh --conf=/etc/mha/mha.cnf
2.检查复制情况
[root@MHA-Monitor ~]# masterha_check_repl --conf=/etc/mha/mha.cnf
3.检查MHA状态
[root@MHA-Monitor /]# masterha_check_status --conf=/etc/mha/mha.cnf
4.启动MHA Manager
nohup masterha_manager --conf=/etc/mha/mha.cnf < /dev/null > /usr/local/mha/manager_start.log 2>&1
5.关闭MHA-manager(需要的时候再关闭)
[root@MHA-MES-Monitor-ip134 ~]# masterha_stop --conf=/etc/mha/mha.cnf

故障模拟

①停掉192.168.242.44的mysql进程

②此时后台开始故障转移

在这里插入图片描述

# 解释,这句是因为原主节点只是mysql挂掉,并非机器宕机,因此虚拟ip不能转移,因为原主节点还占用着虚拟ip
Failed to activate master IP address for 192.168.242.46(192.168.242.46:3306) with return code 10:0

④观察新的主节点

在这里插入图片描述

可以看到主节点成功故障转移

⑤查看从节点

在这里插入图片描述

可以看到从节点已经成功切换新的主节点进行服务

http://www.lryc.cn/news/612939.html

相关文章:

  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • Docker离线安装MinIO及数据迁移
  • 【R语言】重新绘制高清MaxEnt的单因素响应曲线图像
  • 把 apipost 的 md 文档转化成 json数据
  • 【论文阅读】基于元模型的体系知识图谱构建
  • 遍历节点设备属性
  • mac中多版本JDK配置和切换
  • 机器学习算法篇(四)决策树算法
  • Qwen-Image开源模型实战
  • 使用萤石云播放视频及主题模版配置
  • VFTO与局部放电-高压设备绝缘系统的双重挑战与防护策略
  • Keil MDK-ARM V5.42a 完整安装教程
  • rk3588s vscode索引失败的问题
  • 12-netty基础-手写rpc-编解码-04
  • web前端结合Microsoft Office Online 在线预览,vue实现(PPT、Word、Excel、PDF等)
  • 表单元素与美化技巧:打造用户友好的交互体验
  • 【LVGL自学笔记暂存】
  • LINUX-批量文件管理及vim文件编辑器
  • VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
  • 11-netty基础-手写rpc-支持多序列化协议-03
  • 从零开始构建情绪可视化日记平台 - React + TypeScript + Vite
  • 芯谷科技--高效噪声降低解决方案压缩扩展器D5015
  • 30-Hive SQL-DML-Load加载数据
  • 微算法科技(NASDAQ:MLGO)利用集成学习方法,实现更低成本、更稳健的区块链虚拟货币交易价格预测
  • 51单片机
  • 数据推荐|标贝科技方言自然对话数据集 构建语音交互新基建
  • 全球化2.0 | 泰国IT服务商携手云轴科技ZStack重塑云租赁新生态
  • 最新教程 | CentOS 7 内网环境 Nginx + ECharts 页面离线部署手册(RPM 安装方式)
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第七天(Vue)(二)
  • 如何为WordPress启用LiteSpeed缓存