--- title: Downgrade etcd from v3.7 to v3.6 weight: 6600 description: Processes, checklists, and notes on downgrading etcd from v3.7 to v3.6 categories: [Task] upstream_link: "https://github.com/etcd-io/website/blob/824597935df6e95992ef61c07e3222f4f796ca6c/content/en/docs/v3.7/downgrades/downgrade_3_7.md" aliases: [/etcd/downgrades/downgrade_3_7/] --- In the general case, downgrading from etcd v3.7 to v3.6 can be a zero-downtime, rolling downgrade: - one by one, stop the etcd v3.7 processes and replace them with etcd v3.6 processes - after enabling the downgrade, new features in v3.7 are no longer available to the cluster Before [starting a downgrade](#downgrade-procedure), read through the rest of this guide to prepare. ### Downgrade checklists Highlighted differences between v3.7 and v3.6: #### Difference in flags v3.7 does not introduce any new flags, so a v3.6 process accepts every flag of a v3.7 configuration and no configuration changes are required when downgrading. > [!NOTE] > The diff is based on version v3.7.0-rc.0 and v3.6.13. The actual diff would be dependent on your patch version, check with `diff <(etcd-3.7/bin/etcd -h | grep \\-\\-) <(etcd-3.6/bin/etcd -h | grep \\-\\-)` first. The deprecated `--experimental-*` flags that were removed in v3.7 still exist in v3.6, but do not re-add them after the downgrade; use their non-experimental equivalents or `--feature-gates` entries, which work on both versions. #### Difference in Prometheus metrics ```diff # metrics not available in v3.6 -etcd_server_request_duration_seconds -etcd_debugging_server_watch_send_loop_control_stream_duration_seconds -etcd_debugging_server_watch_send_loop_progress_duration_seconds -etcd_debugging_server_watch_send_loop_watch_stream_duration_seconds -etcd_debugging_server_watch_send_loop_watch_stream_duration_per_event_seconds ``` ### Server downgrade checklists #### Downgrade requirements To ensure a smooth rolling downgrade, the running cluster must be healthy. Check the health of the cluster by using the `etcdctl endpoint health` command before proceeding. #### Preparation Before downgrading etcd, always test the services relying on etcd in a staging environment before deploying the downgrade to the production environment. Before beginning, [download the snapshot backup](/docs/etcd/op-guide/maintenance/#snapshot-backup). Should something go wrong with the downgrade, it is possible to use this backup to [rollback](#rollback) back to existing etcd version. Before beginning, download the latest release of etcd v3.6. #### Mixed versions While downgrading, an etcd cluster supports mixed versions of etcd members, and operates with the protocol of the lowest common version. The cluster is considered downgraded once downgrade is enabled by `etcdctl downgrade enable 3.6`. Internally, the overall cluster version is set to the downgrade target version, which controls the reported version and the supported features. #### Rollback Before downgrading your etcd cluster, please create and [download a snapshot backup](/docs/etcd/op-guide/maintenance/#snapshot-backup) of your etcd cluster. This snapshot can be used to restore the cluster to its pre-downgrade state if needed. If users encounter issues during the downgrade, they should first identify and resolve the root cause. If the downgrade has started after running `etcdctl downgrade enable`, and the cluster is still in a mixed-version state, where at least one member remains on v3.7, users can cancel the ongoing downgrade process by running `etcdctl downgrade cancel`, and restarting all the downgraded members with the original v3.7 binaries. Once all members have been downgraded to v3.6, the cluster is considered fully downgraded. If users wish to return to the original version after a full downgrade has completed, they should follow the official [upgrade guide](/docs/etcd/upgrades/upgrade_3_7/) to ensure consistency and avoid data corruption. ### Downgrade procedure This example shows how to downgrade a 3-member v3.7 etcd cluster running on a local machine. The output below is from a real run against etcd v3.7.0-rc.0 and etcd v3.6.13 on a single host with three loopback ports, on a cluster that was upgraded from v3.6.13 shortly before. #### Step 1: check downgrade requirements Is the cluster healthy and running v3.7.x? ```bash etcdctl --endpoints=localhost:2379,localhost:22379,localhost:32379 endpoint health < [!NOTE] > Once downgrade is enabled, the cluster will remain operating with v3.6 protocol even if all the servers are still running the v3.7 binary, unless the downgrade is canceled with `etcdctl downgrade cancel` #### Step 5: stop one existing etcd server Before stopping the server, check if it is the leader. We recommend downgrading the leader last. If the server to be stopped is the leader, you can avoid some downtime by `move-leader` to another server before stopping this server. ```bash etcdctl --endpoints=localhost:2379,localhost:22379,localhost:32379 move-leader 729934363faa4a24 < [!NOTE] > Unlike v3.5, the v3.6 status endpoint does report the downgrade info, so downgraded members keep showing `DOWNGRADE ENABLED` as true and their storage version until the downgrade completes. #### Step 7: repeat *step 5* and *step 6* for rest of the members When all members are downgraded, the downgrade is automatically completed and `DOWNGRADE ENABLED` is reset to false. Check the health and status of the cluster, and confirm the minor version of all members and the storage version are v3.6: ```bash etcdctl --endpoints=localhost:2379,localhost:22379,localhost:32379 endpoint status -w=table <