Since StackOverflow endorses answering your own question: I have the answers after deploying a cluster with horizontally scaled writes myself. There weren't any good how-to guides on this so here goes.
Brief preamble: Citus deprecated sharding, what they also call "statement based replication" (not to be confused with statement based replication in general) years ago. HA and fault tolerance are now achieved by 1. having a coordinator cluster and 1+ worker clusters, and 2. bringing your own cluster admin tools like Patroni. This migration solved subtle but serious deadlock scenarios plaguing the sharding/statement-based replication strategy.
Terminology:
Citus' documentation often uses "the coordinator" or "a worker" to refer to the coordinator leader or to a worker group's leader. I'll try to avoid that ambiguity below.
Citus mostly deals only with the leader for each group. The main exception to this is the citus.use_secondary_nodes
GUC. Another exception is Citus has a metadata table with all nodes tagged with their leader or follower status. This table is used to direct DDL and DML statements to the correct node within each group/cluster. Your bring-your-own HA solution such as Patroni is responsible for updating this table correctly.
Concise Guide:
citus.use_secondary_nodes = never
and add more worker clusters; never
means all queries are sent to the leader of each worker cluster, so scaling requires adding worker clusterscitus.use_secondary_nodes = always
and add followers to all worker clusters; always
means queries are only sent to replicas within each groupAdding worker clusters to scale writes likely seems counterintuitive. There are two reasons for this: