mysql主从复制搭建,并基于‌Keepalived + VIP实现高可用

以下是基于 ‌Keepalived + VIP‌ 实现 MySQL 主从复制高可用的详细步骤,涵盖主从复制搭建与故障自动切换:

一、MySQL 主从复制搭建(基础步骤回顾)

1. ‌主库(Master)配置‌

修改配置文件‌ /etc/my.cnf:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=test_db  # 指定需要同步的数据库(可选)

重启 MySQL:systemctl restart mysqld

创建复制账号‌:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'Repl_Pass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

查看主库状态‌:

SHOW MASTER STATUS;  -- 记录 File(如 mysql-bin.000001)和 Position(如 154)

2. ‌从库(Slave)配置‌

修改配置文件‌ /etc/my.cnf:

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only=1  # 从库只读(可选)

重启 MySQL:systemctl restart mysqld

导入主库数据‌(若主库已有数据):

# 主库导出数据
mysqldump -uroot -p --databases test_db > /tmp/backup.sql
# 从库导入数据
mysql -uroot -p < /tmp/backup.sql

配置主从链路‌:

CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl_user',
MASTER_PASSWORD='Repl_Pass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;START SLAVE;

验证复制状态‌:

SHOW SLAVE STATUS\G  
-- 确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

二、Keepalived + VIP 高可用配置

1. ‌环境规划‌

角色‌IP‌VIP‌
MySQL Master192.168.1.10192.168.1.100
MySQL Slave192.168.1.11

2. ‌Install Keepalived‌

在两台 MySQL 节点安装 Keepalived:

yum install keepalived -y  # CentOS
apt install keepalived -y  # Ubuntu

3. ‌配置 Keepalived‌

主库(Master)配置‌ /etc/keepalived/keepalived.conf:

global_defs {router_id mysql_ha_master
}vrrp_script chk_mysql {script "/etc/keepalived/check_mysql.sh"  # 检测MySQL是否存活interval 2weight 2
}vrrp_instance VI_1 {state MASTERinterface eth0  # 网卡名称virtual_router_id 51priority 100    # 主库优先级高于从库(如从库设为90)advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100/24  # VIP}track_script {chk_mysql  # 绑定健康检查脚本}
}

从库(Slave)配置‌ /etc/keepalived/keepalived.conf:

global_defs {router_id mysql_ha_slave
}vrrp_script chk_mysql {script "/etc/keepalived/check_mysql.sh"interval 2weight 2
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100/24}track_script {chk_mysql}
}

4. ‌编写 MySQL 健康检查脚本‌

创建 /etc/keepalived/check_mysql.sh(两节点均需配置):

#!/bin/bash
if ! systemctl is-active mysqld >/dev/null 2>&1; thenexit 1  # MySQL停止,触发VIP漂移
elseexit 0
fi

赋予执行权限:

chmod +x /etc/keepalived/check_mysql.sh

5. ‌启动 Keepalived‌

systemctl start keepalived
systemctl enable keepalived

三、验证高可用性

1. ‌查看 VIP 绑定状态‌

在主库执行:

ip addr show eth0 | grep 192.168.1.100

应看到 VIP 绑定在主库的网卡上。

2. ‌模拟主库故障‌

停止主库的 MySQL 服务:

systemctl stop mysqld

观察 VIP 是否漂移到从库(约 2~5 秒):

# 在从库执行
ip addr show eth0 | grep 192.168.1.100

3. ‌恢复主库后 VIP 回切‌

重启主库的 MySQL 和 Keepalived:

systemctl start mysqld
systemctl restart keepalived

VIP 应自动回到主库(需确保主库优先级更高)。

四、注意事项

脑裂问题‌:

  • 使用 vrrp_script 检测 MySQL 服务状态,避免仅依赖网络存活导致脑裂。
  • 可在防火墙中禁止 VRRP 协议的多播包(iptables 或 firewalld 配置)。

主从切换后的处理‌:

  • 若 VIP 漂移到从库,需手动或通过脚本执行 STOP SLAVE; 并提升为新的主库。
  • 原主库恢复后,需重新配置为主从复制中的从库。

应用连接配置‌:

  • 应用程序应通过 VIP(192.168.1.100)连接数据库,而非直接使用物理 IP。

五、方案优缺点

优点‌‌ 缺点‌
简单轻量,快速切换(秒级)需手动处理主从复制链路切换
与应用解耦,无需修改应用配置依赖脚本实现故障检测,可靠性依赖脚本逻辑
适合小规模集群不自动处理数据一致性校验

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

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

相关文章

CD36.【C++ Dev】STL库的string的使用 (下)

目录 1.reserve函数(不是reverse) 代码示例 2.resize 代码示例 3.reserve和resize的区别 4.shrink_to_fit 代码示例 5.与C语言的配合的接口函数: c_str 代码示例 6.rfind 知识回顾:find函数 rfind 代码示例 练习题: 字符串最后一个单词的长度 代码 提交结果 ​…

STM32的网络天气时钟项目

一、项目概述与硬件架构 1.1 核心功能 本智能天气时钟系统集成了实时天气获取、网络时间同步、环境监测和低功耗管理四大核心功能&#xff1a; 网络数据获取&#xff1a; 通过ESP8266 WiFi模块连接心知天气API&#xff08;每小时更新&#xff09;获取北京标准时间服务器的时…

FPGA DDR4多通道管理控制器设计

DDR4控制器一般采用自带的MIG控制器&#xff0c;用户控制主要是基于MIG IP核进行设计 实际工程项目中可能只挂载了一组DDR&#xff0c;但是用户数据可能有很多种&#xff0c;用户通过给每种数据划分特定地址进行存储&#xff0c;如何实现灵活管理成为设计的关键 为了方便后端数…

低代码 x AI,解锁数智化应用的创新引擎

AI 智能体开发指南 随着全球信息化浪潮的持续推进&#xff0c;数字化、智能化转型已成为企业发展的必经之路。在这个变革的时代&#xff0c;企业面临着前所未有的挑战与机遇。一方面&#xff0c;市场环境瞬息万变&#xff0c;企业需要快速响应并调整业务模式&#xff1b;另一方…

【Spring Boot 注解】@Configuration与@AutoConfiguration

文章目录 Configuration与AutoConfiguration一、Configuration二、AutoConfiguration Configuration与AutoConfiguration 一、Configuration 这是最常用的 Spring 注解之一&#xff0c;表示当前类是一个 配置类&#xff0c;可以定义 Bean 方法&#xff0c;等效于传统的 XML 配…

arXiv论文 MALOnt: An Ontology for Malware Threat Intelligence

文章讲恶意软件威胁情报本体。 作者信息 作者是老美的&#xff0c;单位是伦斯勒理工学院&#xff0c;文章是2020年的预印本&#xff0c;不知道后来发表在哪里&#xff08;没搜到&#xff0c;或许作者懒得投稿&#xff0c;也可能是改了标题&#xff09;。 中心思想 介绍开源…

【存储管理—动态不等长存储资源分配算法】

文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解动态异长存储分区资源管理&#xff0c;掌握所需数据结构和管理程序&#xff0c;了解各种存储分配算法的优点和缺点。 二、实验内容与设计思想 实验内容 1.分析uni…

快速上手 Docker:从入门到安装的简易指南(Mac、Windows、Ubuntu)

PS&#xff1a;笔者在五一刚回来一直搞Docker部署AI项目&#xff0c;发现从开发环境迁移到生成环境时&#xff0c;Docker非常好用。但真的有一定上手难度&#xff0c;推荐读者多自己尝试踩踩坑。 本篇幅有限&#xff0c;使用与修改另起篇幅。 一、Docker是什么 #1. Docker是什…

LabVIEW高冲击加速度校准系统

在国防科技领域&#xff0c;高 g 值加速度传感器广泛应用于先进兵器研制&#xff0c;如深侵彻系统、精确打击弹药及钻地弹药等。其性能指标直接影响研究结果的准确性与可靠性&#xff0c;因此对该传感器进行定期校准意义重大。高冲击加速度校准系统具备多方面功能&#xff0c;适…

FPGA 纯逻辑NVME raid0 IP核

系统采用XCZU19EG搭载4个三星990 PRO SSD 单盘读写不低于3GB/s 4盘总带宽不低于12GB/s

GStreamer开发笔记(三):测试gstreamer/v4l2+sdl2/v4l2+QtOpengl打摄像头延迟和内存

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、O…

CATIA高效工作指南——零件建模篇(二)

一、PowerCopy特征复用技术 1.1 智能特征封装 通过​​几何图形集(Geometrical Set)​​构建参数化特征组&#xff0c;将关联的草图、曲面、实体等元素进行逻辑封装。操作流程如下&#xff1a; 创建新几何图形集并完成特征建模激活PowerCopy命令&#xff0c;选择目标几何集定…

CentOS 7 安装OpenJDK 17 JRE

CentOS 7 自带的java 版本为&#xff1a;java version "1.8.0_311"&#xff0c; 有些软件的运行需要更高的java版本。CentOS 7 自带的默认仓库里 没有 OpenJDK 17&#xff0c;但是 Adoptium 项目&#xff08;前身 AdoptOpenJDK&#xff09;提供了稳定的 OpenJDK 17 版…

【c++】 我的世界

太久没更新小游戏了 给个赞和收藏吧&#xff0c;求求了 要游戏的请私聊我 #include <iostream> #include <vector>// 定义世界大小 const int WORLD_WIDTH 20; const int WORLD_HEIGHT 10;// 定义方块类型 enum BlockType {AIR,GRASS,DIRT,STONE };// 定义世界…

angular的cdk组件库

目录 一、虚拟滚动 一、虚拟滚动 <!-- itemSize相当于每个项目的高度为30px --><!-- 需要给虚拟滚动设置宽高&#xff0c;否则无法正常显示 --> <cdk-virtual-scroll-viewport [itemSize]"40" class"view_scroll"><div class"m…

视频编解码学习三之显示器

整理自&#xff1a;显示器_百度百科&#xff0c;触摸屏_百度百科,百度安全验证 分为阴极射线管显示器&#xff08;CRT&#xff09;&#xff0c;等离子显示器PDP&#xff0c;液晶显示器LCD 液晶显示器的组成。一般来说&#xff0c;液晶显示器由以下几个部分组成&#xff1a; […

尚硅谷-硅谷甄选项目记录

一、Vue3 1 基础配置 1.1 路径别名 vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue// 引入path&#xff0c;node提供的模块&#xff0c;可以获取文件或文件夹的路径 import path from pathexport default defineConfig({plugins: […

ThinkPHP5 case when的使用

主表的类型不同&#xff0c;需要连接查询不同的表时&#xff0c;可以使用case when 在主表(上面的表中)的模型里面&#xff0c;写如下代码来获取列表&#xff1a; $res $this->alias("p")->field([p.*,"CASE WHEN p.pd_ticket_type 1 THEN (select s.s…

Android 10.0 SharedPreferences in credential encrypted storage are not avai

1.前言 在10.0的系统rom定制化开发中,在开机的过程中,由于某些应用在开机解锁阶段就开始访问查询短信和联系人等功能,所以 会出现抛异常的情况出现,接下来分析下相关的情况,然后来解决这些问题 2.SharedPreferences in credential encrypted storage are not available …

LeetCode[102]二叉树的层序遍历

思路&#xff1a; 题目描述从左到右一层一层的进行遍历&#xff0c;就遍历二叉树的这种题我更喜欢用递归来做&#xff0c; 我使用java来做的&#xff0c;结果集是两个List集合&#xff0c;那么我们是不是应该每到新的一层就给这个结果集添加一个内部的List&#xff0c;那么怎么…