Keepalived+MySQL 高可用集群

devtools/2024/12/22 1:25:04/

基础架构如下
在这里插入图片描述
准备干净的实验环境

[root@mysql1 ~]# systemctl stop firewalld
[root@mysql1 ~]# cat /etc/sysconfig/selinux |grep "SELINUX=disabled"
SELINUX=disabled
[root@mysql1 ~]# setenforce 0              
setenforce: SELinux is disabled
[root@mysql1 ~]# getenforce                
Disabled

首先,搭建221和222机器mysql互为主从

这里可以参考我之前的帖子mysql主从复制
mysql双主双从

我们本次实验只是两台机器互为主从,即互为master和slave

搭建完成后登录mysql 可以查看状态:
mysql1机器:
在这里插入图片描述
mysql2:
在这里插入图片描述
可以自行验证修改数据,两边数据库是否同步


随后
开始安装配置 keepalived (mysql1& mysql2)

mysql1:

[root@mysql1 ~]# yum -y install keepalived
[root@mysql1 ~]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {router_id mysql1script_user rootenable_script_securityuser root
}vrrp_script check_run {script "/etc/keepalived/keepalived_check_mysql.sh"interval 5weight 2
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 88priority 100advert_int 1authentication {auth_type PASSauth_pass yryr}track_script {check_run}virtual_ipaddress {192.168.29.100/24 dev ens33 label ens33:1}
}

mysql2:

[root@mysql2 ~]# yum -y install keepalived
[root@mysql2 ~]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {router_id mysql2script_user rootenable_script_security
}vrrp_script check_run {script "/etc/keepalived/keepalived_check_mysql.sh"interval 5weight 2
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 88priority 50advert_int 1authentication {auth_type PASSauth_pass yryr}track_script {check_run}virtual_ipaddress {192.168.29.100/24 dev ens33 label ens33:1}
}

两台机器上keepalived都配置了一个mysql的检查脚本 ,现在我们来加上:

[root@mysql2 ~]# vim /etc/keepalived/keepalived_check_mysql.sh#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=localhost 
MYSQL_USER=root 
MYSQL_PASSWORD=123456
CHECK_TIME=3MYSQL_OK=1check_mysql_helth (){ echo "Checking MySQL at $(date)" >> /var/log/keepalived_mysql_check.log$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -e "show status" >> /var/log/keepalived_mysql_check.log 2>&1if [ $? -eq 0 ]; then MYSQL_OK=1else MYSQL_OK=0 fi return $MYSQL_OK 
}while [ $CHECK_TIME -ne 0 ]; do check_mysql_helth if [ $MYSQL_OK -eq 1 ]; then exit 0 filet CHECK_TIME--sleep 1 
doneecho "MySQL health check failed at $(date)" >> /var/log/keepalived_mysql_check.log
/usr/bin/systemctl stop keepalived
exit 1

授权:

[root@mysql1 ~]# chmod +x /etc/keepalived/keepalived_check_mysql.sh

重启服务:

[root@mysql1 local]# systemctl restart keepalived[root@mysql2 local]# systemctl restart keepalived

查看:
可以看到我们的vip 100 已经飘到 master机器上

[root@mysql1 local]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:5f:08:ee brd ff:ff:ff:ff:ff:ffinet 192.168.29.221/24 brd 192.168.29.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.29.100/24 scope global secondary ens33:1valid_lft forever preferred_lft foreverinet6 fe80::b09a:b99e:bc92:62ee/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::9073:a63f:e689:8462/64 scope link noprefixroute valid_lft forever preferred_lft forever

后续可以停止mysql 服务来验证vip状态~


http://www.ppmy.cn/devtools/121116.html

相关文章

基于PyQt5和SQLite的数据库操作程序

基于PyQt5和SQLite的数据库操作程序:功能解析 在现代办公和数据处理中,数据库操作是不可或缺的一部分。然而,传统的数据库管理工具往往界面复杂,操作繁琐,对于非专业人士来说存在一定的学习曲线。为了解决这个问题,我们开发了一款基于PyQt5和SQLite的数据库操作程序。该…

Cilium + ebpf 系列文章- (六)Cilium-BGP与分发-EXTERNAL-IP

一、首先你安装的Cilium需要支持BGP cilium install \--version v1.16.1 \--set ipam.modekubernetes \--set routingModenative \--set ipv4NativeRoutingCIDR"10.0.0.0/8" \--set bgpControlPlane.enabledtrue \--set k8s.requireIPv4PodCIDRtrue 这个命令用于安…

二值图像的面积求取的两种方法及MATLAB实现

一、引言 面积在数字图像处理中经常用到&#xff0c;在MATLAB中&#xff0c;计算二值图像的面积通常可以通过两种主要方法实现&#xff1a;遍历法和直接利用bwarea函数。下面将分别介绍这两种方法的原理和相应的MATLAB代码示例。 二、遍历法计算二值图像面积的原理和MATLAB代码…

【C++】类与对象基础概念解析

恭喜你学习完C语言与数据结构的有关内容&#xff0c;现在让我们开始进行对C的学习吧~ &#x1f49d;&#x1f49d;&#x1f49d;如果你对C语言或数据结构还存在疑惑&#xff0c;欢迎观看我之前的作品 &#x1f449;【数据结构】 &#x1f449;【C语言】 目录 一、引言 二、类…

Logistic Regression 使用不同library系数不一样?Sklearn vs. Statsmodel

Logistic Regression 使用不同library系数不一样&#xff1f;Sklearn vs. Statsmodel I realize that for logistic regression, it has different coefficients generated by Sklearn LogisticRegression() and Statsmodel. Why there’s the difference? Why there’s no …

MySQL存储过程与触发器

数据库是现代应用程序的核心组件之一,而在日常开发和管理中,自动化、逻辑处理和优化性能尤为重要。MySQL 中的存储过程与触发器提供了强大的工具,帮助开发者在数据库内部实现这些目标。存储过程可以让一组 SQL 语句在数据库中以预编译的方式存储,并在需要时调用。触发器则能…

css 选择除第一个子元素之外的所有子元素

在 CSS 中可以使用:not和:first-child的组合来选择除第一个子元素之外的所有子元素。 <!DOCTYPE html><html lang"en"><head><style>ul li:not(:first-child) {color: red;}</style></head><body><ul><li>第…

【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】

目录 stm32电路磁编码器电路电机驱动电路电流采样电路电机选择本文示例硬件说明 为了承载和验证本文的FOC代码工程&#xff0c;本节设计了一个简易的三相无刷电机 硬件套件&#xff0c;主控采用非常常用的stm32f103c8t6单片机&#xff0c;电机编码器采用MT6701&#xff0c;电机…