I guy's,
I've faced the same problem and here is how I did it :
Star a timer on some or all nodes of your cluster (when starting your verticle ie)
This would lead in duplicate timers BUT :
on each timer's callback you try to get an Hazelcast LOCK
only one node will get the lock so he will be the "current cluster master" for scheduling
only the node that has the lock can perform the callback action.
The other timers will do nothing if they don't have acquired the lock
so only the "master" will really trigger the action
The good thing with hazelcast locks is that : if the master node leaves the cluster the lock is automaticaly released
So on the next timer a new node will be able to get the lock and become the new master and trigger the action.
Using Locks is a good way only if specifics nodes launch the timer
If all nodes have the same role in the hazelcast cluster you can just use hazelcast cluster "oldest member" (check the api) to achieve this without lock (the oldest becomes the master and if it leaves a new one is the new oldest...)
In both case adding a new node the the cluster will work
Be careful (if it is important in your use case) to "sync" the timers if you don't want to have less than the delay each time a master leaves
Fred