Redundancy : trigger failover by scripting

Hello,

Is it possible to trigger a failover using scripting ?

Thanks !

not sure about newer versions but in older versions on a project that I setup with redundancy I would call a batch file thru a gateway script that would stop the gateway service. this was on the primary gateway. You would have to manually start it back up to fail back to primary.

Can you explain what you use case for this is?

Thanks for the idea but I would like to force the failover without shutting down the gateway.

I need to force a failover, the same action done by the event of pressing the button in the redundancy settings in the gateway. But I would like to trigger this action by scripting so that it is not necessary to log to the gateway settings.

That isn’t how Ignition’s redundancy works. The Gateway service hast be stopped in some way for a failover to occur. There is no scripting method available that will, by it’s self, stop the Gateway Service (for obvious reasons).

Okay, but why? I understand what you would like to accomplish, but I don’t understand what you are trying to determine by forcing a failover.

It is our customer specification, for instance we would like to trigger a failover if the master’s CPU is above a certain value.

The only way to force a failover is to shutdown the gateway service.

You could use system.util.sendMessage() to send a message handler on the gateway and then use system.util.execute() to run the gateway shutdown .bat (on windows) file.

You would still have to manually restart the service.

However, I wouldn’t recommend this. If you need to force a failover due to some OS issue, then you need to be looking at the OS at which point you can just run the shutdown script manually.

EDIT: Nope, I’m just wrong.

Thank you for your answer. So the action performed by the gateway when the button"forceFailover" is pressed is only to stop and start the active gateway ?

We don’t currently have a supported mechanism for this, but the most basic action can be achieved with:

from com.inductiveautomation.ignition.gateway.redundancy.types import ActivityLevel
from com.inductiveautomation.ignition.gateway import IgnitionGateway

redundancy_manager = IgnitionGateway.get().getRedundancyManager()
redundancy_manager.requestPeerActivityLevel(ActivityLevel.Active)

The above effectively requests the peer to become Active. There are some System tags available for discovering the current state of redundancy (that might be handy for deciding when to invoke the above).

3 Likes

This is not correct. That action is in the gateway web interface, so there clearly has to be code in java to make it happen.

2 Likes

thank you