Confusion regarding datastores

Newbie question regarding storage.
Right now my infrastructure consists for three hosts (one of those also runs opennebula front end).

Current setup is that each host has its own datastores which are not related in any way:
/var/lib/one/datastore/0 (system)
/var/lib/one/datastore/1 (default)
/var/lib/one/datastore/2 (files)

When adding new images via front end host, I basically manually sync across all nodes from front end host’s /var/lib/one/datastore/1 datastore.

Also since those stores are independent of each other, another problem arises:
Let’s say that host that runs front end has 30gb of available storage and host3 has 300gb. When trying to launch new vm, only front end host storage is checked, and if I try to launch vm with 50gb disk, it fails saying that there is no capacity (though actually there is, on host3 datastore).

So as you can see my current setup (which luckily does not run anything production-grade) is completely broken. But I’m not sure how I should fix it?

I could add shared network storage and mount it as a datastore on all hosts. But then how can I use local host storage? Each node has ~400GB of storage which i don’t want to waste.

I could probably expose storage on each of the hosts, and mount in on every host. But if I understand correctly if one of the hosts goes down (hardware failure) I will not only loose VMs runing on that host, but also any other VMs that were placed on this hosts datastore.