Has anyone run Mosquitto or VerneMQ across regions?
Don't. MQTT bridges with latency >50ms get weird with QoS 1/2 handshakes. You end up with message duplication or head-of-line blocking.
Run two independent brokers, shard by device location. Accept that a device in EU talking to a device in US has 100ms+ latency between brokers. If that's unacceptable, you need a single broker and accept latency for the far devices.
This. I white-label hosting for clients who don't understand why their Toronto office can't get <10ms to a server in Vancouver. I show them the speed of light calculation, they nod, they still complain.
My solution: set expectations in the contract. "Response times under 100ms for users in North America." Then put the server in Chicago and hope.
Vultr Chicago is $5, Vultr Toronto is $5, latency between them is 15ms. I pick based on client superstition about data residency.