应急预案:专有云V3环境中xuanyuan数据库存在未提交事务的修复方法

应急预案:专有云V3环境中xuanyuan数据库存在未提交事务的修复方法

更新时间:2020-06-29 13:48:52

1. 概述

本文主要介绍在专有云V3环境中,xuanyuan数据库存在未提交事务的修复方法。

1.1. 适用范围

  • 专有云V3企业版,SLB
    说明:适用于专有云V3.0.0~V3.7.1环境,包含V3.0.0和V3.7.1环境。

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L1(一线驻场工程师)
  • 临时或固化方案:临时
  • 操作复杂度:低
  • 预估执行时长:60分钟
  • 业务影响:否
  • 风险等级:低
    说明:按步骤逐台操作无风险。

2. 问题描述

天基控制台上SlbAg#服务角色频繁出现未达终态,然后自动恢复,业务侧调用SLB API接口变配时发生报错。

3. 解决方案

3.1. 环境检查

  1. 登录xuanyuan数据库,关于如何登录xuanyuan数据库请参见专有云环境如何登录xuanyuan数据库
  2. 执行以下SQL语句,查看未提交的事务。
    select * from information_schema.innodb_trx\G;
    系统显示类似如下,显示有73条未提交的事务,业务侧调用SLB API执行变配时,会存在阻塞情况。
    *************************73. row*******************
    trx_id: 421148987471976
    trx_state: RUNNING
    trx_started: 2019-11-18 20:54:09
    trx_requested_lock_id: NULL
    trx_wait_started: NULL
    trx_weight: 0
    trx_mysql_thread_id: 10243856
    trx_query: NULL
    trx_operation_state: NULL
    trx_tables_in_use: 0
    trx_tables_locked: 0
    trx_lock_structs: 0
    trx_lock_memory_bytes: 360
    trx_rows_locked: 0
    trx_rows_modified: 0
    trx_concurrency_tickets: 0
    trx_isolation_level: READ COMMITTED
    trx_unique_checks: 1
    trx_foreign_key_checks: 1
    trx_last_foreign_key_error: NULL
    trx_adaptive_hash_latched: 0
    trx_adaptive_hash_timeout: 10000
    trx_is_read_only: 0
    trx_autocommit_non_locking: 0
    73 rows in set (0.01 sec)

3.2. 实施步骤

逐台重启slb-control-master容器上的服务,操作如下:

  1. 登录天基控制台,在Project框中过滤slb,单击slbClustet-A-XXXX集群右侧的集群运维中心,选择slb-controller服务和SlbControlMaster#服务角色,单击机器右侧的Terminal,登录对应的机器。
  2. 先登录到一个slb-control-master容器,依次执行以下命令,重启slb-control-master服务。
    sudo /etc/init.d/slb-control-master  status
    sudo /etc/init.d/slb-control-master  disable
    sudo /etc/init.d/slb-control-master  restart
    sudo /etc/init.d/slb-control-master  enable
    sudo /etc/init.d/slb-control-master  status
  3. 执行完成确认容器到达终态后,再登录另外一个slb-control-master容器,执行重启操作。
  4. 登录天基控制台,在Project框中过滤slb,单击slbClustet-A-XXXX集群右侧的集群运维中心,选择slb-controller服务和SlbMonitorMaster#服务角色,单击机器右侧的Terminal,登录对应的机器。
  5. 先登录到一个slb-monitor-master容器,依次执行以下命令,重启slb-monitor-master服务。
    sudo /etc/init.d/slb-monitor-master restart
    sudo /etc/init.d/slb-monitor-master status
  6. 执行完成确认容器到达终态后,再登录另外一个slb-monitor-master容器,执行重启操作。

3.3. 结果验证

登录xuanyuan数据库,执行以下SQL语句,输出结果为空,说明SLB管控接口调用没有阻塞情况。

select * from information_schema.innodb_trx order by trx_started limit 2\G;

4. 回滚方案

管控Docker容器服务均双节点部署,按步骤逐台重启操作,无需回退。