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

相关推荐
wuqingshun3141595 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
这个DBA有点耶8 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范
wuqingshun3141598 小时前
MYSQL中如果发生死锁应该如何解决?
数据库·mysql
是上好佳佳佳呀10 小时前
MySQL 基础:从数据库概念到表结构管理DDL
数据库·mysql
DB哥讲数据库12 小时前
【最新】MySQL9.7安装教程:图文详解(附MySQL安装包)
android·mysql·adb
DB哥讲数据库13 小时前
MySQL 8.4 安装教程:超详细图文讲解(附mysql安装包)
linux·数据库·mysql·centos
wefg114 小时前
【MySQL】MySQL C API 访问 MySQL
数据库·mysql
L16247615 小时前
Zabbix 7.0 LTS 完整部署与运维手册(AlmaLinux 9 + MySQL 8.0 + Nginx)
运维·mysql·zabbix
玖玥拾1 天前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#