by 陈思儒
在MySQL 中在线对表对象做 DDL 操作是要锁表的,对可用性要求比较高而且应用变化又比较频繁的环境,这是个非常很糟糕的。
有同事在讨论Amoeba的时候提起了这个事情,并且给了一个很好的建议。
客户端与Amoeba的Connection (这儿称为ClientConnection) 跟Amoeba与mysql的Connection (这儿称为ServerConnection)是完全不同的Connection,他们之间并没有存在关系,只有在确定一条sql 路由到具体的mysql Server的时候。那么ClientConnection 才与ServerConnection建立一种Session。他们所有数据交互都通过这个Session进行数据包转发,这种query语句结束以后,他们之间的关系也将断开,ServerConnection也就回到了ConnectionPool等待下一次任务。
在Amoeba内部有一个虚拟的ConnectionPool,这个虚拟Pool负责多个ConnectionPool的负载均衡、failOver。
那么利用这个优点,Amoeba 虚拟Pool可以将即将做DDL 操作的 mysql从这个虚拟Pool中disable掉。所有的query将转发至虚拟Pool中的其他Pool。DDL完毕以后,将其Enable回来。
传统的F5设备为什么无法做到这种方式呢?
对于客户端采用连接池直接连接mysqlServer的客户端来说,即使F5 Disable即将Online DDL操作的mysqlServer。也无法将存在的连接断开。除非强制性断开或者等待Pool的收缩(时间可能会相当长,时间不可控制)
对非采用保持连接的方式倒是可以采用F5设备来控制,当不采用保持连接在应用性能上面将非常低下。创建连接的时间往往比一次普通的query时间要多上好几倍甚至10多倍。
Amoeba 要如何解决这个问题?
目前有一个想法,由Amoeba Manager来统一管理一组配置相同的Amoeba。
Amoeba 启动的时候将从Amoeba Manager读取配置。并且能够在Amoeba Manager上面进行实时对多台Amoeba进行管理(动态添加dbServer、disable/enable 虚拟Pool中的DBPool,动态修改QeuryRouter规则)。
那么在Online DDL的时候首先将其从虚拟Pool中disable掉,DDL操作完毕以后将其Enable。
评论 (2)
2020-Mar-29
匿名用户 发表:
Viagra En Ligne Belgique [url=https://buyciallisonline.com/#]cialis gen...Viagra En Ligne Belgique [url=https://buyciallisonline.com/#]cialis generic 2017[/url] Amoxicillin Urine Leakage <a href=https://buyciallisonline.com/#>Cialis</a> Cafergot For Sale World Chemist
Nov 25
匿名用户 发表:
4335645efxbcgmktyegfvcxmhvlutetgednbv44335645efxbcgmktyegfvcxmhvlutetgednbv4
添加评论