From: Maximiliano Sandoval <m.sandoval@proxmox.com>
To: Friedrich Weber <f.weber@proxmox.com>
Cc: pve-devel@lists.proxmox.com
Subject: Re: [PATCH pve-cluster 2/2] api: cluster config: create new clusters with lower token coefficient
Date: Mon, 16 Feb 2026 17:00:29 +0100 [thread overview]
Message-ID: <s8ocy247k6a.fsf@proxmox.com> (raw)
In-Reply-To: <20260212115928.148999-3-f.weber@proxmox.com> (Friedrich Weber's message of "Thu, 12 Feb 2026 12:57:56 +0100")
Friedrich Weber <f.weber@proxmox.com> writes:
A comment below
> corosync makes use of several timeouts, in particular the token and
> consensus timeouts. The sum of these two timeouts yields the minimum
> time a cluster needs to reestablish a membership after a token loss
> due to a complete node failure.
>
> By default, corosync sets the timeouts based on the cluster size [1]:
>
> token timeout = token + (#nodes - 2) * token_coefficient
> consensus timeout = 1.2 * token timeout
>
> token defaults to 3000ms, token_coefficient defaults to 650ms.
>
> With more than ~30 nodes in the default settings, the sum of token and
> consensus timeouts gets close to or exceeds 50-60s. As a result, after
> a token loss due to a complete node failure in an HA cluster, the
> watchdog may fence nodes because it takes too long to reestablish a
> new membership and quorum.
>
> One way to avoid this is to lower the sum of the token and consensus
> timeouts. The consensus timeout is intentionally slightly larger than
> the token timeout [2], so the definition of the consensus timeout in
> terms of the token timeout should be preserved. Since it does make
> sense to define both timeouts in terms of the cluster size, the most
> viable option to lower the timeouts appears to be to adjust the
> token_coefficient. Experiments suggest that the default 650ms is
> overly conservative considering the low-latency network requirements
> postulated in the admin guide [3].
>
> Hence, create new clusters with a default token coefficient of 125ms.
> This keeps the sum of token and consensus timeouts well below 50s for
> realistic cluster sizes. Users who prefer a larger token coefficient
> can manually override the token coefficient when creating a cluster
> via pvecm create. The token coefficient can also be changed for an
> existing cluster, this will be documented separately.
>
> Note that knet_ping_interval and knet_ping_timeout are derived from
> the token timeout, hence, a lower token coefficient will result in
> more frequent kronosnet pings and shorter ping timeouts.
>
> With this change, newly created clusters will always set an explicit
> token_coefficient in their corosync.conf.
>
> [1] https://manpages.debian.org/trixie/corosync/corosync.conf.5.en.html#token_coefficient
> [2] https://github.com/corosync/corosync/commit/b3e19b29058eafc3e808ded7f4c2440c3f957392
> [3] https://pve.proxmox.com/pve-docs/chapter-pvecm.html#pvecm_cluster_network_requirements
>
> Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
> ---
> src/PVE/API2/ClusterConfig.pm | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/src/PVE/API2/ClusterConfig.pm b/src/PVE/API2/ClusterConfig.pm
> index 1bc7bcf..8df257a 100644
> --- a/src/PVE/API2/ClusterConfig.pm
> +++ b/src/PVE/API2/ClusterConfig.pm
> @@ -111,12 +111,21 @@ __PACKAGE__->register_method({
> minimum => 1,
> optional => 1,
> },
> + 'token-coefficient' => {
> + type => 'integer',
> + description => "Token coefficient to set in the corosync configuration.",
> + default => 125,
> + minimum => 0,
>From man 5 corosync.conf's token_coefficient documentation: "This value
can be set to 0 resulting in effective removal of this feature.". If we
want to expose setting this to 0 I would document that it has a special
meaning and what does this entail. I would personally feel more
comfortable setting `minimum => 1` for now instead.
> + optional => 1,
> + },
> }),
> },
> returns => { type => 'string' },
> code => sub {
> my ($param) = @_;
>
> + $param->{'token-coefficient'} //= 125;
> +
> die "cluster config '$clusterconf' already exists\n" if -f $clusterconf;
>
> my $rpcenv = PVE::RPCEnvironment::get();
--
Maximiliano
next prev parent reply other threads:[~2026-02-16 15:59 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-12 11:57 [PATCH cluster/docs 0/3] create new corosync " Friedrich Weber
2026-02-12 11:57 ` [PATCH pve-cluster 1/2] corosync: create config: allow setting " Friedrich Weber
2026-02-12 11:57 ` [PATCH pve-cluster 2/2] api: cluster config: create new clusters with lower " Friedrich Weber
2026-02-16 16:00 ` Maximiliano Sandoval [this message]
2026-02-16 19:36 ` Thomas Lamprecht
2026-02-17 12:44 ` Maximiliano Sandoval
2026-02-17 12:50 ` Friedrich Weber
2026-02-16 16:09 ` Maximiliano Sandoval
2026-02-12 11:57 ` [PATCH pve-docs 1/1] pvecm: config: document how to change the " Friedrich Weber
2026-02-13 10:12 ` Friedrich Weber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=s8ocy247k6a.fsf@proxmox.com \
--to=m.sandoval@proxmox.com \
--cc=f.weber@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox