心跳的目的是为了实时探知后端数据源的运行情况,Cobar是通过向后端数据源执行一条SQL语句,根据该语句的返回结果判断数据源的运行情况。
该SQL语句可以由用户自定义,下面是一种简单的配置方式
<
property
name
=
"heartbeat"
>select user()</
property
>
|
这种方式无需数据准备,但不能够判断数据源读写是否全部正常,更多的情况,我们在每个数据源的schema中新建一个心跳表xdual,
# 注意:需要在每个数据源中都新建这张表
create
table
xdual(
id
int
not
null
,
gmt datetime,
primary
key
(id))
|
心跳表中准备至少一条数据, 让Cobar每次心跳对这条数据进行update,根据update的结果判断心跳是否正常。
<
property
name
=
"heartbeat"
>update xdual set x=now() where id = 1}</
property
>
|
如果您部署了Cobar集群,集群中的每个Cobar节点都会向数据源执行update语句,为了提高心跳效率,尽量避免两个Cobar节点同时update一条数据
我们给出了一种优化方式,用户可以根据自己集群中的Cobar节点数在心跳表xdual中多准备几条数据,Cobar随机选择一条数据做更新,这样便可让每个Cobar节点尽量更新不同的数据
例如我们的每个集群有3-6个Cobar节点,我们向xdual表中准备10条数据,id分别为1-10,按照如下方式配置心跳:
# 该SQL含义是从1-10中随机选择一个id进行更新
<
property
name
=
"heartbeat"
>update xdual set x=now() where id=${(1,10)}</
property
>
|