mysql双主互从通过KeepAlived虚拟IP实现高可用

mysql双主互从通过KeepAlived虚拟IP实现高可用

在mysql 双主互从的基础上,

架构图:

Keepalived有两个主要的功能:

  • 提供虚拟IP,实现双机热备
  • 通过LVS,实现负载均衡

安装

python 复制代码
# 安装
yum -y install keepalived 
# 卸载
yum remove keepalived 

修改 keepalived 配置文件

python 复制代码
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.original
vi /etc/keepalived/keepalived.conf

master

keepalived.conf

python 复制代码
global_defs {
	router_id LVS_1
	script_user root
}

vrrp_script check_mysql_port {
	script "/etc/keepalived/check_mysql_port.sh"    # 脚本存放的位置
	interval 2     # 每隔两秒运行上一行脚本
	weight 2
}


vrrp_instance VI_1 {
    # 主机=MASTER;备用机=BACKUP
	state MASTER
    # 该实例绑定的网卡名称
	interface ens192
    # 保证主备节点一致
	virtual_router_id 148
    # 权重,master值 > backup值
	priority 100
    # 主备组播报发送间隔时间1秒
	advert_int 1
    # 认证权限密码,防止非法节点进入
	authentication {
    auth_type PASS
    auth_pass 1111
	}	
    # 虚拟出来的ip,可以有多个(vip)
	virtual_ipaddress {
    178.119.30.13
	}
    # 调用监控脚本
	track_script {
    check_mysql_port
	}
}

检测xxx.sh

check_mysql_port.sh

安装killall 命令

python 复制代码
# 查询
yum search killall
# 安装对应组件
yum install psmisc -y

安装netstat

python 复制代码
yum install -y net-tools
python 复制代码
#!/bin/bash
A=`netstat -nltp|grep 3306|wc -l`
if [ $A -eq 2;
then
    echo "$host mysql login successfully"
    exit 0
else
    echo "mysql login failed"
    killall keepalived
    exit 2
fi

修改脚本xxx.sh权限

python 复制代码
chmod 777 check_mysql_port.sh

slave

keepalived.conf

python 复制代码
global_defs {
	router_id LVS_1
	script_user root
}

vrrp_script check_mysql_port {
	script "/etc/keepalived/check_mysql_port.sh"    # 脚本存放的位置
	interval 2     # 每隔两秒运行上一行脚本
	weight 2
}


vrrp_instance VI_1 {
    # 主机=MASTER;备用机=BACKUP
	state BACKUP
    # 该实例绑定的网卡名称
	interface ens192
    # 保证主备节点一致
	virtual_router_id 148
    # 权重,master值 > backup值
	priority 80
    # 主备组播报发送间隔时间1秒
	advert_int 1
    # 认证权限密码,防止非法节点进入
	authentication {
    auth_type PASS
    auth_pass 1111
	}	
    # 虚拟出来的ip,可以有多个(vip)
	virtual_ipaddress {
    178.119.30.13
	}
    # 调用监控脚本
	track_script {
    check_mysql_port
	}
}

master VS slave

结果展示

启动keepalived

  • master



  • slave

停止容器,使vip飘移

  • master

  • slave

systemctl 命令

python 复制代码
# 启动 keepalived
systemctl start keepalived  

# 加入开机启动 keepalived
systemctl enable keepalived 

# 重新启动 keepalived
systemctl restart keepalived  

# 查看 keepalived 状态
systemctl status keepalived   

# 加载配置文件
systemctl daemon-reload

service VS systemctl

相关推荐
我是一颗柠檬11 小时前
【MySQL全面教学】MySQL基础SQL语句Day3(2026年)
数据库·后端·sql·mysql·oracle
MandalaO_O11 小时前
MyBatis 与 MySQL 执行流程
数据库·mysql·mybatis
键盘上的猫头鹰13 小时前
【从零学MySQL(三)】数据增删改(DML)及 SELECT 查询详解
数据库·mysql·数据分析
Cry丶14 小时前
WebFlux + R2DBC 场景下的分库分表预研:从架构选型到落地风险
mysql·postgresql·数据库架构·shardingsphere·分库分表·webflux·r2dbc
键盘上的猫头鹰14 小时前
【从零学MySQL(二)】数据库基础操作、数据类型与约束(附Navicat演示)
数据库·mysql·数据分析·数据可视化
阮胜昌15 小时前
在CentOS 7.9上安装MySQL8.4.4 LTS
mysql·mysql8.4
码上谈兵17 小时前
一次 MySQL 连接池打满,我花一晚上重构了 Go 的数据库操作
mysql
夕除17 小时前
spring boot 13
java·mysql·spring
WAIT_TIME18 小时前
基于 Docker 快速构建 MySQL InnoDB Cluster 高可用集群与 Router 读写分离
mysql·docker·集群·innodb cluster