New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于canal高可用的问题 #147
Comments
高可用模式,是针对instance级别,非server级别. 也就是说你10台server,20个instance,每个instance都会是10台server进行互相抢占. |
倒是可以对集群模式下的server,允许设置容量上限,比如最多同时服务多少个instance,避免一个server撑死. 比如你这情况,单server设置最多服务2个,就可以将instance服务平摊到所有server上 |
单server设置最多服务2个,是基于instance的数目是静态的假设的,如果以后能做成动态的就好了,自动做balance操作。 |
你假定有10台server,但是在启动第一台server时是不知道还有剩余9台,所以启动第一台server时,要么就人为设置上限不加载所有instance,要么就是认为自己应该全部加载. |
恩,这个如果真做的话,可以考虑通过zk做协调,metaq的消费端负载均衡就做到了动态调整。 |
文档中说道:更新对应instance的running节点内容,将"active"设置为false,对应的running节点收到消息后,会主动释放running节点,让出控制权但自己jvm不退出,gracefully. |
所以;在 instance 是高可用的。在 server 层次是备份,但得做好监控。非常完美 |
理解正确,手工将active设置为false,可以手工干预集群负载 |
@agapple 要做instance自动均衡,可以在多个server中用zk选个leader,由leader将多个instance均衡分配给不同的server节点(比如可用一致性哈希),分配结果写到zk目录,所有server监听这个zk目录,得到自己要处理的instance。leader在发现server节点有变化时,就重新分配。 |
@chelubaiq 按照我之前的规划,每个canal节点会有一个server id,会注册到后台manager系统,任务发布都是通过manager系统进行集群分配. 模型和otter有点像,大物理集群,通过配置定义的方式隔离出一堆的逻辑小集群(比如一个任务可以关联到1,2,3这几台server上). 之前偷懒的做法,就是使用了otter manager进行了任务分配,整个canal的集群管理并没有做起来,二期你仔细观察otter manager其实也预留了一些canal的多样性部署的case,比如嵌入式部署和独立式部署. |
@agapple 想问一下,instance的running节点内容,将"active"设置为false,这个设置是在哪里设置?集群模式下的server,允许设置容量上限,最多同时服务多少个instance,这个也在哪里设置呢? |
|
从canal 1.1.x系列开始,引入了比较多的开源贡献的代码,包括多语言客户端、多消费模式(MQ/tcp)、多adapter消费组件,同时也在运维层面做了一些改善,比如docker化部署、支持promethues监控,包括最近也在尝试提供web化的管控能力 未来也发展期待大家,可以在多个方面进行共建,包括但不局限于多语言、adapter组件、web管控、store实现等 |
canal有web管理模块吗 |
+1,请问找到在哪里配置了吗 |
这个地方说的instance的running节点,是zookeeper里面的节点,在/otter/canal/destinations目录下有你的所有实例,实例下有running节点,用set命令改active的值就行了 |
我这边有一个方案是给instance加权,然后每个server维护最大负载和当前负载,这样的话,如果每个instance权重一样,那就每个server会均摊;如果某个instance比较核心,那就加重权值到server的最大负载,这样子这个instance只会在一个server上跑。 |
这样做server集群重启时,如果某个instance的负载占满server的负载,那剩下的instance不就被停止了。 |
目前canal的高可用只考虑了双机热备,并且是抢占式的(大部分情况下一台机器运行所有instance,另一台机器处于空闲状态)
有没有考虑过canal的集群和负载均衡?比如:
一共有20个instance,10台canal-server,每台canal-server在conf目录下都配置这20个instance,但是通过负载均衡策略,每台server实际只运行2个instance。当出现宕机时,做re-balance,其它server接管宕机server的instance。
没有这种统一的集群策略的话,目前只能以分组的方式实现某种程度的集群。比如:
canal_A1和canal_A2为一组,conf目录下配置instance1,instance2,instance3,instance4
canal_B1和canal_B2为一组,conf目录下配置instance5,instance6,instance7,instance8
相应的消费端同理,一组只消费1,2,3,4,另一组只消费5,6,7,8
The text was updated successfully, but these errors were encountered: