mysql MGR配置keepalived

2023-05-16

之前写过一篇mysql8.0搭建MGR 在这里 mysql8.0配置MGR - 悠游~~~ - 博客园 (cnblogs.com)

在此基础上配置keepalived

一、安装keepalived (可能会少些包,所以配置了网络yum源)      所有节点均需安装

配置yum源(我这里使用了oracle的)

[root@mgr1 run]# cat /etc/yum.repos.d/oracle.repo
[oracle]
name=oracle
baseurl=http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64
enabled=1
gpgcheck=0

 二、配置keepalived

修改默认配置文件(每个节点都需要)

vim /etc/keepalived/keepalived.conf


! Configuration File for keepalived

#指定mysql服务检测脚本
vrrp_script chk_mysql {
script "/root/chk_mysql.sh" #脚本路径
interval 2 #脚本检测频率
weight -5 #脚本执行返回值 =0 ,优先级不变。 !=0 时优先级 -5
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续2次检查成功则认为节点正常
}
#监测mysql 是否是master
vrrp_script chk_mysql_master {
script "/root/chk_mysql_master.sh"
interval 2
weight 10 #脚本执行返回值 =0 ,优先级加 10。 !=0 时优先级不变。
}

vrrp_instance VI_1 {
state MASTER #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
interface ens160 #指定实例绑定的网卡
virtual_router_id 88 #设置VRID标记(0..255)
priority 96 #设置优先级,优先级高的会被竞选为Master
advert_int 1 #检查的时间间隔,默认1s
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置VIP,可以设置多个,用于切换时的地址绑定。
192.168.220.100/24
}

track_script { #指定前面脚本的名字
chk_mysql
chk_mysql_master
}
}
global_defs { #全局配置
router_id k8s #组名,同集群一致
script_user root #执行脚本的用户
enable_script_security

}


====三个节点中只有priority参数大小不同,用来配置初始权重
mgr1 priority 100
mgr2 priority 98
mgr3 priority 96

上边的配置主要是由keepalived定时调用chk_mysql和chk_mysql_master这两个脚本来检查mysql的运行状态并根据检查情况来改变各个节点的权重,以此决定vip应该飘在哪个节点上

两个检查脚本需要自己写(见下方)

有关于权重的说明:{

这三个值不要相差太大,最好自己模拟一下算一下,看各种情况下是否是按照自己的预期得到权重;如果相差太大,weight值也比较小的时候,可能会导致备机的权重比主机的大


当通过chk_mysql.sh脚本检测mysql服务是否存在,如果执行了改变权重
通过/root/chk_mysql_master.sh脚本检测本机是否是master机,是的话,改变权重

整体来说就是通过改变机器的权重来把VIP飘在权重最大的机器上的;我们要做的就是通过脚本判断是否执行,使得master的权重最高;这里的权限一定得控制好;
权重策略是:
当weight > 0时:脚本执行成功了 Priority+Weight 执行失败 Priority
当weight < 0时:脚本执行成功了 Priority 执行失败 Priority+Weight

每执行一次他的权重是重新开大会算的,并不是接着上一次的来   }

====mysql检查脚本

vim /root/chk_mysql.sh

=== 检查mysql 服务脚本
#!/bin/bash
counter=`netstat -tulnp |grep -w :::3306 |wc -l`
if [ $counter -eq 0 ]; then
systemctl stop keepalived
fi

vim /root/chk_mysql_master.sh

=== 检查mysql master 脚本(使用uuid判断是否为master节点)
#!/bin/bash

priuuid=`/usr/local/mysql8.0/bin/mysql -uroot -S /mysql/data_mgr_8.0/mysql.sock -e "SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID = (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member')" |awk 'NR==2{print}'|awk -F" " '{print $2}'`

uuid=`/usr/local/mysql8.0/bin/mysql -uroot -S /mysql/data_mgr_8.0/mysql.sock -e "select @@global.server_uuid" |awk 'NR==2{print}'`

if [ $priuuid == $uuid ]; then
exit 0
else
exit 1
fi

====赋予脚本执行权限

chmod +x chk_mysql*

三、启动keepalived
[root@mgr1 keepalived]# systemctl start keepalived.service
[root@mgr1 keepalived]# systemctl enable keepalived.service

keepalived的日志默认在/var/log/messages下

四、验证高可用配置

==检查mgr状态 当前主节点为节点2 192.168.220.132

SELECT * FROM performance_schema.replication_group_members;

===检查节点2 keepalived状态和vip状态

vip在节点2成功启动

===从其他节点测试连接vip

从节点3连接vip登录到节点2上(uuid对应)

===节点2主库宕机测试

--节点2日志keepalived自动关闭并移除VIP

===检查当前mgr状况

节点1成为主库

====节点1日志VIP漂移并且提升权重

===测试连接数据库VIP

--在节点3连接VIP成功连接到primary库(节点1)

转载至mysql MGR配置keepalived - 悠游~~~ - 博客园

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql MGR配置keepalived 的相关文章

  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • MySQL:计算日期/时间之间的差异 - 仅在周一至周五“工作周”期间

    我需要计算开始日期 时间和结束日期 时间之间的差异 但是 我只想在 5 天的工作周内执行此操作 不包括周六 周日 做这个的最好方式是什么 我的想法是 从日期开始 我必须获取星期几 如果是工作日 那么我将添加到累加器中 如果不是 那么我不会添
  • 在mysql中的单个查询中更新多个表

    我有三个查询 我想要一个 这是我的查询 UPDATE tab1 SET a WHERE id 3 UPDATE tab2 SET b WHERE id 9 UPDATE tab3 SET c WHERE id 5 您可以尝试下面的代码 UP
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • 海量记录的bulk_create最佳实践

    I use bulk create将 1 mio 记录插入到新表中 需要 80 秒 Django 只使用一个 CPU 核心 大约 25 CPU 但没有一个核心达到 100 我相信有改进的潜力 这是代码 class Stock models
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 如何在 MySQL 中求和时间?

    正如您在图片中看到的 我有一份停机报告 显示了所选工厂在选定日期的停机时间 现在我想添加所有的值 Time Duration 列并将其显示在附近的单独显示中 TOTAL TIME DURATION 例如 在图像中 所选日期为 2015 年
  • 合并两个 MYSQL SELECT 查询[重复]

    这个问题在这里已经有答案了 可能的重复 如何将两个 Post Category 表 MYSQL SELECT 查询合并为一个 https stackoverflow com questions 12972130 how to combine
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql

随机推荐

  • Flutter报错:Android toolchain “but Android SDK not found at this location”

    Flutter报错 Android toolchain but Android SDK not found at this location 当前环境 macOS 10 13 6Android Studio 3 5Android Studi
  • matlab 点云滤波(中值、均值、高斯滤波)代码

    点云中值 均值 高斯滤波 介绍一下滤波函数 smoothdata 对含噪数据进行平滑处理 B 61 smoothdata method 为上述任一语法指定平滑处理方法 例如 xff0c B 61 smoothdata A 39 sgolay
  • 时间复杂度

    1 时间复杂度 在进行算法分析时 xff0c 语句总的执行次数T n xff09 是关于问题规模n的函数 xff0c 然后分析T n xff09 随n的变化 这样用大写的O来标记算法的时间复杂度 xff0c 称之为大O Order的简写 x
  • 解决电脑80端口被占用问题!亲测有用!!!

    方法1 xff1a 1 在桌面 xff0c 按下 WINDOW 43 R 快捷键 2 在弹出的命令行窗口下执行下面的命令 xff1a cmd xff0c 点击确定 3 输入net stop http xff0c 点击确定 xff0c 再次输
  • linux 下 常见 知识点

    1 etc resolv conf ping通baidu com DNS 域名解析服务器 xff01 该文件是DNS域名解析的配置文件 xff0c 它的格式很简单 xff0c 每行以一个关键字开头 xff0c 后接配置参数 resolv c
  • 学习51单片机经历

    学习51单片机的记录 文章目录 前言一 所使用的软硬件设备二 学习课程三 学习内容1 软件安装2 单片机基础3 真正开始学习 xff08 一 xff09 LED灯 总结修改日志 前言 提示 xff1a 只是记载本人学习51单片机的经历 xf
  • LED灯系列

    LED灯系列 本系列为stc89c52RC单片机开发板上LED灯相关操作思路和代码 点此链接转到专栏目录链接 http t csdn cn skf2j 文章目录 LED灯系列1 xff09 原理2 xff09 单个LED灯常亮3 xff09
  • Angular CLI的安装报错

    一 安装步骤 angular cli它是angular框架官方的一个构建工具 xff0c 当你使用 ng new xxx 项目名 创建一个项目时 xff0c 会自动生成项目结构 Angular CLI用于简单 xff0c 快速构建Angul
  • 最新Anaconda3的安装配置及使用教程

    安装记录参考链接 出现问题 xff1a 镜像地址无效 不知道 设置Anaconda镜像 那一步我哪里没有操作好 答 步骤错了 正确步骤 xff1a 1 先执行 conda config set show channel urls yes 生
  • Linux 环境变量:DISPLAY

    1 dbvis no x11 display variable was set but this program performed an operation which requires it solution export DISPLA
  • PostgreSQL入门-安装与基本使用(Ubuntu)

    PostgreSQL入门 安装与基本使用 xff08 Ubuntu xff09 PostgreSQL 是一个免费的对象 关系数据库服务器 ORDBMS xff0c 号称是 世界上最先进的开源关系型数据库 PostgreSQL 是以加州大学计
  • windows下的pycharm项目部署同步到Linux下的pycharm开发

    windows下的pycharm项目部署同步到Linux下的pycharm开发 一 运行平台二 SSH连接远程服务器 一 运行平台 项目部署系统 xff1a UOS 项目开发平台 xff1a windows10 IDE xff1a PyCh
  • redhat操作系统升级红帽6升级到红帽7linux升级

    本文档介绍了从 RHEL 6 到 RHEL 7 就地升级的步骤 支持的就地升级路径是从 RHEL 6 10 到 RHEL 7 9 如果您的 RHEL 系统满足以下条件 xff0c 则完全支持此 RHEL 6 到 RHEL 7 升级过程 xf
  • Kubernetes角色访问控制RBAC和权限规则(Role+ClusterRole)---好文

    基于角色的访问控制 xff08 Role Based Access Control 即 RBAC xff09 使用 rbac authorization k8s io API Group实现授权决策 xff0c 允许管理员通过Kuberne
  • 你知道abrt-hook-ccpp吗

    1 什么是abrt hook ccpp abrt也可以叫abrtd xff0c 展开应该是automatically bug report daemon xff0c 也就是自动错误报告守护进程 从字面意义就可以看出 xff0c 他是一个守护
  • Mobaxterm 使用图形界面

    redhat 7 yum install firefox xorg x11 xauth mesa libGLES devel x86 64 mesa dri drivers vi etc ssh sshd config X11Forward
  • Linux ❉ Chronyd时间同步服务器详解

    一 介绍 1 简介 集群中节点之间需要时间同步 xff0c Chronyd不依赖外部的时间服务NTP xff0c 在内部搭建时间服务器 Chrony是网络时间协议 xff08 NTP xff09 的一种实现 xff0c 是一个类Unix系统
  • Linux时间延迟平滑对时方案的分析-Ntp和Chrony的不同表现

    系列文章目录 文章目录 系列文章目录前言一 环境信息二 ntpd模式 2 1 版本信息2 2 配置ntpd对时源 2 2 1 配置ntpd服务配置 xff0c 启动ntpd服务2 3 2 查看对时情况2 3 配置ntpd客户端 2 3 1
  • keepalive实现MGR的自动切换(二)

    10 0 0 7 lemon 10 0 0 8 lemon2 10 0 0 9 lemon3 程序代码里只需写一个VIP连接数据库即可 xff0c 后面是连接在哪一台通过 xff0c keepalived的在服务端实现 xff1b 通过检测
  • mysql MGR配置keepalived

    之前写过一篇mysql8 0搭建MGR 在这里 mysql8 0配置MGR 悠游 博客园 cnblogs com 在此基础上配置keepalived 一 安装keepalived 可能会少些包 xff0c 所以配置了网络yum源 所有节点均