The different servicecontrol/servicepulse instances can be taken offline for a bit without a problem.
Some historical audit data can get lost etc…
However no (0) unhandled ‘Failed Messages’ can get lost during the migration…
We also have producers going to a Azure Service Bus queue and there it’s just a matter of shutting one SC down, migrating the data to new machine and starting up again but MSMQ is more strictly tied to the actual physical instance…
Setup message forwarding between [error|audit]@appserver1 and [error|audit]@appserver2 until all endponts have their configuration migrated.
Unfortunately, version 4.33.2 of ServiceControl is running on top of ESENT (used by RavenDB 3.5) which does not provide storage format compatibility between major versions of Windows. As a result, the migration process will need to be more complicated.
I would suggest the following migration plan:
Install new error and audit instances on appserver2
Upgrade ServiceControl on appserver1 to the latest 4.* release.
At this point, you can configure ServicePulse to use the new instance (running on appserver2) and it will give you access to all the historical data (both error and audit) as well as to the new messages arriving at error and audit queues both on appserver1 and appserver2.
After the audit message retention period on appserver1 elapses you can safely remove the old audit instance. Once, all endpoints are migrated to use [error|audit]@appserver2 you can remove the message forwarding.
I hope this is helpful. If you have any questions please let me know.
I’m at the fourth bullet point, setting up forwarding.
Your plan mentions running a self-written forwarder, can the same be achieved with the built-in forwarding in ServiceControl?
And do I have to disable ingestion?
It’s not possible to ingest on appserver1 and have it forward the same message to appserver2 (where it in turn can be ingested)?
Sorry to be hammering on the same nail , but I haven’t found much documentation concerning the ingestion logic and being able to just use the existing running Windows service to do the forwarding would be quite helpful.
You could keep it on, but I would still advise to go with turning off the ingestion. More details in my second answer.
Keeping the ingestion on would mean that until ServiceControl instances on appserver1 are decommissioned both old and new instances of ServiceControl ingest error (and audit) messages.
As a result, migrating the error messages from the old instance would require you to figure out in the UI, what are the old (stored only in the old instance) vs. the new errors (stored locally but also forwarded) for a given endpoint. In principle, this could be done but in my opinion, introduces a significant risk of missing a message or ending up with a duplicated error.
I think you are asking very valid questions and I hope my explanations make the setup a bit clearer :).