文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9362822.html

ProxySQL有原生的集群功能,但是这个原生的集群功能还正在试验阶段。本文会详细介绍这个原生集群的实现细节。

ProxySQL部署在哪

在拓扑结构中,ProxySQL部署在应用程序和MySQL集群的中间位置。应用程序向ProxySQL发起SQL语句,ProxySQL分析收到的SQL语句,进行匹配、重写等操作,然后路由给后端MySQL集群中的某实例。

如图:

上图描述的是多个application共用一个ProxySQL实例,但需求总是多变的。例如有些app比较繁忙,我们想要将这些繁忙的app使用的ProxySQL分离出来,让不同的application独立使用一个ProxySQL甚至一个ProxySQL集群,让那些不太繁忙的app共用一个ProxySQL。这种情形如下图:

还可以为每个app都配置一个ProxySQL,如下图。

这种配置的好处是明显的,没有单点故障,不需要额外的负载均衡,app+proxysql的节点可以轻松扩展。但是,也有缺点,各ProxySQL之间无法共享查询缓存。但无论如何,这是一种良好的配置方式。

此外,还可以使用多层结构,对ProxySQL群进行负载均衡。如下图:

上图几个注意点:

  • 负载软件层,也可以使用ProxySQL对ProxySQL集群进行负载均衡,因为ProxySQL自身就是一个代理,而且是专门负责MySQL协议的代理。
  • 在负载均衡层,要保证事务持久,不能让一个事务内的不同语句路由到不同的目标上,也就是说负载的目标是"有状态"的。因此在使用lvs/haproxy时,必须想办法保证事务持久性。通用性方法是,从多个ProxySQL节点中取出一个作为逻辑写节点(可以有backup),haproxy/lvs通过端口(也可以用户名,但通常采用端口)代理的方式,强制将所有写语句路由到这个固定的ProxySQL节点上。
  • 而通过ProxySQL来代理ProxySQL集群,因为ProxySQL内部支持事务持久(在mysql_users表中字段transaction_persistent控制持久性)。

综上分析,通过lvs/haproxy负载ProxySQL或者负载MySQL、Galera、组复制等,实非良策。而ProxySQL因其MySQL协议感知,完全能胜任这样的负载工作。

无论如何,当有多个ProxySQL实例构成一个集群时,需要解决的问题是:如何保证ProxySQL的可用性、如何同步集群中各ProxySQL实例的配置。

目前ProxySQL原生集群功能还在研究当中,在原生集群(ProxySQL Cluster)功能中,使用master、候选master和slave的概念,master和候选master负责投票,负责写入、更改配置,并同步到集群中的其它节点。master故障后,还可以从候选Master中选举一个新的master,如下两图。这些特性能保证ProxySQL集群的可用性、伸缩性。

但是现在,在试验阶段步入稳定可用阶段之前,如何保证ProxySQL的可用性?只能借助第三方工具实现,例如:

  • keepalived保证第一层次的代理高可用,缺点是可能会浪费一台机器(除非使用VRRP多实例的互为主从结构);
  • ZooKeeper,ZooKeeper实现的分布式锁服务,可以人为进行master选举,从而协调整个ProxySQL集群。

这两种方案的拓扑图如下:

至于如何保证配置文件的同步性,其实这个不是大问题,只要通过管理工具,集群内的所有ProxySQL实例都以完全相同的配置启动,并以批量管理工具(如ansible/salt)来管理各实例,那么配置同步问题就没有多大问题。

但是需要注意,有些时候ProxySQL内部会自动执行load to runtime,例如某ProxySQL实例发现某个MySQL Server节点拖后腿(replication lag),会临时避开这个节点,这时会在内部更改配置并load to runtime。这样内部自动更改的配置如何同步到其它ProxySQL实例上去?其实这类内部更改无需同步,因为所有ProxySQL实例都在监控着后端,一个ProxySQL实例发现了问题,其它ProxySQL实例在极短的时间内也一定会发现问题并自动重新配置。

关于ProxySQL的集群拓扑,大概抛完砖了。经过上面的初步分析,ProxySQL可以结合app部署,可以部署单层ProxySQL群,可以部署多层ProxySQL群,还可以相互结合起来部署。可见,ProxySQL的部署方式非常灵活,能实现的需求也很有弹性,具体如何实现,就看自己的了。

ProxySQL原生集群

关于ProxySQL的原生集群功能,我已将官方手册部分进行翻译,ProxySQL Cluster。该手册中已经非常详细地解释了ProxySQL集群的实现细节,所以这里就不多做解释了。

ProxySQL(13):ProxySQL集群的更多相关文章

  1. OEMCC 13.2 集群版本安装部署

    之前测试部署过OEMCC 13.2单机,具体可参考之前随笔: OEMCC 13.2 安装部署 当时环境:两台主机,系统RHEL 6.5,分别部署OMS和OMR: OMS,也就是OEMCC的服务端 IP ...

  2. kubeadm安装kubernetes 1.13.1集群完整部署记录

    k8s是什么 Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统.在 Docker 技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提 ...

  3. Ubuntu 13 Zookeeper 集群配置

    一. 目标 在Linux集群搭建Zookeeper集群,并配置管理Web管理系统. 二. 先决条件 本文档中基于VirtualBox Ubuntu Server 13.04 虚机(启动SSH服务器)构 ...

  4. K8S从入门到放弃系列-(13)Kubernetes集群mertics-server部署

    集群部署好后,如果我们想知道集群中每个节点及节点上的pod资源使用情况,命令行下可以直接使用kubectl top node/pod来查看资源使用情况,默认此命令不能正常使用,需要我们部署对应api资 ...

  5. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

  6. cdh 5.13 hadoop 集群IP变更详细步骤

    1.因一些不可抗因素,集群IP变更. 修改CM的数据库IP地址 /etc/cloudera-scm-server/db.p... 2.修改每个主机的hosts列表 3.修改SCM数据库的hosts表中 ...

  7. 13.1SolrCloud集群使用手册之Collections API

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.创建collection name:指明collection名字 router.name:指定路由策略,默 ...

  8. ActiveMQ-5.13.0集群

    ActiveMQ集群介绍 ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave(ActiveMQ5.8版本已不可用 ...

  9. 13.4SolrCloud集群使用手册之CRUD

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ Student.java package cn.ljh.ssm.test; import org.apache ...

  10. 13.3SolrCloud集群使用手册之Zookeeper指令

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.upconfig java -classpath .:/home/solr/cloud/lib/* org ...

随机推荐

  1. input函数的使用

    input()函数的介绍 作用:接受来自用户的输入 返回值类型:输入值的类型为str 值得存储:使用=对输入得值进行存储 input()函数的基本使用 name = input('What's you ...

  2. TCP协议调试工具TcpEngine V1.3.0使用教程

    简介   这里说的TCP协议调试定义是在开发长连接TCP协议应用时,为了验证代码流程或查找bug,需要与对端交互数据过来,当需要时可以暂停发送:单条发送:跳过发送:正常发送:发送时修改数据等.   T ...

  3. VP视频结构化框架

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  4. CF1615G Maximum Adjacent Pairs

    \(CF1615G\) Description 给定一个数列 \(a\),你需要将所有 \(a_i=0\) 的位置填上一个 \(1\sim n\) 的正整数,使得数列的「值」最大. 数列的值定义为满足 ...

  5. 3.26省选模拟+NOI-ONLINE

    今日趣闻: 这三个人都是同机房的,卡最优解(大常数选手不参与)....以至于最优解第一页都是我们机房的(有图为证,共三人) $NOI\ online$ $T1$ 首先模拟一遍记录这个点当前单调栈前面位 ...

  6. 万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文转载自微信公众号"老叶茶馆" MGR整个集群挂掉后,如能 ...

  7. 深入Synchronized各种使用方法

    深入学习Synchronized各种使用方法 在Java当中synchronized通常是用来标记一个方法或者代码块.在Java当中被synchronized标记的代码或者方法在同一个时刻只能够有一个 ...

  8. BTDetect用户协议和技术支持

    1.巴蜀生物科技检测用户协议 2.基于机器学习的生物检测项目 3.BTDetect用户手册和技术支持

  9. Redis 06 哈希

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 哈希就是 ke ...

  10. Spring源码 16 IOC refresh方法11

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...