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. oracle入门之分页查询

    oracle的分页查询共三种方法 1.根据ROWID来分页(速率一般) SQL>select * from emp where rowid in (select rid from (select ...

  2. MySQL父子节点查询

    MySQL父子结点递归查询 表结构: CREATE TABLE `agency` ( `id` ) NOT NULL COMMENT '编号', `name` ) NOT NULL COMMENT ' ...

  3. 日积月累--线程中断interrupt()方法

    线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们 ...

  4. python3 进行字符串、日期、时间、时间戳相关转换

    1.字符串转换成时间戳 2. 日期转换成时间戳

  5. beifen

    Comparison of Models for Predicting the Outcome of Craniocerebral Injury by Using Machine Learning   ...

  6. HTML表格布局

    1         浏览器:接受浏览者的操作,然后帮浏览者去web服务器请求网页内容,然后展现成人人眼能够看得懂的可视化页面的软件. 2         IE是浏览器的一种.<ietest工具& ...

  7. java+jenkins+testng+selenium+ant

    1.安装jdk7以上2.http://mirrors.jenkins-ci.org/windows/latest 下载最新的war包3.cmd命令在war包目录下执行:java -jar jenkin ...

  8. 强大的css3库

    http://www.html5tricks.com/demo/css3-animate-css/index.html 关注微信小程序

  9. web页面空白,无任何显示

    解决前: 解决后: 原因:HTML代码有误,没有关闭script标签. 解决方法:加</script>

  10. 为UITextField增加MaxLength特性

    iOS 实现方案 在 HTML 的世界里,输入框天生就有 MaxLength 属性,可以限制用户输入的最大字符数量 可惜 iOS 上对应的 UITextField 并没有这样方便的属性,只有自己动手来 ...