Currently in config of metadata agent there is option to set IP address of nova metadata service (nova_metadata_ip).
There can be situation that there is more than one nova-api service in cluster and in such case if configured nova metadata IP will return e.g. error 500 then it will be returned to instance, but there can be situation that all other nova-api services are working fine and call to other Nova service would return proper metadata.
So proposition is to change nova_metadata_ip string option to list of IP addresses and to change metadata agent that it will try to make calls to one of configured Nova services. If response from this Nova service will not be 200, than agent will try to make call to next Nova service. If response from all Nova services will fail, then it will return lowest error code which will get from Nova (for example Nova-api-1 returned 500 and Nova-api-2 returned 404 - agent will return to VM response 404).
This makes sense, if we also round-robin a bit, we also enhance scalability.