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

搭建 MySQL MHA

搭建 MySQL MHA

  • 搭建 MySQL MHA
    • 实验拓扑图
    • 实验环境
    • 实验思路
      • MHA架构
      • 故障模拟
    • 实验部署
      • 数据库安装
      • 主从复制部署
        • 时间同步
        • 主服务器配置
        • 从服务器配置
        • 创建链接
      • MHA搭建
        • 安装依赖的环境
        • 安装 node 组件
        • 安装 manager 组件
        • 配置无密码认证
        • 在 manager 节点上配置 MHA
        • 管理 mysql 节点服务器
          • 创建相关目录
        • 编写配置文件
        • 手动开启虚拟IP
        • 测试 ssh 无密码认证及 MySQL主从连接情况
        • 启动 MHA
    • 故障模拟———— Master 节点意外故障
      • 停止 Master 节点MySQL服务
      • 查看 mysql2 是否接管 VIP
      • 修复故障
        • 启动原来的主节点
        • 修复数据
        • 在 manager 节点上修改配置文件
        • 对mysql1和mysql2 进行重启
        • 在 manager 节点上启动 MHA

搭建 MySQL MHA

实验拓扑图

在这里插入图片描述

实验环境

主机IP
Master主库服务器10.190.33.71
Slave从库服务器0110.190.33.72
Slave从库服务器0210.190.33.73
MHA Manager服务器10.190.33.74
Client10.190.33.75

实验思路

MHA架构

  1. 数据库安装
  2. 一主两从
  3. MHA搭建

故障模拟

  1. 主库失效
  2. 备选主库成为主库
  3. 原故障主库恢复重新加入到MHA成为从库

实验部署

数据库安装

MySQL安装教程

主从复制部署

时间同步

所有服务器均需要进行配置(仅以Master服务器举例)

yum install -y chronyvim /etc/chrony.conf #注释原有ntp服务器,添加阿里ntp服务源server ntp.aliyun.com iburstsystemctl restart chronydchronyc sources -vsystemctl enable --now chronyd

在这里插入图片描述
在这里插入图片描述

主服务器配置
vim /etc/my.cnfserver-id=1log_bin = mysql-binbinlog_format = mixedlog-slave-updates = truerelay-log = relay-log-binrelay-log-index = slave-relay-bin.index	systemctl restart mysqld
​mysql -u root -pAdmin@123grant replication slave on *.* to 'myslave'@'10.190.33.%' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.%' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.71' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.72' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.73' identified by 'Admin@123';flush privileges;show master status;

在这里插入图片描述
在这里插入图片描述

从服务器配置
vim /etc/my.cnfserver-id = 2log_bin = mysql-binbinlog_format = mixedlog-slave-updates = truerelay-log = relay-log-binrelay-log-index = slave-relay-bin.indexsystemctl restart mysqldmysql -u root -pAdmin@123grant replication slave on *.* to 'myslave'@'10.190.33.%' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.%' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.71' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.72' identified by 'Admin@123';grant all privileges on *.* to 'manager'@'10.190.33.73' identified by 'Admin@123';flush privileges;change master to master_host='10.190.33.71',master_user='myslave',master_password='Admin@123',master_log_file='mysql-bin.000001',master_log_pos=3400;start slave;show slave status\Gset global read_only=1;

在这里插入图片描述
在这里插入图片描述

  • Slave1
    在这里插入图片描述
  • Slave2
    在这里插入图片描述
创建链接

所有的数据库服务器(仅以Master服务器举例)


ln -s /usr/local/mysql/bin/mysql /usr/sbin/ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

在这里插入图片描述

MHA搭建

安装依赖的环境

所有的服务器(仅以Master服务器举例)

yum install epel-release --nogpgcheck -yyum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

在这里插入图片描述

安装 node 组件

所有的服务器(仅以Master服务器举例)

cd /opttar xf mha4mysql-node-0.57.tar.gzcd mha4mysql-node-0.57perl Makefile.PLmake && make install

在这里插入图片描述

安装 manager 组件

manager服务器

cd /opttar xf mha4mysql-manager-0.57.tar.gzcd mha4mysql-manager-0.57perl Makefile.PLmake && make install

在这里插入图片描述

配置无密码认证

所有的服务器

#manager节点上配置到所有数据库节点的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.71ssh-copy-id 10.190.33.72ssh-copy-id 10.190.33.73#master节点上配置到数据库节点 slave1 和 slave2的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.72ssh-copy-id 10.190.33.73#slave1节点上配置到数据库节点 master和 slave2的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.71ssh-copy-id 10.190.33.73#slave2节点上配置到数据库节点 master和 slave1 的无密码认证ssh-keygen -t rsassh-copy-id 10.190.33.71ssh-copy-id 10.190.33.72
  • manager

在这里插入图片描述

  • master

在这里插入图片描述

  • slave1

在这里插入图片描述

  • slave2

在这里插入图片描述

在 manager 节点上配置 MHA
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/binll /usr/local/bin/scripts/cp /usr/local/bin/scripts/master_ip_failover /usr/local/binvim /usr/local/bin/master_ip_failover###删除所有后;拷贝前输入 :set paste 解决vim粘贴乱序问题#!/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 = '10.190.33.100';my $brdc = '10.190.33.255';my $ifdev = 'ens33';			##看下自己网卡是ens33则不用动,不是ens33就换成自己网卡名my $key = '1';my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";my $exit_code = 0;#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";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 \"`;}## A simple system call that disable the VIP on the old_mastersub stop_vip() {`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";}

在这里插入图片描述

在这里插入图片描述

管理 mysql 节点服务器
创建相关目录

所有的服务器(仅以Master服务器举例)

mkdir -p /opt/mysql-mha/mha-node

在这里插入图片描述

编写配置文件
mkdir -p /opt/mysql-mha/mha-managervim /opt/mysql-mha/mysql_mha.cnf[server default]manager_log=/opt/mysql-mha/manager.logmanager_workdir=/opt/mysql-mha/mha-managerremote_workdir=/opt/mysql-mha/mha-nodemaster_binlog_dir=/usr/local/mysql/dataping_interval=1master_ip_failover_script=/usr/local/bin/master_ip_failovermaster_ip_online_change_script=/usr/local/bin/master_ip_online_changeuser=managerpassword=Admin@123repl_user=myslaverepl_password=Admin@123port=3306secondary_check_script=/usr/local/bin/masterha_secondary_check -s 10.190.33.72 -s 10.190.33.73shutdown_script=""ssh_user=root[server1]hostname=10.190.33.71port=3306[server2]candidate_master=1check_repl_delay=0hostname=10.190.33.72port=3306[server3]hostname=10.190.33.73port=3306

在这里插入图片描述

在这里插入图片描述

手动开启虚拟IP

Master服务器

/sbin/ifconfig ens33:1 10.190.33.100/24ifconfig

在这里插入图片描述

测试 ssh 无密码认证及 MySQL主从连接情况
masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf#测试 ssh 无密码认证masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf#MySQL主从连接情况

在这里插入图片描述
在这里插入图片描述

启动 MHA

nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &masterha_check_status --conf=/opt/mysql-mha/mysql_mha.cnf#查看 MHA 状态cat /opt/mysql-mha/manager.log | grep "current master"#查看 MHA 日志

在这里插入图片描述

故障模拟———— Master 节点意外故障

停止 Master 节点MySQL服务

systemctl stop mysqld

在这里插入图片描述

查看 mysql2 是否接管 VIP


ifconfig

在这里插入图片描述

修复故障

启动原来的主节点
systemctl start mysqld

在这里插入图片描述

修复数据

现主MySQL服务器(原从MySQL服务器1)


mysql -u root -pmysql> show master status;

在这里插入图片描述

在原来的主节点


change master to master_host='10.190.33.72',master_user='myslave',master_password='Admin@123',master_log_file='mysql-bin.000001',master_log_pos=1777;start slave;

在这里插入图片描述

在 manager 节点上修改配置文件

vim /opt/mysql-mha/mysql_mha.cnf······[server1]hostname= 10.190.33.71port=3306······

在这里插入图片描述

对mysql1和mysql2 进行重启

systemctl restart  mysqld
在 manager 节点上启动 MHA

masterha_stop --conf=/opt/mysql-mha/mysql_mha.cnfnohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &
http://www.lryc.cn/news/385339.html

相关文章:

  • python中的线程与进程
  • 网络安全筑基篇——反序列化漏洞
  • 帝国cms定时审核并更新的方法
  • 一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
  • 使用Spring Boot和WebSocket实现实时通信
  • 【Vue】集成富文本编辑器
  • 【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
  • 重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
  • APM教程-SkyWalking安装和配置
  • 斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”
  • World of Warcraft [CLASSIC] plugin lua
  • 背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?
  • CCSP自考攻略+经验总结
  • 面试突击:ArrayList源码详解
  • 力扣每日一题:2734. 执行子串操作后的字典序最小字符串
  • C++11中std::thread的使用
  • 酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统
  • 大数据之Hadoop部署
  • Java异常处理中的“throw”与“throws”的区别
  • 英语智汇学习系统
  • ExtractAItoTEXT 提取Adobe illustrator AI文件中的文字到文本文件翻译并写回到Adobe illustrator AI文件
  • ms17-010 ms12-020 ms-08-067
  • 【海思Hi3403V100】多目拼接相机套板硬件规划方案
  • AI的赚钱风向,彻底变了!
  • 服务器重启后jenkins任务内容不见了,并且新建任务也不见了
  • 如何选择合适的WordPress主机?
  • 面试突击:Java 集合知识体系梳理
  • AI智能管理系统设计文档
  • 干涉阵型成图参数记录【robust】
  • React Native工程运行时下载gradle超时问题