当前位置: 首页 > 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.dtcms.com/a/319819.html

相关文章:

  • 我在学习spring 项目构建时遇到问题,解决JDK最低版本只有17的问题
  • 佳文赏读 || 冶炼钒钛矿高炉操作炉型计算模拟研究
  • 【大前端】vite忽略指定前缀的静态资源
  • 移动端 WebView 登录异常与会话恢复问题全流程排查指南
  • 灯哥FOC笔记-----(1)无刷电机概论和硬件控制原理
  • 高精度惯性导航IMU供应商价格选型
  • 面向制造业的 AI Agent 架构与实战:任务驱动的智能协同新路径
  • 常见命令-资源查看-iostat命令实践
  • React 中 Context(上下文)介绍
  • ReAct Agent 原生代码实现(纯Python实现)
  • OpenAI推出开源GPT-oss-120b与GPT-oss-20b突破性大模型,支持商用与灵活部署!
  • 使用RestTemplate发送与接收http/https请求
  • 告别YAML,在SpringBoot中用数据库配置替代配置文件
  • 【JS】扁平树数据转为树结构
  • [激光原理与应用-172]:测量仪器 - 能量(焦耳)与功率(瓦)的图示比较
  • 14-netty基础-手写rpc-提供方(服务端)-06
  • Java NIO 核心原理与秋招高频面试题解析
  • day28-NFS
  • iOS混淆工具使用,后续维护与版本升级中实用的混淆策略
  • 代码随想录day58图论8
  • windows操作系统定时关机、重启指令记录
  • 一周学会Matplotlib3 Python 数据可视化-坐标轴 (Axis)
  • 进程间数据的关联与隔离
  • 管家婆软件如何设置默认税率?
  • AI创新中心从“空间集聚”到“生态共生”
  • 代码库详细笔记
  • P1690 贪婪的 Copy
  • [airplay2] airplay2简略介绍
  • 前端全局注册知识【持续更新】
  • 二分查找算法,并分析其时间、空间复杂度