开发者社区> 问答> 正文

node 负载均衡问题

配置了6个同步任务,每个任务我都选择了三个node节点,来保证node的高可用,开始测试的时候同步任务是均匀分布在各个node上的,但是后来使用过程中6个同步任务全都挤到一个node节点上了,另外两个node节点上没有同步任务,想问一下node对同步任务是怎么分配的,为什么会出现这种情况?

原提问者Github 用户 raisemeup

展开
收起
绿子直子 2023-06-16 15:13:16 45 0
3 条回答
写回答
取消 提交回答
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    选择多个节点,只是保证高可用,同时只会有1个节点处理一个pipeline中的se/tl节点。

    这点可以在pipeline的同步进度中看到使用的se节点, 这里做法是首先多个select node会竞争zk上的一个临时节点,mainstem? s->e->-t->l的过程是通过仲裁器来通知的,你可以看到配置pipeline时仲裁器有内存,自动,Zookeeper啥的 默认的自动,在s->e时使用内存通知也就是阻塞队列,e->t时是rpc,这时候有个负载均衡策略,也一样是在pipeline配置的,有随机,stick啥啥啥的,默认stick优先选上一次使用的t节点,t->l也是使用内存通知

    这个是任务的通知,在pipeline上的节点相当于拿到通知才得到授权,只有select是竞争的,其他都是上一个节点选择的 还有数据的传输,默认自动=内存+rpc+http,s->e时是内存方式,数据在队列里,e->t时同一node是内存方式,数据超过1M就会走http也就是aria2上传下载,数据小于1M走rpc本地缓存等待t节点远程拉取,也是在pipeline有配置的,一般选择rpc其实也可以。t->l数据也在内存里

    node是抢占式的,如果有节点出现不可用或者网络抖动,就会被存活的节点给抢占了任务。

    2023-06-16 16:07:01
    赞同 展开评论 打赏
  • 在 Canal 中,负载均衡是通过一个叫做 clientIdentity 的标识来实现的。当一个客户端连接到 Canal Server 时,会提供一个唯一的 clientIdentity,Canal Server 会根据这个标识将同步任务分配给不同的节点。如果你在创建同步任务时选择了多个节点,那么 Canal Server 会尝试将任务均匀地分配到这些节点上,以实现负载均衡。

    然而,如果你的某个节点的处理能力比其他节点更强,或者其他节点出现了故障,那么任务就有可能被集中在这个节点上。这种情况下,你可以通过手动调整同步任务的节点分配来实现负载均衡,或者增加节点的数量来提高整个系统的容错能力。另外,也可以通过监控节点的 CPU、内存等指标,及时发现节点负载过高的情况,从而采取相应的措施来避免负载不均衡的问题。

    2023-06-16 15:34:59
    赞同 展开评论 打赏
  • node是抢占式的,如果有节点出现不可用或者网络抖动,就会被存活的节点给抢占了任务

    原回答者Github 用户 agapple

    2023-06-16 15:22:27
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载