sure 我的名字是马楚成听过吗 马楚成是岛岩上海花岛岩 很多年了马楚成 艾芬吗 我旁边的老板开基亚马桑 从日本过来的所以马SKL你知道是哪一家公司出来的知道吗Oracle甲骨文因为我们是甲骨文Oracle的公司所以你可以看到今天的马SKL其实部署的时候会有很多大公司都是在用不是以前马SKL只在一些游戏小应用 还是做完的算以前是这样但是今天很多的应用都部署在一些mission critical systems在banking上面 在一些在银行的应用在一些我们的物流 logistic还是一些transportation交通上面还是我们VTEL 买淘宝还是怎么样一些平台 云上面很多时候部署的都是一些马SKL的应用为什么马SKL现在是通用呢有没有一个什么原因open sourcethis is very important in fact如果一个所说的open source后面没有基金 没有investment 没钱后面会怎样 跑掉了 是吗没人支持他之后怎么办所以你看到open source你可以听吗你好所以没有投资基金很多时候他会跑掉 是吗不然一阵子有人做了一件事情为了制止 过一阵子就跑掉那open source没办法可以延续但是马SKL你知道今天是几岁马SKL在出来之后到今天2019年几岁至小15岁 再来25差一点点 24从1995年 1995到现在 现在是2019已经24年了今天的版本 知道吗 是什么版本8.0那8.0 18 很奇怪的马SKL的版本变号呢很多时候人家说变号是一个大号一个号码 1.1 1.2 1.3那两个号码就差不多了我们的号码好像是3个号码我们的一个digit 3 digits所以你看到我们其实一个大版本是两个号码大版本是两个号码 8.0 5.5 5.5 5.6 5.7他们全是大号码在以前为什么会有5.5 5.6 5.7用这个号码其中一个原因为什么这个号码是5.5 5.6因为我们在中国的马SKL市场我们必须得到资金我们必须得到资金在马SKL5 5.6如果有任何原因我们不会改变第一个计划我们必须得到资金再次所以这是一种魔法在中国 如果在IT里购买我们会得到资金的资金所以我们不会改变第一个计划我们使用 使用 使用这是实际的计划整个流程是很麻烦的所以我们不变其中一个原因还有另外一个原因我们不变这个号码对你感觉小变 小变你就用了 继续用5.5 5.7 5.6都是一样了 算了算了算了但是一跳 8.0哇 心里头会怎样感觉不好啊要我升职 做这个upgrade的时候奇怪了 会有事吗会不会太大 变动太大步骤了所以其实今天马SKL8.0 你知道是从什么时候出来的2018年4月份出来的所以到今天 其实都差不多一年超过一年半了1.5年我们其实8.0出来已经很稳定现在我们这个会计划我们有两个题目第一个是我们HA上面一个比较很你们有没有听过InnoDB Cluster听过 有用过吗在大陆里边很多时候人家都会说MGR听过吗 MGR也没听过 MGR MySQL Replication以前在之前很多时候说的HA High AvailabilityIt is talking about the way how we do redundancy是吗我们不可以停机当机很麻烦当机很麻烦我们的一些系统关机系统 你可以停吗不可以停的我们做备份的时候也不应该停我们的一些事情有可能什么时候都有一个机会它会自己停还是我们要它停是吗有时候我们说 哎呀这个磁盘坏了一定会有这个时间的是吗还有电直接动楼没办法了真的停了电是没了那怎么办一定要停所以我们一定要做一些HA RedundancyRedundancy就说多于一台多于一台我们的数据在一边可以传出在另外一边也应该要传出不单单是提供服务的一些Status还要是数据是Persistent 19的在磁盘下面因为我在这边的一些数据应该也发送到另外一边所以在这个多台的一些应用我们应该怎么看我们是可以延续不要停机不要停机以前是一些Replication的方法现在今天我们第一个方向会看的就是InnoDB集传InnoDB Cluster是什么呢是一个自动化很简单很方便 虚拥但是今天我要讲的如果你听过今天是比较好因为我想的是这个部署的方法现在在国内也是很普遍人家都会用的很多那当然最多是什么是老的方法以前的方法因为已经跑了很多年很多人都会知道怎么样做MySQL的HA所以呢用以前的方法一定会有很多那最好最方便是什么呢就是InnoDB集传InnoDB Cluster那好先第一个题目我会先讲这个InnoDB Cluster第二个呢我们会谈到很多时候在MySQL是数据库后面我们做IT上面的应用不完我们怎么样数据一定是最重要另外一边就是数据在就是我们要处理处理数据然后呢就在Present表达出来用图啊用什么方法去表达收来的一些东西呢甚至放在数据库里面放在一个地方然后处理也好表达出来是吗所以后台如果我们传处之后没办法做的处理方便你的处理在中间的一些我们编译的Java也好PHP也好Python也好都要很麻烦是吗我们会提供在数据库里面有很多方法去做有的一些是NoSQL啊Document啊JSON啊也会有很方便的一些GIS地理信息有没有开发一些手机的应用然后呢你要知道它现在在哪所以呢你现在在南山你现在在哪的时候呢附近有什么来了附近你朋友有没有啊是吗那这个用什么方法用自己编译呢你要也是数据啊这个数据在后面你会发送你的数据在后面我在什么地点GIS有一个位置你可以传出所有的一些数据都在数据库里面里头的时候我只要拿到我现在然后用这个在数据库里面查一下我的一个点我的画一个圈我这个圈呢是两公里2km比如说两公里的一个圈这个圈里头随着在我的一个这个圈里头的抓出来是不是很快很简单一个select statement就查出来查出来也有快速度也是蛮重要的我们有怎么样可以做到special index可以画一个圈然后在数据库里面有很多有的是一个点有一个是一条线因为不是一些人也会有一些是路一些比如说巴士的一些路径那是一条线就是一个级线是一个很多polygon还是怎么样也会有一些区所以里头GIS我们MSG也可以做得到但是我们说的功能下面可以提供分析还有处理但是也要后台的一些最重点就是安全还有就是部署的时候方便高可用所以今天第一个题目我会谈到的是高可用看到8.0刚才提到的是从4月份去年的到今天11年半在Oracle底下我们甲骨文在2010年到今天已经差不多9年 10年了里头我们差不多2年多就发布一个新版本所以看到Oracle所给他的生命力是很大现在很强你会听到很多人会问以前老应用是一个集中师的不是分布的不是散散的现在很多的应用都分布的在不同的数据中心也会有很多台数据不是单一其实现在是分散的所以今天MSG其实是一个清亮级但是虽然清亮代表是吗方便马上可以使用马上可以用所以做一些部署MultiTenant最好的所作表里的一个方法就是独立独立出来不然就是一个MultiTenant还是一个然后要切开的时候很麻烦MSG要切开Docker也好整个放在里头就可以跑是吗很极接了什么是MSGNODB集权NODB集权首先是我们看着的一个录像就是往后你会看到听到很多时候高可用都是用MSGNODB集权它也有什么呢它主要的一些组件是它后台不是单台是多台它会说最小应该有三台为什么要三台原因是如果只有两台单台一定不是呢单台just one single servercannot be redundantso it must be greater than onebut why not two如果是两台中间我切了网络段你生的还是我使的两台都是在的只是网络段很多时候我跟另外一台的中间会有一个interface好像我们说interconnectcluster network我们的数据交换是根据网络的另外一个端口来发送我们只是我们跟你打通的一个通道disconnect后面的应用还看到我的因为我用的我的interface是另外一个来跟你做对口所以你还会看到我你也会看到它我在还是你在两台中间两台中间我在你也在那这麻烦了我给你数据还是我烧数据我写你也写就乱了不可能不可能我们写数据的时候写我这边也写你这边你这边如果还写我又写一半一半天一半地一半你怎么样去拿回来所有数据这个没办法所以呢我们要三台如果三台之后一个中间有 network 的一个问题我在三台里头一台的是小数两台是多数那一台之后我不在那我跑掉我自己跑掉人家真的连跟我去问数据了我不给你因为我的数据不一定是对的因为外面有两台的你它就会做自动切换自动切换所以自动化那边路由就是干应用它连到这个所说路由的router知道我是一台所以呢我不给你路由会自动切换跟另外两台会抓他们它会派一个它自动它会抓数据从另外一边你们两台就会成为一个主要的一个一个集权提供服务所以你看到为什么要三台就是这样如果中间你说这边又断了它又断那就是全部出来所有人都看不到了这个网络是什么真的当掉了警套这个系统当掉这个不是一个单点故障不是单点故障单点故障的时候应该没事但是多点的故障你要真的要要看这个事情应该在网络里面你应该部署的还好也会看其他的一个方法来保护我们的一个网络对吗那看出来这个所说的一个inoDB集权我们先看就是首先以前一集以来我们的replication都会有一些方法第一个呢这是一步复制single replication就是呢我们就是传统的方法是做一个复制replication两台的时候我写数据进来的时候我会把我的数据发送到另外一边但是Posting a mail一样就有人会过来抓数据但是呢我发送一个email的时候呢就是报到一个后面的一个一个albox那人家就会从albox去抓但是呢我自己呢我放到这个albox我就算了我就做完了所以呢这个速度来讲performance is the best我只管我自己的一个船里头我local disklocal machinesOKjust finishwhen we committhe datait only happens tolocal machinesand not anywhereoutside the boxrightso when we committhe data in the boxthere is a chancethe data hasn't leftand if the datahasn't left the box这个数据会掉你的一个你的一个机器当掉最后的数据会在哪在哪还在机器上都没有离开另外还没有抓到了一个数据所以呢这个方法呢对性能还好但是呢有机会是有掉失的对吧那所以呢这个部署的一些方法呢一般在哪里会在以前没有其他方法只有一种一定是这样但是现在都会用在哪呢就是一地的一个方法因为延时时间如果从这个北京到深圳你还要把线拉到拖到这个北京你写数据写到这个深圳的时候还要拖住呢写到北京还回来时间太强应用的很慢是吧所以呢很多时候我们会有数据呢应该在本地的写好了之后一步复制到一地的一个方法这个还是要用的另外一边我们会看到呢就是如果我们说有这个数据掉失呢那怎么样处理呢很多时候在过去呢我们会写数据呢写到一个本级的时候还会写过去我们说一地另外一边的一个地方所以呢在我们的一个方法OpenBox就是BinLockBinLock写到BinLock的时候也同时间写过去放在他桌面上桌面上我不管是什么我只放到这个桌面上然后就离开放到桌面上很快我不管你做什么我不管你做什么我放我就走了所以数据是已经离开已经在另外一边我就离开所以呢数据是没有掉失另外一台看到桌面上有什么东西呢他会把这个数据写回去所以没有数据掉失了所以也是一个蛮好的方法但是很多时候做切换呢这会有一些问题所以呢很多时候我们说主从Master and slave有可能是一对一有可能是一对多的这个也是我们说scalabilityscalability就是我们有很多应用呢都会是读是比较多的大部分我们的应用都是读多的大部分但是也会有很多应用都是说我只会写好像一些采集数据IoTIoT的一般的应用都是写多的因为它采集回来就写写写写对吧但后台就叫处理的时候多读的这个我们在这后再看但是在大部分的多读的时候呢我们会看到其实读的时候不一定是一台去读一台不够两台 三台 四台 五台他们都会有本机的一些数据they can read their own dataon their own boxso we add one more memberthe one member is one extraor lowand then it provides extra scalabilityif that timeit does not solve the problem of the demandone two three four所以呢这个所说的一些扩展呢是很方便 很简单就是我们说一对多一对多呢有时候也是一对多层的一些方法组重重为什么会有这样子组重重的一些部署的方法呢原因是有可能是远端的一些方法呢我这边写那边呢事实下也比如说我要发送一个包到新加坡我在新加坡发送新加坡新加坡有两边不是单一个有几台你们是新加坡我在新加坡我要发送一 二 三那这样子会比较慢因为拖延时间一 二 三但是如果我是做一个方法我发送一次给你你在本地会快一点所以这个是多层的一些方法也会做得到这个所说的一个多层的一个方法也会看到这边的一些如果我的一个一台呢一对多的时候我当机怎么样我当机啊人家写书的时候写到我的一个地方我当机你们没什么书呢没书的时候我说的切换应用 不要写在我呢写到另外一台也要发送谁来管很多时候用这个VIPKeep our life D有没有用Keep our life D就是VIP切换还有这个还提供一些服务那所以呢对于这样的一些方法VIP呢都是一个比较好的方法但是手工是自己做很多时候是自己做不好所以我们呢就是重新变异一个所说的InnoDB集传这个呢就是提供它会自动的一个处理我知道三台有一台的一些当机你不用管我会自动切换数据会从自己一个切换的自动会从另外一台去抓数据之后一台会收服的人家会看你当机啊我来看看完之后把它重启数据会回去然后会搭建起来还会回来这个呢都是自动化的一种那还有呢我要增加多一台 两台 三台数据怎么样来它会自动去增加在这个所说一个集传里头都是这种自动的另外一边就是路由应用呢如果它要连一台当吊它原来是跟你谈话但是你当吊它会跳过去嘛回来回来管以前有原因就要管就是你你用自己的方法现在今天要做的事情就是自动路由会叫你自己吊它会跳过去原因是为什么原因是一 二 三台你们有它Bit你会知道自己的一个状态有什么事情你会直接的去广播广播到这个路由它会知道你已经变了你已经不在人家来了它就会切换到另外一台自动的所以你不管所以那这个都是InnoDB集传要做的事情看我们今天的一些部署比如说一些example我们的一些安利的一般是做法是什么样首先当一个数据中心就是很简单虽然说很简单的应用如果你真的很简单这是单台的HA不管但是现在关键业务你不要当吊所以要多台多台在InnoDB集传三台刚才提过最小也三台三台的一个部署所以当一个数据中心我们会部署这样应用也会搭配一些路由因为路由会指定从哪里去抓数据所以就给一个所说透明的访问透明的访问另外一边如果我们所说的两地两个数据中心有两个数据一个数据中心数据库也会搭配这一边有数据这一边也要发送过去因为有可能是比较远端远端我们的拖延时间会很长所以我发送我会用一步复制复制过去所以如果另外一边你看我的网络很好的好像在旁边的一个洞楼我自己拖拉的一个线过去但是你看物理像它是两个洞楼但是其实它也可以看成为一个一个数据中心搭配一个一个几圈之高在旁边拖一条线跟在同一个房里面是没关系的一样所以如果你真的看数据中心我们会看是不是真的可以依一个集权如果真的很远了我们有可能要一步的方法这样搭配就是一步复制可以三台可以五台可以七台因为如果我是五台的时候可以洗一台洗两台都没事因为洗一如果我三台我洗一台我在洗一台你只有一台你一台就是小数但是如果有五台一 二 三 四 五我洗一台四台大数我洗多一台里头还有三台三台都是在五台里面的一个大数他们还会给你提供服务十两台都还在另外我们会看到现在有一些说两地三中心要吧 听得多吗两地三中心这个也是很普遍所以两地两个北京上海还是北京山镇北京广州两个地很远所以我们做这个data center要分开但是有时候我这边如果当一个数据中心很多时候也会管事情但是单一洞楼会有问题可以在同城里头做一个好像两洞楼一样的所以你说就是一个数据中心但是其实两个数据中心所以当一个城市里面其实有两个数据中心那你可以看到人家的就会搭配举个例它有五台的一个集权五台集权五台集权绑起来应该是一二三一二三那数据中心一一呢三台两台那你看到我会一步复制有一个dp料dp料有时候为什么会有这个特别搭配出来呢原因很简单其实我们不可以看事情一定是always idealideal is never happenidealperfect world is never happenokyour system is always onand never go downit has to go down所以呢有一天真的有一个故障真的死掉你会做什么大部分的大部分人都说哎呀死掉重启啊再做啊很快的搞定很快那你们有没有吃过哎呀很快最后呢就说哎呀这是什么事啊哎呀没了重启了什么都没了看不到了对吗所以呢我们用什么方法可以保留他还在可以做一个所说的root cause analysis就是我们可以用另外一个来做替代这个洗掉这个马上补过去那这样还是舞台这个你们可以花时间一天两天去看什么事对吗这个也是我们有时候部署的时候要看生存系统里头怎样都有机会如果你是个比较一个所说的一些关键业务不是看一天的事情有时候一直出来哎呀往后两个月要出来了你没有去真的分析他为什么会弹掉每一次都是重启有没有听过有人说经常都要重启天天重启有没有天天重启就是为了避免他有时候呢重启就没事了每天重启他就没事那这个是一个好的部署方法不对啊对吗所以这个也是为了避免以后发生重出来的时候呢我们可以做一个后背的一个方法另外一边异地的有可能是也可以单台还是单集权另外一个集权好我们探讨一些其实在InnoDB集权里头做什么事首先其实呢InnoDB集权有很多搭配的一些参数什么是搭配的参数呢我们也可以看一看它里面是讲什么对它来讲有什么区别首先我们有一个叫Consistency待会也会详细一点什么是一个InnoDB的Consistency数据写到我的有没有听过什么数据一致啊强一致啊有没有听过什么来的什么是强一致什么是数据一致你有没有用过MySQLMySQL有没有办法做强一致做不了为什么做不了你用的一个就是复制是半同步还是一步一步一步就没办法半同步都不是因为呢它只是拖在这个放在桌面是吗然后后面要查数据的时候还是查到寄钱的数据因为它还在桌面没写回去是吗MySQL有没有一个强一致呢好像写入然后才回答反应过来这个才是所说的一些强一致啊这个是从一个这个方法去看事情呢是有可能这个可以做到你的要求有没有其他方法也是一个可以达到你的要求但是也是强一致不是你的一个方法呢我举个例啊现在有人写一些东西给我这个写到我的一个你是另外一台所以我发送给你嘛对吗我放在桌面人家问你的时候你还没看所以你拿数据还没拿到对吗对不对我放在桌面的对吗所以刚才说你的方法是我要发送的时候我要给你然后我这样它才可以拿到对吗那现在我做的一个方法我是放到这个对我来讲对我来讲写的一个应用写的应用啊是不是快快一点因为我不管你做事在还是不在对吗应该我是最快了写的时候最快还要安全数据是安全已经离开对吗是最好对我来讲是最好的那你是应用你说我要读数据的时候读得出来要数据意志有没有办法我就写对哦是吗那时候你去拿就可以了对吗是吗我们实时可以做我不是真的要你要读的时候你跟他说你看这个自己抓也要派过去有的只是我们所说的 consistancy 里头more thanmore than is eventual也会有before and primary failure等会会再弹一些这样子我们看我们听过这个所说的CAP theoremCAP theorem在data我们的concurrencyavailabilityperformance 也好是没办法可以达到三个一起来都拿到的没有完美的不可以三个只有两个听过吗你查一下百度CAP theorem我们没办法同时间只可以拿到两个好处不然你就快快跟availability不然就是你的数据意志跟快你就没有availability不然就availability跟数据意志但是没办法可以做到performance好像我要你拿到数据意志的时候我要给你慢对吗如果是这样子放下你要数据意志对你来讲也是慢但是我们看事情可以是three dimensional不是我们每一次是拿到两次但是我写的时候我可以拿到的是performance也可以拿到是数据已经安全过来了但是我没有可以达到你的数据意志你的数据意志没拿到对吗但是对我来讲这个这个时间点timethree dimension的时候我已经拿到两个了对你来讲你要拿到两个你要拿到performance还有你要拿到数据意志你就过去拿只只用你的时间所以是three dimension去看事情看到吗跟时间再拖一个好像不是三维的一个方法去看也可以这样子就是consistencyInnoDB cluster里头也会有一个所说的IP wireless网络要稳定我们很多时候就是内部网络跟外面的两边的所以里头我们会有所说的IP wireless还有local address就是我本地在后面的inter interconnect也会有三个network的一些参数就是管network有可能会当掉还是我们不稳定之后有人又提出来所以我们怎么处理有三个参数要配置待会回家还有就是如果真的离开了三台有一台就要离开离开的应该怎么办我要还提供服务还是要给你还是完全去设单还是我要贴你出去所有连接我贴你出去还在后面还有admin usesuper user可以连可以看事情所以我们有其他的一些好管的事情在后面我们也会配置一些report host在myscale里头有一个report host有没有听过你应该是对myscale比较熟悉了听起来对复制人也可以谈到还有没有随时用myscale多的report host是什么来的report host在一个参数里头我们myscale复制的时候有可能我们复制的时候还是做什么事情不是这一台里头的一个post name有可能是proxy server来的代理在外面它从另外一边是点某一个proxy server然后过来我要给人家知道我的server DNS里头你应该连到哪里有可能是low balance有可能是什么地方应该连另外一台拿之后回来它会自动绑回来report host要给人家如果真的有一条线连过来的时候你要连到哪里之后来report host这也代表我们有时候因为有两个interface很多的interface很多的刚才已经internal network有一个interconnectnecuster network有一个在外面应用绑过来两边是两个往卡对吗往卡也等于一个host name你要如果后面要给应用你有连你会如果你没有告诉他有可能他你连我的一个caster network他都没办法看到那就麻烦了所以在report host就要定义了说你如果应用连你要报一个什么host name出去你要连哪个这个report host其实要定的给一个路由它会连不要连网络里头的interconnect要连在外面的一个host name好我快一点caster network刚才提到有两边所以这两边如果在我们部署的方法你看一看部署的方法我create一个caster在销里头我create caster的时候我提供就是如果停掉有时候有问题的一个nook的时候你要offline还有一致就是before on primary failover待会会讲是什么expel timeout 30通过什么方法去把数据交换ssl也会说你的ip list在internal network就是什么ip地址在外面是另外一个外面另外一个你自己nook1也是162 168的一个56但是我用一个host name的方法提供每一台看一看这个innoDB集权我在一个管理上面我打一句 两句 三句我的cluster就绑定了你看到我的事情吗三句话我就把innoDB cluster生成出来很简单但是当然虽然说简单也有参数要配置的是什么很多时候人家都会什么都没配more and more and moremore and more里头不对的好刚才提到如果我们所说exactionbo server就等于他当掉离开的时候他的洗掉好 还是不好不一定是好洗掉你回去看这个OS里头没了你就要查很奇怪你没有远灯的方法连接一定要爬到这个OS操作系统里头看看很麻烦也没有马上可以重启所以我们提供bo serverwe only还是offline刚才提到数据一致有一个一般我们说放到桌面上刚才提到数据其实写到桌面上如果这一台真的使劲使劲的漂你真的一个数据还在你的一个所说的桌面上如果你漂我洗掉漂过去你马上去拿数据你拿到什么还没有拿到所以漂漂这个所说漂移的事情应该要等数据回去才开放是吗所以在数据一致里边我们看事情不一定要写真的要写到它的再切换是什么时间最好用这个时间我们切换我们的质疑就是说只要这个写回去我们才放那这个就是before on primary failover就是我failover的时候我要把数据写回去才onlinethe data has to be written back to the serverwhich has been promoted as primaryand then it becomes onlinethis is very importantotherwisethe data thatthe server which has been switchedyou get outdated dataso我们可以达到这个数据一致不会说漂过去数据不一致不然漂过去数据有可能达错了那另外一个呢就是刚才提过的就是我们是看时间数据一致怎么办我是写我是写在放在你的盆上面桌面上但是呢应用你的应用要拿把你的所说so sectionthe variablethe section variablewith the explorereplication consistentcan turn it to beforeand the data will be drivenfrom the deskfrom the access to the queueand then getting back to the serverand pass it back to the applicationso it guarantee the datais always consistentto everywhere in the group所以你看到我们提供的是flexibility我们提供的是flexibility不单单是比如说oracle有maa听过吗maximum availabilityarchitecture他们说的有可能是maximum performancemaximum reliabilitymaximum protection但是我们不单单是a things and b things还有thing我们提供的是时间点什么时间发在时间发在哪里所以你看到这个还会有呢before afterbefore and primarybefore and afterand eventual我们有五个参数跟不同的要求如果说你真的要数据一字呢我可以设置呢我写的时候一定要写过去给你这个呢就是是谁是哪一个你猜afterafter如果你的一个所说的设置呢是after就等于写到你的地方才回来就是数据一字的一个方法但是我不建议因为呢my SQL的我的server是只要用的你的server也用的如果我真的要我会绑定你的一个期间你会锁住你一个一行拿着很麻烦对最好的不用还有呢网络可靠性呢我们说我在花五分钟5 minutesyes to go可靠的一个方法呢我会看到第一个expel timeoutexpel timeout就是心跳啊很多时候在网络里头有很多事情会发生的塞住啊没办法空啊当交换机当机啊机会很小但是会对吧塞住呢那这个呢怎么办有五分钟没数据交换那死掉啊我们的心跳我给你一个一个一个一个一个包数据包呢你要在五秒钟5 second you have to respond5 secondsyou have to respondthat's the hard bitif you don't respondin this 5 secondI will kick you outthe groupwill just leave youokayfrom the customer所以呢在五秒钟这个事情呢你还没有response给我呢我就 kick you out我就 kick you out明白吗这个就是一个方法这个在一般情况应该是很可行的但是我有一些客户说我每一个礼拜我的一个机器我的一个机船都会好像当机一样因为网络我一个礼拜有一天会做备份啊这个备份呢把所有的网络塞掉啊他在五秒钟没办法再排队在网络里动出去啊你没办法回答我那就一个切你出去切你出去整个网络整个三台都离开了明白吗有可能还有另外一个事情呢就是现在VM顺利机呢有人会做备份啊back upback up的时候会用什么方法人家会说VMflows in VM听过吗flows in the VMwhen the VM is floatingeverything is stoppedmemory CPU just stoppedyou never get any single steps to goso this can pass for five secondsfor the five secondsyou never respond to my requestI kick you out是吗所以这个呢很多时候我们说备份还是flows in VM我们不会在数据库里头不然它是一个oracle数据库你都不会做这个所说flows in VM对吗但是为什么my sql人家会做这个呢你听过吗很多的都说flows in my sql然后做备份它就是看my sql备份就是flows in然后做备份就可以了这个不行啊不应该的因为你做一个所说的flows in就好像你把洗机一样有什么时候洗机就是把电源咚没有了然后再插回去重启这个是什么crash recoverycrash recovery问题很大是吗重启如果中间有什么是你锁整个数据库都烂的你知道吗因为这个不是一个单点故障故障一次再故障是双故障里头的数据已经烂你没办法重启的不然所以你oracle啊还是什么你都不会做这个事情你一定会用其他的方法my sql一样不应该做这个事情我们看expel timeout刚才提了5秒钟心跳所以我们有时候每一个环境都不一样每一个环境有可能是1分钟30秒很多时候我们可以配置一个expel timeout有可能加30秒这样子真的你回答我你的网络比较不稳定比较不稳定有可能30秒你才回答我这样子就可以减小这个所说这个问题出来的一个次数了所以可以加这个呢我说我是主机有人写数据给我很多时候写记的是那一台那一台很多时候都是主机写的对吧那我有问题的时候我给你踢出去这个就是说5秒钟我给你踢出去这个5秒钟也等于做切换的时间因为你会等什么时候我要踢你出去踢你出去以后我才可以做primary server promotion我才可以选组我要做Electokto elect a new primaryI have to kick you out firstso the kick out timeouthas to be passedwhich is what we callexpel timeoutsome valueswhich can be 30 secondsand after that 30 secondswe actuallywe establish a new primary所以呢expel timeout也是很多时候也是选组时间看到吗所以这个第一点还有就是we join timewe jointhis auto we joinauto we join是什么more than this is 0就是呢我脱离wannaw这个network当掉我就给你踢得出去了kick you outsowhat I do isifthis is 0I just I neverwe try and then connect backbut if this is a numberthis is a numberI will try so we connect to the serverand without intervention所以呢这个数也应该要配置一个数让它有可能在一个网络中间我们有什么事情在网络里头真的给你踢出去它可以回来只自动回来所以呢这个每五分钟它会自动去试一次所以呢你试试呢12就是一个小时里面一次两次三次12次如果12次它都会回来是这样子to we try还有majority timeoutmajority timeoutmore than this is 0就是majority在三台里头什么是多数跟小数呢我要写一个数据在我本集的时候我会问你同意吗你同意吗majority agreeI will get this to passand I commit the dataif majority I get itbut what ifthe data is coming to meand the network is doneat that pointI try to ask for majorityI never get any responsebecause my network is donemy network is doneand I cannot get any majorityI will hand there forever我会卡住在这个时间点我卡住了你明白吗在more than this is 0卡住forever这个值所以我们有可能要把这个数要改成为譬如说2分钟12 0这是2分钟我卡住之后我就抱错误了那你的应用就会离开了那这个就好办了不然你的应用就拖住了是吗所以三个参数呢都一般都要设置才会有一个稳定的innoDB集传明白吗好innoDB也会有一些身心的一些方法clone做这个可能的一个方法在里头呢它会把背份这个重新配置都有了也会提到那些复制的一些配置呢很多时候我放在放在这边我pass给你你用什么方法去写回去还是单线程的single-thread去写还是多线程的multi-thread要设置的这个用什么方法在replication 上面可以在performance 上面去调优的可以多线程去写这个也是这个方法看到路由路由的车设置呢我们会看到它也是一个好像代理一样我们要看会不会more-ins 够不够connectional errors还有写的一些预制的时候写在哪里写在syslog里头还是在window的平台的时候用它的自带的一些event log这个也是我们看的一个方法还有就是所说的广播logification 通知呢有什么在后台的一些改变要通知路由它会开一个listener来听有没有改有改我就不等到有人去真的无问的时候哎 你洗掉了我才在这儿就好像搬来覆去了所以呢这个也是在路由里头可以设置的东西另外就是现在我们有时候用的一些应用是在小指头在我们的移动磁盘这个fresh disk我们fresh disk很多时候是f8T来的跑不起的你的应用搭配路由如果你就是插这个就是把你的应用放在里头路由有在里面你跑不起来的因为它会看f8T没有security它一定是public access但是它会爆错的它会爆错的我告诉你它会检查因为里头有一些key它一定要看只有你自己的on才可以读但是它一查f8T它会说所有人都可以读它就不给你拍的所以小心其实今天我的部分就到这里有没有什么event讲的too fast首先物理项你看到the cluster我说有3台有3台如果有一个数据要写的时候要写写在我的地方另外2台要写吗一定要写要写每一台其实都要写我pass给你不等于你没写你马上都要写很快也要写我只是放这段子你马上只是应用跟你要写的一个部分是没有延时的一个事情所以在写的时候我写在哪里其实都是一样所以你写写一台以及另外一个就是读呢我读的时候从我的石盘就抓数据给你从你的所以在读的在扩整的时候一台不够三台 四台 五台加起来就够了读的时候对吗那写呢读有没有读的时候你加到几台都没事对吗写了是写的时候其实你加一台有没有帮助应该没有因为一台他也有写是吗我已经写爆了够了那加多一台我都是爆我都要写对吗所以呢怎么处理有没有好的建议写已经爆了没了写已经爆了没了写已经爆了好我们怎么写很多时候我们说有没有分库分表听过吗分库分表就是说我写的时候写我一份我们的三台一组你们三台另外一组第一个分库分表深圳的人写到我的一区北京的写在另外一区最写的时候他写的是我三台深圳写一边北京写一边对吗就是这样子就可以拆开了应用其实很多时候你又看源头我们有一个心就是想什么都是自动所说的自动就是你不管你不管但是其实要做一个所说最大的concurrencyto make the best performancefor concurrent accessthe best ways to do itis from the source of the problemthe source of the problemis the routewhich is the driving wayfrom the applicationyou know how to split in the beginningnobody actuallyin the middle know how you splitin the middle how you splitok nobody knows是吗中间没人知道的其实中间如果有人说跟你说我自己判断我路由去判断路由就是一个瓶颈很多时候就是中间他要把所有我打开看一看我打开看一看他其实也是瓶颈还有每个scenario场景都不一样刚才看的一些北京深圳这个只是一类很多如果人家一讲出来每个都不一样的有时候因为拆分的时候是因为其他的原因他没办法做的然后所说的逻辑的就是瓶颈的一个大部分就是在这个还有问题最后就是他然后他又要做好像自己也是一个数据库然后你的问题就出来了所以最好就是源头离开应该怎么样去做连接的时候已经拆分然后这个其实很多人都现在也是这样做不然如果你谈戏百度他们做的事情都是一开头已经拆分不然怎么样去我们整个大众华还是全世界那么多的一个自负能可以做得到是吗就是这样子好不好有没有其他问题测试怎么样可以看得到这个真的强异字了对吗我举个例我通常强异字怎么样可以测试出来用一个锁的方法我们可以用Lock Table去看是不是强异字举个例我要写的时候我一定要写到最后写到里表里头如果这里是强异字你的标是锁住我没办法写我的应用就会拖住所以我测试的方法测试强异字我的有一个标Pable 1Pable 1在这里我选择设计进入Pable 1它会达到Service所以我选择设计强异字在这个标Service我可以做到首先我放了一个叫Lock Table第二个标Lock on newLock on Table 1然后我设计如果这是强异字这个不可以设计它只能选择到这个Lock这个是这个可以设计很简单你只要设计强异字然后你只要锁住Lock on Table这个不可以设计强异字很简单这是强异字所以如果这个不是强异字我放在这里你锁住我设计强异字然后我选择设计强异字设计强异字设计强异字如果这是设计强异字设计强异字设计强异字如果这是设计强异字然后Lock on Table我设计强异字我会放在手上你会看到吗你说测试是这样的测试吗是这样的测试吗怎么变你说测试吗你要知道有没有做得到达到这个强异字吗我只是这个就是一定表达出来这个应用实实这个方法就是一定强异字你明白吗我没办法写到这个表领头因为物理相可以看到它已经给锁了我没办法写回去所以我的应用是拨住了如果你Lock on Insert做的一个马上放出来就可以做得到它就放出去一看它就一定跑了然后就看到诶 强异字也可以看到马上你把这个所以呢你强异字不好因为有缘不在另外一边是用如果你说Oracle他们用这个加强异字没用的人家都不用另外两台 三台另外两台是洗掉的所以它不会锁住的但是MySQL每一台都用的很多时候都锁住的你选一个如果一个大大大大速要查出来还会拖住有可能几秒钟你那边有一个数据查啊 写的写数据的时候锁住几秒钟不好的对吗所以呢在这边我们还是建议不要强异字但是要强异字不等于要写的时候强异字可以读的时候读到最新的数据就可以了对吗before吗跟before所以让我写出来然后你可以如果你要是说有没有办法可以好像刚才用什么方法可以真的看出来感受到怎么样首先我pass过来的时候我放在你的一个桌面上里头写回去是有一个一个所说的现场叫miSQL里头有一个叫sql threadsql threadsql thread我可以把这个sql thread停掉停掉什么我可以停把它要写回去的一个 thread停掉所以呢你读的时候它知道这边还有数据但是这个没有写那你真的要读得出来的时候读它会卡住的然后你明白吗它会卡住因为还没写回去吗它会卡住然后你在另外一边把它一放开它写回去它的sql thread跑出来了都没有卡住是吗好吧时间差不多我下一个好吧