
В настоящее время я разрабатываю сервис OpenVPN, который обеспечит интернет-пользователям повышенную конфиденциальность.
На данный момент я намерен использовать выделенные серверы под управлением CentOS и Xen, чтобы предоставить нескольким доменам по одному серверу OpenVPN для обеспечения высокой доступности и балансировки нагрузки.
Если один domU выйдет из строя, я хочу автоматически поднять второй domU на том же хосте. Возможен ли такой тип отказоустойчивости?
Существуют ли какие-либо решения для балансировки нагрузки VPN-подключений к серверам domU?
решение1
Да, можно отслеживать состояние Xen DomU и запускать произвольные команды, если DomU выходит из строя. Вы можете запустить экземпляр демона Monit на третьем хосте (DomU или физическом), который проверяет основной OpenVPN DomU и сообщает Dom0 о необходимости запустить вторичный DomU, если основной вышел из строя. В документации Monit есть много примеров, которые покажут, как это реализовать:
Да, OpenVPN имеет некоторые встроенные возможности обеспечения высокой доступности и/или распределения нагрузки, и его довольно просто настроить.
Во-первых, вы будете запускать несколько серверов OpenVPN параллельно, каждый из которых будет слушать свой собственный IP-адрес. Серверы не делятся состоянием и ничего не знают друг о друге.
Затем вы указываете несколько опций '--remote' либо в командной строке, либо в конфигурационном файле клиента OpenVPN. Когда клиенту доступны несколько опций удаленного сервера, он случайным образом выберет одну и подключится к ней. Если этот сервер не удаётся, он попытается подключиться ещё раз, а затем случайным образом выберет другой сервер, если подключение не удаётся. Для получения дополнительной информации см. документацию OpenVPN здесь:
Возможно, вам будет интересно увидеть мой ответ на аналогичный вопрос здесь:
Как я уже отмечал в другом своем ответе, вам, вероятно, стоит обратить внимание на следующие клиентские опции, в частности:
- подключиться-повторить попытку
- подключиться-повторить-макс
- удаленно-случайный
- ifconfig-pool-persist
Конечно, это не настоящая балансировка нагрузки, потому что клиент OpenVPN не выбирает сервер с наименьшей нагрузкой или наименьшим количеством клиентов — он просто выбирает сервер случайным образом. Если вам нужна настоящая балансировка нагрузки, чтобы гарантировать, что нагрузка на серверы остается равномерной, вам нужно будет найти какое-то выделенное решение для балансировки нагрузки, либо аппаратное, либо программное.
решение2
Возможно, вы могли бы настроить две VM domU как два узла обычного кластера Linux HA. Но я думаю, что эта конфигурация может работать, только если второй узел находится в режиме ожидания, а не выключен. Если вы хотите, чтобы резервный узел domU запускался, если первый не работает, я думаю, вам нужно написать скрипт на уровне dom0, который будет работать вечно, проверяя работоспособность первого узла и в случае сбоя принудительно отключая его полностью и запуская резервную копию (я не думаю, что такой скрипт оболочки должен быть слишком сложным, или, может быть, вы можете использовать какое-нибудь хорошее программное обеспечение для Linux, которое может выполнить эту работу, но это может быть более навязчиво).
Также для этого вы можете рассмотреть две виртуальные машины, как обычные машины Linux, и установить и использовать стандартное решение Linux для балансировки нагрузки.
решение3
Для настройки кластера OpenVPN HA вы можете использовать комбинацию OpenVPN, WAN Load Balancing и OSPF. Здесь есть свежий HOWTO: http://www.vyatta4people.org/highly-available-openvpn-connection-between-two-offices/ Наслаждаться!