The replication.mode sync-all option allows creating or converting all cluster members as synchronous replicas. As indicated in the CRD reference the synchronous replicas are not tightly coupled to the leader since Patroni will turn off synchronous replication if no more replicas are available.
Setting up such an option is quite simple as all the provided options. Look that the number of syncInstances is set to 1 intentionally to demonstrate that sync-all overrides the syncInstances variable.
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:
namespace: failover
name: sync-cluster
spec:
postgres:
version: '16.1'
instances: 4
sgInstanceProfile: 'size-s'
pods:
persistentVolume:
size: '10Gi'
configurations:
sgPostgresConfig: 'pgconfig1'
sgPoolingConfig: 'poolconfig1'
observability:
prometheusAutobind: true
nonProductionOptions:
disableClusterPodAntiAffinity: true
replication:
mode: sync-all
role: ha-read
syncInstances: 1
$ kubectl -n failover exec -it sync-cluster-0 -c patroni -- patronictl list
+ Cluster: sync-cluster (7373750354182599290) -----+-----------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+----------------+------------------+--------------+-----------+----+-----------+
| sync-cluster-0 | 10.244.0.11:7433 | Leader | running | 2 | |
| sync-cluster-1 | 10.244.0.10:7433 | Sync Standby | streaming | 2 | 0 |
| sync-cluster-2 | 10.244.0.4:7433 | Sync Standby | streaming | 2 | 0 |
| sync-cluster-3 | 10.244.0.8:7433 | Sync Standby | streaming | 2 | 0 |
+----------------+------------------+--------------+-----------+----+-----------+