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

相关推荐
KellenKellenHao4 小时前
MySQL数据库主从复制
数据库·mysql
一只fish5 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(16)
数据库·mysql
叁沐7 小时前
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
mysql
Java烘焙师7 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询
飞翔的佩奇7 小时前
Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
java·数据库·mysql·vue·毕业设计·ssm框架·小区物业管理系统
@Ryan Ding8 小时前
MySQL主从复制与读写分离概述
android·mysql·adb
feifeigo12314 小时前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
A__tao19 小时前
一键将 SQL 转为 Java 实体类,全面支持 MySQL / PostgreSQL / Oracle!
java·sql·mysql
一只fish20 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(17)
数据库·mysql
叁沐21 小时前
MySQL 06 全局锁和表锁:给表加个字段怎么有这么多阻碍?
mysql