为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
我在进行压力测试的时候,是通过jdbc连接TiDB集群的某一台节点,然后通过jdbc调用tidb执行复杂SQL来进行分析的。
在监控界面,在进行复杂SQL分析的时候,这个SQL开启10个并行的程序,每个程序执行同一个SQL。10个SQL并行执行,共占用了70多个G。问题是,这70多个G,全都在一个tidb节点上,很容易导致tidb宕机。
我的问题是,为什么PD节点不进行复杂均衡,把这个10个并行的SQL分配到不同TiDB节点上运行,而是10个SQL全都集中在一个TiDB节点上执行?
tidb内存监控,可以发现,所有的SQL都在同一个tidb节点上执行的,没有用上3台tidb节点,只用上了一台
我的jdbc调用方式
请问如何做节点间SQL执行的负载均衡?
yilong
(yi888long)
2
好的,我配置上了。用的是roundrobin的负载均衡方式。
不过我还有两个问题:
1、PD节点,不是会自动实现负载均衡吗?我记得PD节点就是用于进行调度和负载均衡的。
2、即使用上了HaProxy负载均衡,也存在宕机的情况,我是用while循环来调用jdbc的,一次分析完,立马进行下一次分析,每次分析在10多秒。请问能不能实现一个队列?就像Yarn,或者Impala一样,将任务放在队列里面,如果没有资源了,就等待着,等到有资源了再执行?
3、这个HAProxy的roundrobin策略,为什么没有按照轮训的方式来分配呢?包括 leastconn策略我也试来着,分配的也不均匀。我是jdbc长连接。我有三台节点,有的就是并发为3,有的并发为1,有的并发为0。我用ngnix,可以实现相同的功能吗?我打算用ngnix,这个熟悉一点
4、TiDB组件的自动重启功能挺好的,比如tidb节点挂了,可以自动重启。请问如果tidb节点压力大,自动重启了,那后期再来请求的话,会自动判定这个节点已经可用是吧。
目前节点之间的任务分布就很不均匀,使用的是 leastconn策略