
Я разместил две виртуальные машины на одной машине, одна из них активна по своей природе, т. е. размещает службу и подключена к клиенту (клиент работает непосредственно на хост-машине). Мне нужно реализовать отказоустойчивую службу, т. е. при отказе основной виртуальной машины клиент автоматически подключается к вторичной виртуальной машине, учитывая, что обе виртуальные машины размещают одну и ту же службу.
Я где-то читал о плавающих IP, но когда я проверил, я обнаружил, что это платная услуга. Есть ли какой-то простой способ сделать это, не требующий никаких денег?
Машина работает на базе Linux, а именно, хост — Ubuntu 20.*, а виртуальные машины — Ubuntu 18.*.
решение1
Вы можете получить «плавающие IP-адреса», также известные как VIP или виртуальные IP-адреса, с помощью одного из следующих способов:
- поддержка активности (VRRP)
- кардиостимулятор/коросинхронизатор
- карп (http://manpages.ubuntu.com/manpages/precise/man4/carp.4freebsd.html)
К вашему сведению: вы также можете добиться избыточности в клиенте, позволив ему выбирать работоспособные серверы из списка.
обратите внимание, что реализация избыточности между виртуальными машинами натот же хостне рекомендуется. (хост является единой точкой отказа)
решение2
Я предлагаю вам использовать обратный прокси в качестве балансировщика нагрузки перед вашими приложениями/виртуальными машинами. Вы можете использовать что-то вроде nginx
илиhaproxy
Конфигурация nginx будет выглядеть примерно так:
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server 192.0.0.1 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
}
он автоматически реализует проверки работоспособности вышестоящих хостов, поэтому если какой-либо вышестоящий хост выйдет из строя, это будет автоматически обнаружено nginx, который прекратит отправлять запросы неработоспособным хостам.
Подробнее можно прочитать здесь: https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/