jdbc 链接串 gclusterid引起集群作业在两套集群乱调用的问题
前景:一个应用程序发起的集群A和集群B的两个作业 都是使用jdbc调用,作业出现A集群的作业跑到了B集群 导致报错,作业失败
补充:之前作业是正常的,后续在jdbc里配置负载均衡时,添加了后续的gclusterid参数
经查看,是由于jdbc链接串里 两个集群的jdbc连接串的gclusterid是一致的,导致两个集群被划分成一个组,作业在一个大的ip内进行循环
高可用串:
String dbUrl ="jdbc:gbase://192.168.1.56:5258/test?user=gbase&password=gbase20110531&failoverEnable=true&hostList=192.168.1.57,192.168.1.58";
解释:
连接高可用功能是按照hostList参数配置的IP顺序获取节点,尝试连接,如果某个IP连接成功,则直接返回这个节点的连接,如果所有节点都不能连接,则抛出异常。 连接高可用功能,只保证获取可用连接,并不能保证连接的均匀分布 。
高可用和负载均衡串:
String dbUrl ="jdbc:gbase://192.168.1.56:5258/test?user=gbase&password=gbase20110531&failoverEnable=true&hostList=192.168.1.57,192.168.1.58&gclusterId=gcl1";
failoverEnable: 是否开启高可用。
hostList:集群节点的IP列表,以逗号分隔, hostList中不需要包含url中的主IP。
gclusterId: 不同的gclusterId会创建不同的列表,用于区分被连接的集群,要求必须以a-z任意字符开头的可以包含a-z、 0-9所有字符长度为最大为20的字符串
解释:
高可用负载均衡功能是将url中的IP和hostList中的IP放入一个列表中,当应用获取连接的时候, JDBC会从列表表中顺序获取IP创建连接,每个IP获取一个连接,从而实现连接的负载均衡,
同时,当列表中的IP不可连接时,JDBC会顺序获取列表中的下一个IP,获取连接,如果无可用连接时,将抛出异常。也就是说高可用负载均衡功能既实现了连接负载均衡功能,也实现了高可用功能。
怎么理解这个gclusterid?
gclusterid可以理解为一个组名称,两个集群的IP应该分配到不同的组里,否则JDBC会将两个集群的IP放到一个组里,应用每次获取链接,JDBC会顺序从组里获取一个IP进行链接,如果两个集群在同一个组里,就会出现把任务分配到两个集群的情况
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526