MySQL + Keepalived自动切换

目录

一. 环境准备

二. 部署软件

三. master主机配置keepalived

四. slave主机配置keepalived

五. 两台机器配置数据库检查脚本

六. 客户端模拟访问


一. 环境准备

准备三个新环境的虚拟机,关闭防火墙和SElinux安全策略,并设置时间同步和配置好YUM源。

虚拟IP用:192.168.226.200 

主机名主机IP系统用途
master192.168.226.139Rockly9.4主节点
slave192.168.226.140Rockly9.4备用节点
localhost192.168.226.141Rockly9.4模拟客户端

二. 部署软件

两台主机,master和slave都操作

下载mysql-server和keepalived

yum install -y mysql-server keepalived

启动数据库

systemctl restart mysqld

使用mysql登录数据库,在rocky_linux9.4社区版没有初始化密码限制和低安全策略,直接可以登录登陆后修改一个密码使用。

Mysql版本:8.0.36

[root@localhost ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 Source distributionCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

 再创建一个远程root用户和密码并设置放开权限

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
ERROR 1410 (42000): You are not allowed to create a user with GRANT
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

 注意到这里,只用在master或者slave其中一台主机的数据库中创建一个库,这里我选择对192.168.226.139创建,这里是创建一个后面用客户端测试观察的库。

mysql> CREATE DATABASE dbtest;

三. master主机配置keepalived

vi /etc/keepalived/keepalived.conf

删除原文件keepalived.conf里的内容,新增如下内容,注意修改虚拟IP

! Configuration File for keepalivedglobal_defs {router_id master
}
vrrp_script check_run {script /etc/keepalived/keepalived_check_mysql.shinterval 5
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 66priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.226.200/24      #虚拟IP}track_script {check_run}
}

四. slave主机配置keepalived

vim /etc/keepalived/keepalived.conf

删除原文件keepalived.conf里的内容,新增如下内容,注意修改虚拟IP

! Configuration File for keepalivedglobal_defs {router_id backup
}
vrrp_script check_run {script "/etc/keepalived/keepalived_check_mysql.sh"interval 5
}vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 66priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress { 192.168.226.200/24      #虚拟IP}track_script {check_run}
}

五. 两台机器配置数据库检查脚本

 这里两台机器master和salve都要配置

vi /etc/keepalived/keepalived_check_mysql.sh

 写入如下内容

#!/bin/bash
/usr/bin/mysql -uroot -p'1234' -e "show status" &>/dev/null
if [ $? -ne 0 ] ;then#       service keepalived stopsystemctl stop keepalived
fi

给脚本加上权限

chmod 777 /etc/keepalived/keepalived_check_mysql.sh

启动keepalived并设置开机自启

systemctl enable --now keepalived

此时,虚拟IP已经出现在master主机上。

六. 客户端模拟访问

在主机192.168.226.141机器上下载数据库用来远程登录模拟是客户端使用

yum install -y mysql-server
systemctl start mysqld

使用mysql 登录,初始化没密码的,登陆后修改一个和前面实验主机不同的数据库密码并退出。

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
EXIT

使用虚拟IP192.168.226.200远程登录数据库

mysql -uroot -p1234 -h 192.168.226.200 -P 3306

登录后 

[root@localhost ~]# mysql -uroot -p1234 -h 192.168.226.200 -P 3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.36 Source distributionCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| dbtest             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)mysql> 

可以看到在这master机器创建的那个库,然后停止master主机的keepalived,观察虚拟IP是否漂移。

可以发现,虚拟IP漂移到了slave主机上,再次使用客户主机查看库命令发现没有了那个测试创建的库datest

mysql> show databases;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    13
Current database: *** NONE ***+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.03 sec)

现在重新开启master上的keepalived,观察到虚拟IP又转移到了master主机上,并使用客户端再次查看数据库,这次就又可以看到这个用于测试创建的库了

mysql> show databases;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    88
Current database: *** NONE ***+--------------------+
| Database           |
+--------------------+
| dbtest             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.03 sec)

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

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

相关文章

搭建k8s集群报错unknown command “\u00a0“ for “kubeadm init“

搭建k8s报错unknown command “\u00a0” for “kubeadm init” 网上搜了一下,是因为复制过来的命令前面包含了空格,将复制的命令放到idea可以清楚看到几个命令前面有空格,删除掉就好了,记录一下

低压电工作业题库

1.螺口灯头的螺纹应与( )相接。 A.零线 B.相线 C.地线 答案:A 2.指针式万用表测量电阻时标度尺最右侧是( )。 A.∞ B.0 C.不确定 答案:B 3.继电器是一种根据( )来控制电路"接通"或&quo…

Github入门教程,适合新手学习(非常详细)

前言:本篇博客为手把手教学的 Github 代码管理教程,属于新手入门级别的难度。教程简单易操作,能够基本满足读者朋友日常项目寄托于 Github 平台上进行代码管理的需求。Git 与 Github 是一名合格程序员 coder 必定会接触到的工具与平台&#x…

React+TS前台项目实战(六)-- 全局常用组件Button封装

文章目录 前言Button组件1. 功能分析2. 代码注释说明3. 使用方式4. 效果展示(1)有加载动画,执行promise函数(2)无加载动画,执行click事件 总结 前言 今天这篇主要讲全局按钮组件封装,可根据UI设…

2023年13个最适合销售电子书的WordPress主题

欢迎来到我们用于销售电子书和其他数字/可下载产品(软件、应用程序、图标集、主题等)的最佳WordPress主题的完整集合。 这些主题有内置的支付网关,可以通过 PayPal、信用卡等处理安全支付。(易于配置!) 最…

如何进行文件映射

创建一个文件WebMvcConfig package com.itheima.config;import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.…

以行动诠释价值观。

随着科技的飞速发展,程序员在当今社会扮演着越来越重要的角色。他们不仅是推动技术革新的重要力量,也是企业核心竞争力的重要组成部分。对于程序员而言,职业素养是职业生涯中不可或缺的一部分,它决定了程序员的工作态度、价值观以…

红队攻防渗透技术实战流程:中间件安全:JettyJenkinsWeblogicWPS

红队攻防渗透实战 1. 中间件安全1.1 中间件-Jetty-CVE&信息泄漏1.2 中间件-Jenkins-CVE&RCE执行1.2.1 cve_2017_1000353 JDK-1.8.0_291 其他版本失效1.2.2 CVE-2018-10008611.2.3 cve_2019_100300 需要用户帐号密码1.3 中间件-Weblogic-CVE&反序列化&RCE1.4 应…

zip加密txt文件后,暴力破解时会有多个解密密码可以打开的疑问??

最近在做一个关于zip压缩文件解密的测试,发现通过暴力解密时,会有多个解密密码可以打开,非常疑惑,这里做个问题,希望能有大佬解惑。 1、首先在本地创建一个113449.txt的文件,然后右键txt文件选择压缩&…

【Android面试八股文】你能说一说线程池管理线程的原理吗?

面试官(Interviewer): 欢迎参加面试,今天我们会讨论一些关于 Java 线程池管理的问题。你能给我解释一下 ThreadPoolExecutor 是如何管理线程的吗? 候选人(Candidate): 当然可以,ThreadPoolExecutor 是 Java 中用于创建和管理线程池的核心类。它通过一组核心参数来控制线…

RoCE网络架构在高性能计算的应用

浅析RoCE在高性能计算的应用 在高性能计算(HPC)系统的发展初期,通常选择专业网络解决方案,如Myrinet、Quadrics和InfiniBand,而不是以太网解决方案。通过定制网络方案可以有效解决以太网解决方案的限制,增强带宽、降低延迟、改善拥塞控制。 2010年,IBTA推出了RoCE协议技…

Eplan 2023 学习

软件下载及安装教程网络上一堆,不再赘述,唯一的安装重点(安装软件时最好断网),否则可能会出现装不了补丁等问题; 软件界面配色调整 软件安装完成后,如果对界面颜色不喜欢可以随时切换&#xff…

PyQT5 键盘模拟/鼠标连点器的实现

近来在玩一个游戏,找不到合适的鼠标连点器,不是有广告就是功能太复杂,自己写了一个,分享出来,如果有需要的可以自行运行研究。 准备工作 Python版本:Python 3.12.3;运行前确保pyQT5已经安装: pip install PyQt5程序运行界面: 程序代码: 通过引入单独的常量和变…

智能计算系统-概述

1、人工智能技术分层 2、人工智能方向人才培养 3、课程体系的建议 4、智能系统课程对学生的价值 5、智能计算系统对老师的价值 6、什么是智能计算系统 7、智能计算系统的形态 8、智能计算系统具有重大价值 9、智能计算系统的三大困难 10、开创深度学习处理器方向 11、寒武纪的国…

MySQL监控和日志管理:故障排查与性能分析

一、MySQL监控 一、监控工具介绍 MySQL自带了一些非常有用的监控工具。例如"SHOW STATUS"命令,它可以显示MySQL服务器的当前状态。此外,还有"SHOW PROCESSLIST"命令,它可以显示当前正在运行的进程。 另外,还有许多强大的第三方工具可供选择: **Percon…

用一个ESP32S3-Zero把有线键盘变为无线

三脚猫最近一直琢磨,那些喜欢买剪线键盘,以及自制键盘瞎折腾的人都是怎么搞的。经过不懈努力,终于想明白除了直接的硬件一个个pin针的高低电压判断后转给蓝牙,拿到现成的古董剪线键盘还有一个方式其实是在usb host转发给蓝牙类似这…

北斗三代一体式数传终端短报文

北斗三代一体式数传终端短报文M20C-V30针对船载通信和导航应用推出的一款支持北斗 RDSS/RNSS 功能的船载一体机。北斗数传终端内部集成了北斗多频天线、射频、基带以及主控等功能单元,可实现 RDSS 定位、短报文通信和 RNSS 导航定位等功能。M20C-V30型北斗数传终端体…

Java线程池的抛弃策略

Java线程池的抛弃策略 Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销,从而提高应用程序的性能和响应速度。然而,当线程池中的任务数量超过其处理能力时,就需要一种机制来处理新提交的任…

Vue3 中 props 与 emit 用法

在 Vue3 中,props 和 emit 的用法有所改变,主要的变化在于它们现在都通过 setup 函数来访问和使用。 props: props 用于父组件向子组件传递数据。在 setup 函数中,props 是一个参数,我们可以通过它访问到父组件传入的所有 prop 值…

datax的安装及使用入门

1 下载解压Datax tar包 下载到自己指定的安装目录 #wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 进行解压 tar -zxvf datax.tar.gz 2 Datax验证 #修改datax/bin目录下datax.py的权限 chmod 777 datax/bin/datax.py 2.1运行官方给定的任务…