search

Home  >  Q&A  >  body text

jdbc - java应用如何连接mysql5.7.17的group replication实现failover

三节点的MySQL Group Replication搭建完毕, 测试也都ok, 能够实现自动切换primary, 可以实现1个node的down机而不影响整个集群, 可是jdbc如何连接并实现自动切换呢?

比如我这么写

jdbc:mysql://node1:3306,node2:3306,node3:3306/testdb?failOverReadOnly=false

init status:
node1/2/3都ok, jdbc连接的是node1进行crud都ok, node2/3为standby, jdbc不访问他们
step1:
shutdown node1后, primary自动变为node2, 此时jdbc连接通过failover连接node2进行crud没问题
step2:
node1主机故障处理完毕, 启动node1的mysql, 这里就是罪恶的根源, 数据会全部乱掉

原因是此时刚刚启动node1的mysql, 还未加入到Group Replication(执行相关命令), 但是jdbc不知道, 因为连接串第一个是node1, 他认为能联通就是在node1上进行crud, 而更新操作不会同步到node2/3,这明显就是错误的, 应该仍然连接此时的primary节点就是node2, 不知道有没有好办法

我知道mycat可以实现这个, 利用mycat的writeHost, 并行写3个

<dataNode>
<wirteHost></<wirteHost>
<wirteHost></<wirteHost>
<wirteHost></<wirteHost>
</dataNode>

当mycat进行failover后, 只访问第二个writeHost, 如果第一个重启, 无影响, 还是访问第二个, 但是mycat终归不是针对group replication进行特别定制的, 而是以前老的replcation, 因为GR才刚刚GA, 不知道有没有好的办法

PHPzPHPz2777 days ago1244

reply all(0)I'll reply

No reply
  • Cancelreply