Yes, it's possible to monitor the status of a Xen DomU, and to run some arbitrary command if the DomU fails. You could run an instance of the Monit daemon on a third host (DomU or physical) that checks the primary OpenVPN DomU, and tells the Dom0 to fire up the secondary DomU if the primary has failed. The Monit documentation has a lot of examples that can show you how to implement this:
Yes, OpenVPN has some high-availability and/or load-sharing capabilities built in, and it's pretty simple to set up.
First, you'll be running multiple OpenVPN servers, in parallel, with each server listening on its own IP address. The servers don't share state, and they don't know anything about each other.
Then, you specify multiple '--remote' options, either on the command line or in the OpenVPN client's config file. When the client has multiple remote server options available to it, it'll randomly choose one and make a connection to it. If that server fails, it will re-try the connection, and then randomly choose a different server if it fails to connect. See the OpenVPN docs, here, for more information:
You may want to see my answer to a similar question, here:
As noted in my other answer, you'll probably want to pay attention to these client options, in particular:
- connect-retry
- connect-retry-max
- remote-random
- ifconfig-pool-persist
Of course, this isn't true load-balancing, because the OpenVPN client doesn't select the server with the lowest load, or the least clients--it just randomly picks a server. If you need true load balancing to ensure that the server loads stay equalized, you'll need to find some kind of dedicated load balancing solution, either hardware or software.