详细记录一次stampstime字段引起pxc集群脑裂

事故回顾

运维执行导入sql,导入后收到master2和master3节点宕机的报警;
检查集群状态发现master1进入初始化模式,无法读写;master2和master3已经下线;

处理方法

分别进入3个master节点,发现master2和master3两个节点已经退出;
master1节点可以进入,使用命令show global status like “wsrep_local_state_comment”;查看发现集群进入Initialized状态,集群不能读写;
重启master1节点,重启完成后,节点恢复读写,业务恢复正常;
逐个启动master2和master3节点,恢复集群的状态;
注1:master2和master3数据同步时可能会存在锁表造成集群不可访问,所以建议在业务低峰时恢复业务;
注2:如果master2和master3下线时间过长,可能触发全量同步;
注3:建议将数据库的wsrep_sst_method参数值改为xtrabackup,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup lock);

事故原因

业务需求从beta导一个表结构到生产,运维导出时漏加了–skip-tz-utc参数,导致使用了mysqldump的默认值–tz-utc;
导出的sql中会增加一个将session改为utc时区(+00:00)的设置,并将timestamp字段的时间同步减8小时(由+8:00时区改为+00:00);
将这个sql导入pxc集群时,master1导入成功。当这个操作同步到另外2个pxc节点时,session中的时区设置并不会同步,造成导入sql的时间比实际少了8小时;
我们导入的表默认时间为1970:08:01,时间减少后变成了1970:00:01,超过了cts时区(+08:00)timestamp字段允许的最小值(1970:08:00),建表失败;
master2和3数据跟master1不一致,节点下线。master1发现只有自己最后1个节点存在,认为集群失效,变为初始化状态,pxc集群无法读写;

后续处理与防范

使用脚本来操作数据库的导入导出,避免人为因素导致集群异常;
排期配置和验证允许脏读,让集群出问题时,数据库至少能提供查询服务。这个需要考虑业务是否支持;

Original: https://www.cnblogs.com/ly6161/p/xiang-xi-ji-lu-yi-cistampstime-zi-duan-yin-qipxc-j.html
Author: 打个酱油6161
Title: 详细记录一次stampstime字段引起pxc集群脑裂

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610853/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Golang 实现 Redis(5): 使用跳表实现 SortedSet

    本文是使用 golang 实现 redis 系列的第五篇, 将介绍如何使用跳表实现有序集合(SortedSet)的相关功能。 跳表(skiplist) 是 Redis 中 Sort…

    Linux 2023年5月28日
    083
  • 【Linux进程间通信】共享内存的使用

    背景 最近需要开发一个测试程序,接受Tester端的测试指令,执行一条条外设的测试用例,执行完成后将测试数据的结果上报,上报方式未定,考虑到耦合和配套问题,决定采用共享内存机制,设…

    Linux 2023年6月13日
    089
  • Markdown基础语法

    Markdown语法 ## 欢迎使用Markdown编辑器 你好! 这是你第一次使用 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下M…

    Linux 2023年6月14日
    098
  • Python中class内置方法__init__与__new__作用与区别探究

    最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new_…

    Linux 2023年6月6日
    074
  • [20220304]使用gdb完成各种进制转换.txt

    [20220304]使用gdb完成各种进制转换.txt –//一般使用gdb调试跟踪程序,centos 7以上版本gdb支持管道,可以使用gdb p命令实现10,16进…

    Linux 2023年5月27日
    086
  • Redis-cli连接

    原文:https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713004.html 介绍使用同一VPC内弹性云服务器ECS上…

    Linux 2023年5月28日
    098
  • 设置Docker的默认文件存储位置

    对于windows下,直接修改docker desktop界面的配置项目。对于rocky linux下面,对应的配置文件存储在: vim /etc/docker/daemon.js…

    Linux 2023年6月6日
    064
  • UWP 在XAML设计器中使用设计时数据

    1. 功能解释 有些布局没有数据很难进行可视化。 在本文档中,我们将审查从事桌面项目的开发人员可在 XAML 设计器中模拟数据的一种方法。 此方法是使用现有可忽略的”d…

    Linux 2023年6月13日
    084
  • Linux下 lsof 命令详解

    lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息,我们都知道,在Linux中,一切皆文件,lsof命令可以查看所有已经打开了的文件,比如: …

    Linux 2023年6月13日
    085
  • PHP 通过两个日期计算年龄

    参数:$birth_year:出生年份;$birth_month:出生月份;$birth_day:出生日 function getAgeByBirth($birth_year,$b…

    Linux 2023年6月7日
    087
  • linux常用指令记录

    给目标文件夹执行权限:chmod -R 777 html du -sh . [对当前目录下所有的目录和文件的大小进行汇总,-s表示汇总,-h表示以KB, MB, GB, TB格式进…

    Linux 2023年6月6日
    0112
  • LINUX系统虚拟机环境的安装

    安装VM和Centos Step 1 去BIOS里修改设置开启虚拟化设备支持 设置BIOS: 1.开机按F2 、F12 、DEL 、ESC 等进入BIOS ,一般来说可以看屏幕的左…

    Linux 2023年6月7日
    080
  • 迭代

    1.迭代的概念: 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次”迭代”,而每一次迭代得到的结果会作为下一次迭代的…

    Linux 2023年6月8日
    098
  • linux用户身份与文件权限

    tips:可以将安装好的系统设置为一次快照,这样即便系统彻底崩溃了,也可以在5秒的时间内快速还原出一台全新的系统,而不用担心数据丢失 1、用户身份和能力 Linux系统的管理员之所…

    Linux 2023年5月27日
    082
  • MySQL之视图、触发器、事务、索引及其他知识补充

    一、视图 视图是将SQL语句的查询结果当做虚拟表实体化保存起来,以后可以反复使用 create view teacher2course as select * from teach…

    Linux 2023年6月14日
    079
  • shell编程-杨辉三角简单实现

    shell编程-杨辉三角问题: 概述:中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。杨辉三角形…

    Linux 2023年6月7日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球