【Mysql】通过Keepalived搭建mysql双主高可用集群

news/2024/9/18 14:59:27/ 标签: mysql, 数据库

一、环境信息

主机名ip操作系统mysql版本VIP(虚拟ip)
hadoop01192.168.10.200centos7_x865.7192.168.10.253
hadoop03192.168.10.202centos7_x865.7

二、mysql集群搭建

两台节点,如果未部署mysql服务,部署文档请看【Mysql】mysql三种安装方式(二进制、yum、docker)-CSDN博客

三、配置文件修改

hadoop01节点的my.cnf配置,默认情况下MySQL的配置文件是/etc/my.cnf

[mysqld_safe]
pid-file=/data/mysql5.7/logs/mysqld.pid
[mysqld]
basedir=/usr/local/mysql5.7
datadir=/data/mysql5.7/data
socket=/data/mysql5.7/run/mysql.sock
log_error=/data/mysql5.7/logs/alert.log
pid_file=/data/mysql5.7/logs/mysqld.pid##新增内容如下
#设置server-id,两节点必须不一样
server-id=1
#开启binlog,并指定存储位置
log-bin=/data/mysql5.7/logs/mysql-bin
#中继日志
relay-log =/data/mysql5.7/logs/mysql-relay-bin
#忽略同步的库
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys

hadoop03节点的my.cnf配置

[mysqld_safe]
pid-file=/data/mysql5.7/logs/mysqld.pid
[mysqld]
basedir=/usr/local/mysql5.7
datadir=/data/mysql5.7/data
socket=/data/mysql5.7/run/mysql.sock
log_error=/data/mysql5.7/logs/alert.log
pid_file=/data/mysql5.7/logs/mysqld.pid##新增内容如下
#设置server-id,两节点必须不一样
server-id=2
#开启binlog
log-bin=/data/mysql5.7/logs/mysql-bin
#中继日志
relay-log=/data/mysql5.7/logs/mysql-relay-bin
#忽略同步的库
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys

四、数据保持一致性

        如果Hadoop01上已经有mysql数据,那么在执行主主互备之前,需要将mysql的数据保持同步,首先在Hadoop01上备份 mysql数据,执行sql命令:FLUSH TABLES WITH READ LOCK; 不要退出这个终端,否则这个锁就失效了。

        在不退出终端的情况下,使用 mysqldump工具来导出数据,再导入宁外一个数据库中。

        重启数据库,使之前配置文件参数生效;

五、主主互备模式配置

1)配置hadoop01主,hadoop02从

#登录hadoop01数据库,创建同步用户
mysql> grant replication slave on *.* to 'cuixiaoqin'@'192.168.10.%' identified by '520_1314';
#刷新权限表
mysql> flush privileges;
#查看hadoop01的master_log_file和master_log_pos
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      454 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)#登录hadoop02数据库,配置主从,master_log_file和master_log_pos对应hadoop01的master信息
mysql> change master to master_host='192.168.10.200',master_user='cuixiaoqin',master_password='520_1314',master_log_file='mysql-bin.000001',master_log_pos=454;
#开启从
mysql> start slave;
#查看主从状态,Slave_IO_Running和Slave_SQL_Running都为yes代表正常
mysql> show slave status\G

2)配置hadoop02主,hadoop01从

#登录hadoop02数据库,创建同步用户
mysql> grant replication slave on *.* to 'cuixiaoqin'@'192.168.10.%' identified by '520_1314';
#刷新权限表
mysql> flush privileges;
#查看hadoop02的master_log_file和master_log_pos
mysql> show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      606 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)#登录hadoop01数据库,配置主从,master_log_file和master_log_pos对应hadoop01的master信息
mysql> change master to master_host='192.168.10.202',master_user='cuixiaoqin',master_password='520_1314',master_log_file='mysql-bin.000001',master_log_pos=606;
#开启从
mysql> start slave;
#查看主从状态,Slave_IO_Running和Slave_SQL_Running都为yes代表正常
mysql> show slave status\G

六、配置KeepAlived实现MySQL双主高可用

hadoop01和hadoop03都执行相同操作,keepalived官网Keepalived for Linux

#安装keepalived依赖
[root@hadoop01 ~]# yum install gcc gcc-c++ openssl-devel -y
#离线安装,也可以yum install安装
[root@hadoop01 ~]# wget -c https://keepalived.org/software/keepalived-2.1.5.tar.gz
[root@hadoop01 ~]# tar -xvf keepalived-2.1.5.tar.gz
[root@hadoop03 ~]# mv keepalived-2.1.5 keepalived
[root@hadoop03 ~]# mv keepalived /usr/local/
[root@hadoop01 ~]# cd /usr/local/keepalived
[root@hadoop01 keepalived]# ./configure --prefix=/usr/local/keepalived
[root@hadoop01 keepalived]# make && make install#编写监控mysql状态脚本
[root@hadoop01 ~]# vi /etc/keepalived/check_mysql.sh
#!/bin/bash
#检查3306端口是否存在
ss -lntup|grep 3306 > /dev/null 2>&1
if [[ $? -eq 0 ]]; thenexit 0
elsesystemctl stop keepalived
fi
[root@hadoop01 ~]# chmod +x /etc/keepalived/check_mysql.sh

hadoop01的keepalived.conf配置文件设置

[root@hadoop01 keepalived]# mkdir /etc/keepalived
[root@hadoop01 keepalived]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {#在 keepalived 状态变化时接收通知邮件的地址notification_email {csdn@126.com}#邮件的发件人地址notification_email_from ops@wangshibo.cn#发送通知邮件所使用的 SMTP 服务器地址smtp_server 127.0.0.1#连接到 SMTP 服务器的超时时间smtp_connect_timeout 30#为 VRRP 实例指定了一个唯一的标识符router_id MYSQL-01#启用脚本安全性检查enable_script_security
}#定义了一个 VRRP 脚本 chk_mysql,用于监控脚本的执行状态
vrrp_script chk_mysql {#指定了要执行的脚本路径script "/etc/keepalived/check_mysql.sh"#设定了脚本执行的时间间隔,单位是秒interval 2#指定用户user root
}#定义了一个 VRRP 实例,VI_1 是这个实例的名称
vrrp_instance VI_1 {#设定角色为BACKUP,都是设成BACKUP则以优先级为主要参考state BACKUP#指定了用于 VRRP 的网络接口interface ens33#指定了 VRRP 实例的虚拟路由器 ID,这个 ID 在相同的 VRRP 组中必须唯一。virtual_router_id 51#设定节点的优先级priority 101#指定了主节点向备份节点广播状态信息的间隔时间,单位秒advert_int 1#设置认证方式,auth_type PASS 表示使用简单的密码认证,auth_pass 1111 是认证密码authentication {auth_type PASSauth_pass 1111}#虚拟 IP 地址virtual_ipaddress {192.168.10.253}#用于跟踪脚本的状态,chk_mysql 是定义的脚本名称,keepalived 会根据这个脚本的执行结果来决定是否调整状态track_script {chk_mysql}
}

hadoop02的keepalived.conf配置文件设置

[root@hadoop03 ~]# mkdir /etc/keepalived
[root@hadoop03 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {csdn@126.com}notification_email_from ops@wangshibo.cnsmtp_server 127.0.0.1smtp_connect_timeout 30#设置 VRRP 实例的一个唯一的标识符router_id MYSQL-02enable_script_security
}vrrp_script chk_mysql {script "/etc/keepalived/check_mysql.sh"interval 2user root
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51#设置优先级为100priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.253}track_script {chk_mysql}
}

hadoop01和hadoop02重启keepalived服务

systemctl start keepalived
systemctl status keepalived

 七、验证keepalived虚拟ip地址是否正常

#目前vip在Hadoop01节点

#将hadoop01节点mysql停掉,查看虚拟ip地址是否在hadoop02上


http://www.ppmy.cn/news/1516799.html

相关文章

模型 PMI思考法

系列文章 分享 模型,了解更多👉 模型_思维模型目录。全面评估,三思而后行。 1 PMI思考法的应用 1.1 个人职业发展中的PMI思考法应用 张华是一位有志于提升自己职业竞争力的职场人士。他正在考虑报名参加一个专业认证课程,以期提…

在我的博士科研生活中,SCI的英语写作一直是我的挑战。

在我的博士科研生活中,SCI的英语写作一直是我的挑战。尽管我不断地努力提高自己的语言水平,但每当我提交文章后,审稿人或编辑总是会指出语言表达的不足之处,让我深感苦恼。于是,我开始寻找专业的润色服务来帮助我提升文…

python如何判断回文

打开JUPTER NOTEBOOK,新建一个PYTHON文档。 n input("Please input string: ") print(n) 我们首先让用户输入要进行判断的字符串,然后打印出来查看一下。 n input("Please input string: ") is_palidrome n[::-1] if n is_palid…

单片机中的存储器讲解

单片机中的存储器 目录 单片机中的存储器常用的存储器易失性存储器RAMSRAMDRAM 非易失性存储器ROMMask ROMPROMEPROME2PROMFlashNOR FlashNADN Flash 单片机里全局变量、局部变量、堆、栈的存储区域区域介绍栈区堆区静态区代码区常量区 内存分区分类四个区域 常用的存储器 易失…

QT常用UI控件

目录 一、引言 二、QT常用UI控件概述 1.按钮(QPushButton) 2.文本框(QLineEdit) 3.标签(QLabel) 4.下拉列表(QComboBox) 5.单选按钮(QRadioButton) 6.复选框…

【OpenCV】SIFT(尺度不变特征变换)算法?

关键词:SIFT Algorithm 文章目录 一、介绍二、什么是 SIFT 算法?2.1 SIFT 算法描述2.2 SIFT 算法示例 三、人类与机器识别3.1 SIFT 在计算机视觉中的应用3.2 SIFT 关键点的优势3.3 示例演示 四、关键点定位关键点选择 五、实验任务指导5.1 计算大小和方…

博弈论详解 2(SG函数 和 SG定理)

传送门:博弈论详解 1(基本理论定义 和 Nim 游戏) 什么是 SG 函数 接着上次的讲解,我们来了解一个更通用的模型。我们把每一个状态变成一个点(在 Nim 游戏里就代表 a a a 数组),如果可以从一种…

安装Win10操作系统时找不到任何驱动器的解决方法

安装Win10操作系统时找不到任何驱动器的解决方法 有时候在一台新电脑上使用U盘安装系统时提示:我们找不到任何驱动器。 如下图所示: 解决方法: 一、按F12(不同电脑进入Bios的按键可能不同)将电脑进入Bios画面&#xf…

DataX(Doris同步数据到SelectDB)

背景 由于之前的doris数仓在本地的服务器,当数据量越来越大,服务器的性能达不到要求,查询数据经常超时,故需要把本地的doris数仓部署到云上,本文以阿里云为例,迁移工具使用的阿里开源的datax。 datax官方文…

client网络模块的开发和client与server端的部分联动调试

客户端网络模块的开发 我们需要先了解socket通信的流程 socket通信 server端的流程 client端的流程 对于closesocket()函数来说 closesocket()是用来关闭套接字的,将套接字的描述符从内存清除,并不是删除了那个套接字,只是切断了联系,所以我们如果重复调用,不closesocket()…

20240828 每日AI必读资讯

8岁女孩玩转AI编程,45分钟打造聊天机器人,Karpathy都看呆了 - 新晋顶流AI代码编辑器——Cursor,已经进化到了“0手工代码”阶段。 - 提供了多个AI模型,包括GPT-4、GPT-4o和Claude 3.5 Sonnet等,可以通过跟大模型聊天…

微服务——远程调用

为什么需要远程调用? 在微服务架构中,每个服务都是独立部署和运行的,它们之间需要相互协作以完成复杂的业务逻辑。因此,远程调用成为微服务之间通信的主要方式。通过远程调用,一个服务可以请求另一个服务执行某些操作或…

【Python机器学习】NLP概述——词序和语法

词的顺序很重要,那些在词序列(如句子)中控制词序的规则被称为语言的语法(也被称为文法)。这是之前的词袋或词向量例子中所丢弃的信息。在大多数简短的短语甚至许多完整的句子中,上述词向量近似方法都可以奏…

设计模式 7 桥接模式

设计模式 7 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff0…

整合sentinel遇到的小问题

1.运行jar包 ,端口为默认8080 正确命令 java -Dserver.port8090 -Dcsp.sentinel.dashboard.server127.0.0.1:8090 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.6.jar -D这些指令要在 -jar前面 在宝塔部署时,直接复制到运行命令后…

vue事件监听

我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件,并在事件触发时执行对应的 1.回车事件(点击回车触发) confirm 适用uni-app keyup.enter 适用vue3 运用场景:通常在文本框输入的时候使用 2.点击事件(鼠标左键…

Cubase操作:如何修改每个音频块的名字 写歌习惯

如何修改每个音频块的名字 我对命名比较注重,之前用Cubase12,导入我手机中编辑过的Cubasis的工程时,发现中文部分有乱码…… 而且好像改名改得很费劲…… 后面通过多方咨询和探索思考,终于找到方法了! 可以先把信息…

【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondTopCount

这段代码定义了一个名为 GH_Ex_Ana_CondTopCount 的 Grasshopper 组件。它的主要功能是为 Excel 中的一个范围添加条件格式,具体是根据数值的大小高亮显示前N个(或后N个)数值。以下是该组件的详细介绍: 功能概述: 组件…

灵办AI搜索引擎和文档总结工具

前言—— 在信息爆炸的时代,如何高效地获取和处理知识成为了每个人面临的挑战。随着人工智能技术的迅猛发展,本文将深入探讨这一创新工具的功能与优势,以及如何在日常生活和工作中充分利用它,开启智能化的信息获取新篇章。 点击…

Part3-DOM学习笔记-操作元素

5.操作多个元素 5.1 排他思想 前面所述均为操作一个元素,给一个元素注册事件,如果是一组元素,就需要用循环的方式给元素注册事件。 我们想要给当前的元素实现某种样式,而其他的元素没有这个样式,这就需要用到排他思…