基于 Docker 的 RDS,我们是这样做的
vnty2764
8年前
<h2><strong>一、传统DB的瓶颈及问题</strong></h2> <h3><strong>1.1、传统数据库的创建主要分以下几步:</strong></h3> <ol> <li> <p>业务方&用户和DBA申请,并附上业务量和需要的资源等信息</p> </li> <li> <p>DBA根据需求,选择相应的物理资源,并安装数据库</p> </li> <li> <p>DBA交付数据库,并提供数据库连接信息如:IP、端口等</p> </li> <li> <p>业务方&用户初始化数据库,导入业务数据,然后找DBA建立访问指定库或者表的读写、只读等权限的连接账号</p> </li> </ol> <p>如下图:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/c33426a1aee83543a41731bbde995b3c.jpg"></p> <p>可以看出几乎每一步都需要DBA的参与,在业务量小的情况下,并没有什么问题。但是当业务增量越来越大,每天有几十个甚至上百个数据库申请时,DBA的负担就会很大,而且影响业务上线速度。</p> <h3><strong>1.2、数据库为什么要平台化</strong></h3> <p>DBA每天都会遇到各个业务线的种种需求,每个业务线都会认为自己的需求重要,总会催DBA尽快完成。而DBA也是人,需要时间一个个的去完成这些需求。而这些需求其实90%以上都是重复性操作,很需要一个平台来把这些90%的重复任务用逻辑代码来实现,让用户或者DBA只需要点一点按钮就可以完成。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/775f865d3a76b8b92127d357fe7b201a.jpg"></p> <h2><strong>二、RDS发展</strong></h2> <p>随着IaaS、PaaS平台的流行,数据库也从传统数据库服务逐渐转向了云平台数据库服务化,在私有云+公有云模式下,越来越多新技术力量革新产生了更多优质化的服务。RDS做为典型的在线数据库云服务,具有资源弹性伸缩,稳定性,易用性等特点。多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使企业用户能更加专注于应用开发和业务发展。为企业带来了成本核算上的收益,降低综合成本(硬件成本+管理成本)。</p> <ul> <li> <p>易用性</p> </li> </ul> <p>通过web方式管理数据库,能够短时间进行数据库的快速部署,将完整的数据库方案提供给用户的同时,解决繁杂的数据库维护成本,使得业务线能更高效的解决费时费力的重复性维护管理工作。</p> <ul> <li> <p>灵活性</p> </li> </ul> <p>RDS服务与用户自身搭建的数据库使用方式相同,对外IP+端口方式提供链接,能够与云服务内ECS、SLB、GCE等服务结合提供更好的服务。</p> <ul> <li> <p>水平扩展能力</p> </li> </ul> <p>RDS应对业务量大规模变化时,节点内能够快速进行硬件资源调整,节点间集群内也能快速的进行容量伸缩。有效的解决设备利用率偏低的问题,在不影响业务情况下进行动态迁移。</p> <ul> <li> <p>高可用性</p> </li> </ul> <p>RDS服务对外提供不同架构的可用性保障,在主业数据务节点失去响应能力的时候,能有相应的其他集群节点或从节点进行业务快速切换,防止因单点造成的业务损失。</p> <ul> <li> <p>云化</p> </li> </ul> <p>RDS服务是在原有传统关系型数据库服务发展的基础上,结合目前主流的云计算虚拟化等技术,将数据库管理实现成一键式、自动化、 资源池、在线集中管理等方式,减少很多繁杂管理操作,同时能够快速更加便捷的操作和使用数据库。</p> <h2><strong>三、乐视RDS</strong></h2> <h3><strong>3.1、诞生</strong></h3> <p>3.1.1、为什么会有乐视RDS</p> <p>在日常管理传统数据库的时候我们遇到了很多问题,比如:</p> <ul> <li> <p>乐视这几年快速发展的同时,业务对数据库的需求量也是越来越大,最开始的时候业务库还是人工或者人工+脚本的方式创建。业务紧急上线,数据库的搭建时间就是个瓶颈。</p> </li> <li> <p>由于安全原因或者权限问题,用户需要紧急修改数据库账号密码,但由于联系不到DBA,不能及时修改,可能造成数据泄露、丢失。</p> </li> <li> <p>用户想知道当前的数据库状态或者一些性能指标,而此时DBA在忙着处理线上问题,不能及时提供等等。</p> </li> </ul> <p>我们就开始思考,是不是需要作出一套乐视RDS,在业务方或者用户需要数据库资源的时候,只要登录平台轻轻一点数据库创建按钮,即刻使用。我们只提供基础的数据库服务平台,并负责其稳定性和可靠性。而用户有自己数据库大部分管理权限,让用户对数据库的操作脱离DBA,并且了解自己数据库的实时状态。这样既减轻了DBA的压力,又带来了更高的效率。</p> <p>最终乐视RDS的雏形就建立了起来,乐视RDS基于docker虚拟化可以限制硬件层(CPU、内存、磁盘io)等资源,将同属于一个物理集群之间资源进行隔离。有效控制资源环境稳定性并提高资源利用率。</p> <p>从2014年开始我们就尝试使用Docker容器技术,把容器作为RDS数据库集群各个节点运行的基础环境,这在国内可以说是比较早使用此种架构的互联网公司。</p> <p>3.1.2、为什么会选用Docker技术</p> <p>我们使用Docker主要的原因有:</p> <ul> <li> <p>开源程序,可定制开发</p> </li> <li> <p>快速部署</p> </li> <li> <p>灵活</p> </li> <li> <p>丰富可定制的镜像资源</p> </li> <li> <p>资源隔离</p> </li> <li> <p>轻量,满足数据库运行环境即可,不会占用多余的系统资源</p> </li> </ul> <p>3.1.3、优势何在</p> <p>对应云端的数据库来说,其实用户最想看到的就是,在申请完数据库后,立刻就能使用,并自主管理,而乐视RDS完全可以满足:</p> <ul> <li> <p>快速</p> </li> <li> <p>稳定</p> </li> <li> <p>可控</p> </li> <li> <p>SSD的加入,IO不再是数据库瓶颈</p> </li> <li> <p>无需热备,所有节点都在激活状态,都为多主结构</p> </li> <li> <p>应用可以从集群中任意节点进行读写</p> </li> <li> <p>读写可水平扩展</p> </li> <li> <p>可线上动态添加、删除数据节点</p> </li> <li> <p>扩展,缩减数据节点对客户端透明</p> </li> </ul> <p>3.1.4、遇到的问题</p> <p>在乐视RDS这几年的发展过程中,其实遇到了很多的困难和问题,下面大概说几点:</p> <ul> <li> <p>数据库的版本和架构选型</p> </li> </ul> <p>根据云平台的特性,我们最终选择了基于Percona Xtradb Cluster的数据库集群架构,并对其进行了一系列优化,使其在容器环境下更稳定的运行,我们内部命名为Mcluster。</p> <ul> <li> <p>数据库账号权限的管控</p> </li> </ul> <p>对数据库账号的管控很重要,我们严格控制数据库账号的权限,使之只能在指定的权限下,干相应的事。</p> <ul> <li> <p>数据库物理资源隔离限制</p> </li> </ul> <p>因为我们的数据库基于Docker技术,所以物理资源的隔离变得尤其重要,其中也遇到了很多问题。现在我们已经可以隔离包括CPU、内存、磁盘IO等物理资源</p> <ul> <li> <p>使用入门</p> </li> </ul> <p>能更好的把用户了解并熟练使用乐视RDS这其实是很难的一件事,因为内部用户的观念里还是认为数据库要DBA管理,不关他们什么事。</p> <p>我们经常和用户进行交流,收集他们初次使用乐视RDS中遇到的各种问题,并完善我们的帮助中心和Web页面使用向导。</p> <ul> <li> <p>备份恢复</p> </li> </ul> <p>数据库备份重要性不言而喻,在硬件损坏、数据丢失、误删除等等的很多灾难性的时刻,如果做了充分的备份都可以保证数据的全量恢复,最大限度的挽救丢失的数据。</p> <p>由于数据库集群的特性,数据是冗余三份或者更多的,备份功能我们也是经过了几个版本的迭代,正常业务每天都会有备份,在部分重要业务上可以开启实时备份功能。</p> <ul> <li> <p>全局数据库性能状态掌控</p> </li> </ul> <p>随着数据库的总量越来越大,对所有数据库性能的掌控变得尤其重要,为了实时了解数据库运行状态,我们定制了一系列的指标来完成此目的。</p> <ul> <li> <p>预警维度制定</p> </li> </ul> <p>预警维度的制定这个环节是我们最头痛的,由于前期定制的告警维度过于敏感,导致告警量很大,对于相关运维人员来说是个噩梦。</p> <p>最终经过多次讨论,修改了很多不必要的预警维度,使现在的乐视RDS预警精确性大大提高。</p> <p>经历了上面的种种问题和阻碍,乐视RDS终于横空出世。</p> <h3><strong>3.2、发展和现有规模</strong></h3> <p>3.2.1、乐视RDS主要发展大事记如下</p> <p>乐视RDS现在主要还是给乐视集团内部各个子生态提供数据库服务,线上已经为900+的业务线提供数据库服务,3000+的容器规模,乐视RDS在集团内部数据库使用率已经达到60%以上。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/9139aff60a612dc4c016a2e6511b5c1a.jpg"></p> <p>3.2.2、RDS主要架构发展历史</p> <p>RDS架构1.x:单实例多Database+LVS( <em>起步</em> )</p> <p>RDS架构2.x:PXC+Docker+Gbalancer ( <em>发展</em> )</p> <p>RDS架构3.x:(PXC or PostgreSql or MariaDB or otherDB)+Docker+Gbalancer( <em>多元化</em> )</p> <ul> <li> <p>1.x主要是 <strong>起步</strong> 阶段,我们选择在每个物理机上安装单实例库,并在上面创建多个database,通过LVS进行负载,但使用中发现这种架构并不适合云平台的理念。</p> </li> <li> <p>2.x主要是 <strong>发展</strong> 阶段,我们选择了PXC(Perconal Xtradb Cluster)数据库集群,运行在Docker上,并使用Gbalancer做数据库代理。</p> </li> <li> <p>3.x主要是 <strong>多元化</strong> 阶段,经过前面两阶段大的架构演变,我们最终的目的是把平台当成插槽(既提供各种通用的接口)。不限于MySQL,任何数据库都可以插到平台上,进行创建、管理等一些列操作,为用户提供稳定、快捷、易维护的数据库服务。如下图:</p> </li> </ul> <p style="text-align: center;"><img src="https://simg.open-open.com/show/4b9ec6ca4f6fbe361aeffa724b9432fe.jpg"></p> <p>3.2.3、乐视RDS为各个子生态提供数据库服务</p> <p>乐视RDS现在已经为乐视各个子生态提供稳定、高效的数据库服务,并根据业务方使用中反馈的各种需求和问题,完善着乐视RDS。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/ed6a44f7c4878ec1199a6a8c92522c31.jpg"></p> <h3><strong>3.3、乐视RDS整体构架图</strong></h3> <p style="text-align: center;"><img src="https://simg.open-open.com/show/9ab84184eaba24c128c5b244e44426cd.jpg"></p> <p>乐视RDS整体架构主要分为以下几大部分:</p> <p>1) Database层为具体的数据库业务,和MySQL选择存储引擎一样,Database层也秉承着可插拔特性。既可以是MySQL,也可以是PostgreSQL等任何数据库(我们现在使用的为MySQL)</p> <p>2) Matrix层负责前端数据库创建、管理、监控、维护和相关资源调度</p> <p>3) Data Analysis层主要负责数据库日志的分析还有用户行为分析</p> <p>4) BeeHive层负责组件服务的调度管理</p> <h3><strong>3.4、乐视RDS基本使用示意图</strong></h3> <p><img src="https://simg.open-open.com/show/e484bcfdd2e530089332790b11dfe667.jpg"></p> <ul> <li> <p>业务用户:可以通过Matrix云平台对数据库,进行创建、扩容缩绒、权限配置、性能查看、用户资源管理等等的一系列操作。</p> </li> <li> <p>DBA&平台管理员:有更高的权限管理所有数据库集群,并可以根据收集过来的日志分析数据库性能、用户行为等等。</p> </li> <li> <p>业务服务器:会通过本地安装的Gbalancer中间件,来访问相应的数据库。</p> </li> <li> <p>ES集群:会收集Mcluster日志数据、容器里的相关日志,以供进行业务分析。</p> </li> <li> <p>物理资源池:根据Mcluster的配置需求,在物理资源池里获取相应的资源,而且当物理资源不足的时候,可以动态的添加物理服务器到物理资源池里,来扩充整个物理资源池。</p> </li> </ul> <h3><strong>3.5、弹性伸缩</strong></h3> <p>乐视RDS的弹性伸缩是基于 <strong> <em>“大资源池的概念”</em> </strong> ,所有物理服务器资源在整体看来其实一个大资源池,数据库可以在这个池子里自由的扩容、缩容、迁移。</p> <p>3.5.1、弹性伸缩的主要特点</p> <p>扩容&缩容</p> <p>乐视RDS可以随着业务的瞬时增长,在业务高峰时自动扩容(包括节点数量、CPU、内存、IOPS等),当度过业务高峰后,在闲时自动缩容,在保证业务稳定的同时最大限度的节省硬件资源。</p> <p>平滑迁移</p> <p>随着业务量的的线性增长一定阶段后,出现物理资源瓶颈,乐视RDS能在可以实现不停业务或者说用户无感知的情况下,平滑的迁移数据库到更高配的物理服务器上,同时保证业务的不间断性。</p> <p>3.5.2、使用场景介绍</p> <p>1) 三节点的数据库集群已经不能满足用户大量并发查询的需求,需要弹性添加数据库节点</p> <p>2) 由于物理服务器损坏,需要把物理服务器上的数据库放到健康的服务器上</p> <p>3) 单个业务量增长巨大,之前使用的数据库集群所在的物理机资源(比如:CPU、内存、磁盘IO等)已经不能满足业务的要求,此时乐视RDS可以实现不停业务或者说用户无感知的情况下,平滑的迁移数据库到更高配的物理服务器上。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/dde1f1be381d2eec9bad60845a7d50dd.jpg"></p> <h3><strong>3.6、数据库预警</strong></h3> <p>数据库预警对于提供平台服务的我们来说,其实是很重要的一块,如何保证数据库出问题的时候,第一时间通知相关责任人解决故障,这是我们提供更好服务的关键。</p> <p>目前主要使用云平台的RDS预警功能模块进行数据库预警:</p> <p>3.6.1、普通级别告警</p> <p>数据库集群未出现明显异常,也没有对业务造成影响,但已经超过了平台预设的最低稳定指标,比如:数据库读写超时、集群节点间同步数据延迟等等。通过短息、微信、邮件的方式通知相关责任人,提前分析原因,并进行相应的处理措施。保证在未出现问题之前,就已经及时发现并把问题解决。</p> <p>3.6.2、严重级别告警</p> <p>数据库集群已经出现了明显异常,而且对业务操作了一定的影响,比如:严重超时、数据库节点或整个集群故障等。通过电话、短息、微信、邮件所有通知途径,告知相关责任人,及时上线解决问题,尽可能的减少因为数据库问题对业务造成的损失。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/060d57a09d5b47a2ac4e614cacc69d56.jpg"></p> <h3><strong>3.7、数据库监控</strong></h3> <p>监控系统在云平台RDS服务中处于举足轻重的地位,监控系统的好坏直接决定了,RDS服务出现问题之前预测性能瓶颈,是RDS服务提供稳定服务的有利保障。</p> <p>监控系统我们已经完全实现平台化收集并查看,监控指标包括容器的各类性能指标、数据库各种性能指标、数据库集群各个节点间同步状态的监控等等。</p> <p>下面大概介绍一下:</p> <p>3.7.1、容器的性能监控</p> <p>因为我们是基于容器运行数据库服务,所以容器的性能监控至关重要。通过安装在各个物理集群里的agent程序,收集相关数据到Matrix平台,收集的信息包括所有数据库容器的CPU、内存、磁盘IO、网络等等的使用情况,DBA会通过平台多种维度的展现,来及时发现出现性能瓶颈数据库容器,并优化相关数据库服务。</p> <p>下面为Matrix平台展现的,某个物理集群中,读写消耗Top3的容器相关指标曲线图:</p> <p><img src="https://simg.open-open.com/show/7c73bea2c2101e00834638570c6c1838.jpg"></p> <p>3.7.2、数据库性能监控</p> <p>包括数据集群的TPS、QPS、Innodb相关资源使用情况监控等等。下面为平台的部分截图:</p> <p>1) 数据库基本运行指标</p> <p><img src="https://simg.open-open.com/show/2d05ab556b012fce209a51073b685321.png"></p> <p>2)数据库集群实际read行数情况统计</p> <p><img src="https://simg.open-open.com/show/b9b06a28db9bf1b4d0457826c0144ffc.jpg"></p> <p>3.7.3、集群数据同步监控</p> <p>根据数据库集群同步参数,来收集集群各个节点间的同步状态。下面为平台的部分截图:</p> <p><img src="https://simg.open-open.com/show/fb846301cfdcd5ea117c1c1d9c613339.jpg"></p> <h3><strong>3.8、Gbalancer数据库中间件</strong></h3> <p>为了保证数据库的高可用性,虽然基于Percona Xtradb Cluster的Mcluster数据库集群架构可以接受多节点写,但是在我们的实际使用中发现其在大量并发写的情况下,会出现各种问题。</p> <p>而在2014年的时候,大多数中间件不能满足我们的需求,最终我们决定自己开发一款符合我们要求的数据库集群中间件。</p> <p>我们开发了一款内部命名为Gbalancer的数据库中间件产品,Gbalancer的主要特点是轻便、高效、部署简单,并且充分利用了Mcluster数据库集群特性。</p> <p>通过和业务代码的配合,其可以实现数据库级别的高可用、负载、读写分离等功能。</p> <p>Gbalancer的几种主要运行模式有:</p> <p>1) 轮询访问模式:把数据请求轮询转发到后端Mcluster数据库集群的所有节点</p> <p>2) 单节点访问模式:把数据请求只转发到数据库集群中的一个节点上,只有当前数据库节点有问题的时候,才会切换到另外一个数据库节点上</p> <p>3) 隧道模式:通过和数据库节点建立持久隧道连接,所有数据连接都通过隧道来访问数据库(适用于短连接)</p> <p>不同模式有各自的特点和业务使用场景。</p> <p>在实际线上应用中,通过在本地业务服务器上安装Gbalancer,根据需求配置Gbalancer连接数据库的模式,并和业务代码相结合,最终可以实现数据库级别的高可用、负载、读写分离等功能。如下图:</p> <p><img src="https://simg.open-open.com/show/7f058fd8ec92a2be43dc5dd2082543a0.jpg"> <em> 注:Gbalancer目前已经开源,项目地址为 https://github.com/zhgwenming/gbalancer </em></p> <h3><strong>3.9、日志收集和分析</strong></h3> <p>由于RDS数据库集群的数量激增,我们最头痛的就是数据库集群批量报错、单个业务线出现大量的低效的SQL语句等问题的及时发现和后期的分析工作,这些问题虽然短时间内也许不会造成致命问题。但如果不及时发现问题进行处理,后期很可能是致命性的。</p> <p>目前通过ES,我们把所有日志进行统一的存储、管理和分析。其中对于数据库来说,最主要的日志还是错误日志和慢查询日志。</p> <p>我们把收集过来的MySQL(错误、慢查询)日志、容器日志按各个关键指标和维度进行划分,在Matrix云平台上以图表的形式展现出来,可以宏观的查看所有的日志信息,这样保证了:</p> <p>1) 出现数据库集群报错的时候我们能捕获报错并查看其规模、分类和具体信息</p> <p>2) 如果批量出现大量慢SQL时,我们也能按照时间、数量、来源IP等一些列维度,来发现有问题的SQL语句,并对相关业务方提供优化建议</p> <p>3) 数据库容器报错后,能捕获并及时发现问题、解决问题,还可以供后期分析问题原因,防范再次出现</p> <p>如下图:</p> <p><img src="https://simg.open-open.com/show/6f53f3706b7cde31e29f5c6b10815c85.jpg"></p> <h3><strong>3.10、踩过的坑</strong></h3> <p>1) 在线修改大表,会对整个集群造成影响</p> <p>2) 多节点写,产生大量死锁</p> <p>3) 大批量DML,整个集群pause</p> <p>4) 导致数据库集群间不同步的场景</p> <p>5) 集群级别从库坏了后的自动切换</p> <p>6) 创建表为MyISAM引擎后的数据恢复步骤</p> <h2><strong>四、展望</strong></h2> <p>乐视RDS发展到现在,已经逐渐趋于成熟,但还有很多功能需要完善,在今年我们会继续发力乐视RDS。使其在功能和稳定性方面更上一层楼,并在不久的将来和大家见面。</p> <ul> <li> <p>VSDL(Virtual SQL Data Layer)构建</p> </li> <li> <p>全球化分布式数据库</p> </li> </ul> <p style="text-align: center;"><img src="https://simg.open-open.com/show/230b622f6e79fa9c2adccf7bfb64f921.jpg"></p> <p><strong>Q&A</strong></p> <p><strong>Q1:你们的RDS有用Zabbix进行集中监控管理吗</strong></p> <p>A1:我们监控中有zabbix进行监控,zabbix通过调用我们自行开发的接口监控数据库状态,进行数据库容器集群事实监控。</p> <p><strong>Q2:请问运维标准化怎么定义的,怎么实施的</strong></p> <p>A2:运维标准化的范畴还是挺大的,比如服务器标准化,IDC标准化,网络标准化,架构设计标准化,容器标准化等等。就不一一列举了,我们通过规范与宣讲,起到了一定的效果,但是随着乐视集团与云公司的发展,已经赶不上变化,只有平台化,将各种标准系统化管控起来,才能将我们的标准与想法一一实现。这也是现在业界的一个普遍共识。</p> <p><strong>Q3:运维自动化用的什么平台</strong></p> <p>A3:运维自动化我们使用的是自主开发的Matrix管理平台</p> <p><strong>Q4:怎么快速扩容,快速部署</strong></p> <p>A4:依赖于Docker的先天特性,我们通过部署在物理机上的beehive程序,来快速部署容器。而容器里的mcluster-manager来进行数据库集群的扩容。</p> <p><strong>Q5:发布系统怎么做的</strong></p> <p>A5:目前我们发布系统是自行研发的系统,根据集群容器级别进行升级,以python +saltstack方式实现快速容器集群组件升级。</p> <p><strong>Q6:filebeat在使用过程中是否遇到发送重复数据,或者说超时重发导致日志大量重复,是否遇到过?怎么解决的</strong></p> <p>A6:我们使用filebeat中,并未发现发送重复数据,超时的话会有,我们通过date插件来把时间锁定在实际的日志记录时间。</p> <p><strong>Q7:集群日志会不会出现时间差异</strong></p> <p>A7:如果不用date插件的话,会出现。我们现在用date插件来获取日志实际的记录时间,并录入ES集群,可以避免日志记录时间和ES存储时间的差异。</p> <p><strong>Q8:后端存储用的是什么 是开源的分布式存储吗</strong></p> <p>A8:目前我们根据不同的业务线有不同的存储方案,一般RDS这边采用的存储相对比较传统,SAS、SSD,备份盘采用Gluster分布式系统。</p> <p><strong>Q9:请问你们对不对log做解析,把字符串解析成对应的参数值。如果是用logstash做,是否遇到解析速率的瓶颈,如何优化的</strong></p> <p>A9:我们会对log进行解析的,只会截取取关键数据指标录入ES集群。logstash我们也有在使用,通过把数据放到MQ里,然后用多个logstash解析MQ里的日志数据,加快解析速度。</p> <p><strong>Q10:关于Gbalancer中第三种方式隧道,这个主要解决的什么问题?是基于什么应用场景产生的?比另外两种的优势在哪</strong></p> <p>A10:主要解决短连接过多消耗数据库资源,通过和数据库节点建立持久隧道连接,所有数据连接都通过隧道来访问数据库,进而减小对数据库服务器资源的消耗。另外两种轮询和单节点访问,是不会建立持久连接(除非所用的编程程序支持)</p> <p><strong>Q11:能否将踩过坑中的解决方案例如多节点写产生死锁问题解决方案介绍下</strong></p> <p>A11:我们通过在业务端安装gbalancer,用端口区分,分别使用gbalancer轮询和单节点模式。然后在业务代码里把读和写用不同的gbalancer代理端口来访问数据库。</p> <p><strong>Q12:你们使用docker是如何进行编排的</strong></p> <p>A12:matrix+beehive,matrix是编排器,beehive是容器管理系统。请</p> <p><strong>Q13:在写入数据之后进行集群间同步的时候,是最终一致性还是实时一致性?设计时时如何考虑的</strong></p> <p>A13:Mcluster底层采用的是开源Percona Xtradb Cluster 进行封装,PXC集群数据为强一致性,架构设计之初考虑到互联网应用读写比例,读较为大的情景。PXC多节点数据一致性的同时,多节点读也带来读性能的提高。</p> <p><strong>Q14:您好老师,请教一下,当数据库链接突然断掉,数据需要回滚的时候,这个时候集群是如何做的</strong></p> <p>A14:PXC集群特点,在每一次数据库会话连接时候,保证多节点一致性,数据库会话提交都需要在多节点进行验证,验证通过后才会提交执行。这里所提到的当数据库会话连接突然断掉的场景,应该属于应用于数据库连接没有进行commit确认操作,会进行回滚。</p> <p><strong>Q15:请教下您这边,刚才讲到了数据库集群的扩容,请问下扩容之后,新的库是否要全量复制所有数据?还是增量保存</strong></p> <p>A15:扩容是会读取共享磁盘上备份数据,在扩容节点进行恢复,然后选择压力最小的作为donor,进行增量恢复。根据场景不同也有可能做SST全量复制,进行动态扩容。</p> <p> </p> <p> </p> <p> </p> <p>来自:http://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651662244&idx=1&sn=df48003cfa9bb339702cda63a88249f6&scene=0</p> <p> </p>