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优化总结

    避免全局查找 在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些 function search() {    //当我要使用当前页面地址和主机 ...

  2. makefile笔记10 - makefile 函数库文件

    函数库文件也就是对 Object 文件(程序编译的中间文件)的打包文件.在 Unix 下,一般是由命令"ar"来完成打包工作. 一.函数库文件的成员 一个函数库文件由多个文件组成. ...

  3. 马凯军 周强 张季跃《面向对象与程序设计 Java》第十四周学习总结

    实验十四  Swing图形界面组件 实验时间 20178-11-29 一.知识部分 1.模型-视图-控制器模式 模型:储存内容 视图:显示内容 控制器:处理用户输入 2.布局管理 2-1.流布局管理器 ...

  4. Sharepoint 2016 配置FBA(一) 创建Membership数据库

    在Sharepoint 2016上配置FBA(forms based authentication)的过程和Sharepoint 2013一样. 第一步:创建Membership数据库. 为了存放所有 ...

  5. Wpf binging (二) 集合绑定

    除去简单控件的数据绑定,还有集合控件的数据绑定,一下示例 这发现 source 变成了 itemsSource   Path 变成了   DisplayMemberPath itemsSource:代 ...

  6. node,npm,vue的全局升级

    pc环境:windows 10, OS:win32, Arch:x64 1.升级node.js到最新 ⑴.别人成功的方法: . 第一步 npm -g install n //此处可以加上 --forc ...

  7. Python 查看线程的进程id

    import os from threading import Thread # from multiprocessing import Process def f1(n): print('1号',o ...

  8. Unity存储路径

    一.在项目根目录中创建Resources文件夹来保存文件 可以使用Resources.Load("文件名字,注:不包括文件后缀名");把文件夹中的对象加载出来注:此方可实现对文件实 ...

  9. Autolayout Breakpoints

    articles archives team Autolayout Breakpoints Auto layout has become a crucial tool for iOS and OS X ...

  10. 监控网络带宽 使用speedtest-cli命令

    1.监控网络带宽 使用speedtest-cli命令 l 安装命令: yum install python-pip –y pip install speedtest-cli l 运行命令: speed ...