orchestrator 提供了"forget-cluster"HTTP接口用于下线集群。该接口可以根据提供的参数,推测可能的集群名cluster name,然后使用cluster name下线集群。其中cluster name在orchestrator的格式是集群主库的hostname和port的组合:hostname:port。例如,一个集群主库的hostname为waimai-mysql-001,port为3308,则集群的cluster name为waimai-mysql-001:3308

该接口推测cluster name的设计,是为了方便使用,用户可以只提供一个简短的参数,就可以下线集群。
但这样设计也存在一定隐患的。

先来看下"forget-cluster"的推测集群名cluster name的过程。

推测cluster name

假设用户提供的参数是clusterHint。cluster name查找过程如下:

  • 判断clusterHint是不是cluster name,如果是,直接返回这个cluster name,否则,继续;
  • 判断clusterHint是不是集群别名cluster alias,如果是,进而得到cluster name并返回,否则,继续;
  • 判断clusterHint是不是包含DB实例的hostname,如果是,进而得到cluster name并返回,否则,继续;
  • 判断clusterHint是不是包含DB实例hostname的一部分,如果是,进而得到cluster name并返回,否则,返回错误。

存在的问题

从上面cluster name的推测过程看,如果用户提供的参数clusterHint是某个集群A的cluster alias,同时又是集群B中的DB实例的hostname或者hostname的一部分,当集群A已下线的情况下,调用"forget-cluster"接口,就会将集群B下线,但这是超出预期的。

例如,

集群 集群别名 DB实例
A test waimai-mysql-test
B hotel hotel-mysql-test

解决方案

方案一

尽量不使用cluster alias作为参数,而是使用cluster name,可以在一定程度上避免这个问题。但不能完全解决这个问题。

方案二

新增加一个接口,严格限制参数是cluster name或cluster alias,这样可以完全解决这个问题。

orchestrator HTTP接口forget-cluster误下线集群问题的更多相关文章

  1. ProxySQL Cluster 高可用集群环境部署记录

    ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...

  2. ProxySQL Cluster 高可用集群 + MySQL MGR环境部署 (多写模式) 部署记录

    文章转载自:https://blog.51cto.com/u_6215974/4937192 ProxySQL 在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数 ...

  3. Redis Cluster高可用集群在线迁移操作记录【转】

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  4. Redis Cluster高可用集群在线迁移操作记录

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  5. 近千节点的Redis Cluster高可用集群案例:优酷蓝鲸优化实战(摘自高可用架构)

    (原创)2016-07-26 吴建超 高可用架构导读:Redis Cluster 作者建议的最大集群规模 1,000 节点,目前优酷在蓝鲸项目中管理了超过 700 台节点,积累了 Redis Clus ...

  6. mysql innodb cluster 无感知集群

    MySQL 8.0.12 innodb cluster 高可用集群部署运维管理手册 Innodb cluster 原理介绍 Innodb cluster  利用组复制的 pxos 协议,保障数据一致性 ...

  7. 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数

    超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...

  8. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  9. 构建 MariaDB Galera Cluster 分布式数据库集群(二)

    MariaDB的安装 构建 MariaDB Galera Cluster之前,首先安装MariaDB,本文使用的版本是10.1 1.环境准备 主机: MariaDB01(192.168.56.102) ...

随机推荐

  1. js 判断变量是否为空或未定义

    判断变量是否定义: if(typeof(hao) == "undefined"){ //未定义 }else{ //定义 } 判断变量是否为空或NULL,是则返回'', 反之返回原对 ...

  2. 斐讯K2 22.5.9固件刷华硕固件实测教程

    斐讯K2最新的固件是V22.5.9.163这个版本是锁死了,不能刷机的,而且不能降级到原来的可以刷机的老版本固件,也就不能刷第三方固件了,怎么破呢?下面就教大家怎么降级刷机到V22.4.2.8固件.  ...

  3. 马凯军201771010116《面向对象与程序设计Java》第十一周学习总结

    一.理论知识部分 第九章  集合 1.数据结构介绍:线性结构:线性表,栈,队列,串,数组,文件.非线性结构:树,图. 散列表:又称为哈希表. 散列表算法的基本思想是:以结点的关键字为自变量,通过一定的 ...

  4. axis调用Web服务报axis unexpected wrapper element{XXXX}XXX错误的解决

    使用axis调用WebService时报错:axis unexpected wrapper element{XXXX}YYY .... expected {XXXX}. 经查,XXXX为wsdl文件中 ...

  5. [Hive]新增字段(column)后,旧分区无法更新数据问题

    问题描述: 实际应用中,常常存在修改数据表结构的需求,比如:增加一个新字段. 如果使用如下语句新增列,可以成功添加列col1.但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区 ...

  6. Cookie Manager

    https://github.com/Rob--W/cookie-manager 修改饼干获取VIP标识

  7. 实际操作中遇到的问题--Django中查看已安装的包的相关命令

    pip freeze  --------查看已经安装的包 pip uninstall 安装包名 ---------卸载已安装的包 pip install 安装包名--------安装包

  8. 浅谈jquery事件命名空间

    什么是jquery的事件命名空间? 先看如下简单代码: $("#btn").on("click.name1.name2",function(){ console ...

  9. select 下拉选择自动到textarea框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Arcgis API for JS——普通分屏联动及二三维联动

    对于二三维联动,有多种方法进行实现,当时旧项目使用了当时能掌握的一种写法,在技能提升了这么多后当然要对这些写法做一个总结. 一.通过监听View上的鼠标事件变化来进行分屏联动(同一坐标系) (同理可以 ...