Another update with some further test results and a new question...
I set up another test cluster to go through the upgrade process again; a 2-node cluster on Windows, running RabbitMQ 3.6.1 with OTP 18.2.1. I have system environment variables set for ERLANG_HOME, RABBITMQ_BASE, and RABBITMQ_MNESIA_DIR. I had the nodes clustered, with an ha-all policy set up for a test queue to mirror messages. Before the upgrade I published a message to the queue but did not consume it.
I first shut down node 2, then node 1. On node 1 I installed the newer OTP (20.3), then updated the ERLANG_HOME variable to the new path.
Before running the RabbitMQ 3.7.6 installer (originally I had written 3.7.5, actually I am going to 3.7.6), I copied my existing erlang cookie to both C:\Windows\System32\config\systemprofile and C:\Windows\SysWOW64\config\systemprofile .
I ran the 3.7.6 Windows installer and it installed and started RabbitMQ successfully. According to the startup log on node 1, it did indeed use my existing cookie (same hash as pre-upgrade), and I was immediately able to successfully use the CLI to check status. At that point the only thing off is that my test queue no longer showed a message being present.
Next I followed similar steps on my node 2 server. I installed the new OTP on node 2 server, then prior to upgrading RabbitMQ I copied my existing erlang cookie from the cluster over to *both* systemprofile folders.
I ran the 3.7.6 installer on node 2 and it successfully installed and started the service. Again, on node 2, the RabbitMQ log showed it started up with my old cookie hash, and I was able to connect using the CLI. *Added bonus* was that it appeared to redetect the cluster; after logging into the web console (I didn't have to reinstall that either), it showed both nodes and appeared to correctly mark the mirrors, etc.
All in all, that process seemed to work the best with my expectations so far, except that the messages on the queue did not persist through the upgrade. The test queue is marked as durable, with mirroring. I don't know that the mirroring really comes into play anyway since my test message I created was originally created on node 1 in the first place, but they were synchronized before the upgrade anyway.
Should I expect messages to persist through the upgrade? Did I miss some other part of the process?
Thanks for any advice,
Peter