Тиражирование веб-сервера Linux

Я - планирование тиражирования веб-сервера в высоконадежных целях. Сервер работает как виртуальная машина Ubuntu 15.04 в Hyper-V и имеет MariaDB 10.0, Apache 2.4 и установленный PHP-FPM 5.6.

2-я виртуальная машина запустится как прямая копия этой виртуальной машины, но будет расположена в Соединенных Штатах. 1-я виртуальная машина расположена в Европе. (задержка составит приблизительно 80-120 мс),

Я хотел бы сохранить серверы в синхронизации, таким образом, они могут и служить тому же содержанию моим клиентам и так, чтобы клиенты использовали самый близкий сервер (для этого, я буду использовать Маршрут 53),

Важно, чтобы обмен данными между серверами был безопасен, чтобы защитить контактную информацию и другую информацию в базе данных и предотвратить изменение файлов в/var/www каталоге.

Я рассмотрел использование следующих опций для этого:

  • openvpn
  • Туннель SSH
  • SSL (TLS)

    1. Мой вопрос - который является самым надежным, самым быстрым (задержка, пропускная способность) и самый безопасный метод? Легкое обслуживание также хорошо иметь ;)

Я рассмотрел использование SSH, и для репликации баз данных и для репликации файлов. Однако я не уверен который приложение использовать для части репликации файлов.

  1. Как я должен установить репликацию файлов и какое приложение я должен использовать для этого?

SSL мог использоваться для репликации баз данных, но это требует поколения сертификатов, которые должны быть заменены время от времени и которые могут стоить денег.

Моя заключительная опция состоит в том, чтобы использовать openvpn, но я не уверен, могу ли я настроить это как дополнительную сеть вместо того, чтобы направить весь мой трафик по нему. Этот метод также, кажется, требует поколения файлов сертификата..

  1. Я хотел бы иметь способность добавить дополнительные серверы к процессу репликации в более поздний момент, возможно серверы окон.
5
задан 6 May 2015 в 07:49
3 ответа

rsync - отличный инструмент для синхронизации файлов. Я бы использовал его в сочетании с SSH (и открытыми ключами), например:

rsync -az -e ssh --delete /var/www otherserver:/var/www

Для нескольких серверов множественное использование rsync может быть лучшим вариантом. Другой вариант - pdcp -r , но он требует каждый раз копировать все файлы, а не выполнять дельта-передачу. Другими словами, это лучше для небольших объемов данных и большого количества серверов.

Как лучше всего выполнять репликацию базы данных, во многом зависит от того, что делает ваше приложение. Здесь есть много хороших советов в документации MariaDB и другие вопросы.

3
ответ дан 3 December 2019 в 01:06

Вам не нужны платные сертификаты TLS для личного общения. Вы можете настроить свой собственный ЦС (с очень долгосрочными сертификатами, в случае компрометации вы просто выбросите весь ЦС) и сделать так, чтобы ваши серверы доверяли ему, после чего вы можете выдавать столько сертификатов, сколько хотите для разных служб. Платные сертификаты необходимы только тогда, когда вы не можете надежно заставить удаленные узлы доверять вашему ЦС, например, как посетители вашего веб-сайта.

Если вам просто нужно использовать одну службу, которая поддерживает TLS (например, MySQL), используйте это и добавить дополнительный уровень безопасности, разрешая соединения только с IP-адресов вашего сервера на уровне брандмауэра.

Если вам нужно более одной службы, вам лучше использовать решение VPN. Не тратьте время на OpenVPN, ваше ядро ​​имеет встроенную поддержку IPSec, и вы можете ее использовать. Кроме того, он сразу же поддерживается в Windows, поэтому, если вы когда-нибудь развернете такие серверы, их будет легко настроить.

Это была легкая часть. Реальная сложность заключается в том, чтобы синхронизировать файлы вашего приложения, это легко, если ваше приложение использует только базу данных, но если это CMS общего назначения, есть большая вероятность, что она также изменяет свои собственные файлы по любой причине (обновления плагинов для пример) или создает новые (загружаемый пользователем контент и т. д.), и я не знаю надежного способа их синхронизации. Единственное решение, которое приходит на ум, - это либо NFS (и наличие только одного сервера, на котором размещены файлы, но это противоречит вашим требованиям к высокой доступности), либо GlusterFS, оба из которых будут работать довольно плохо с такой задержкой.

5
ответ дан 3 December 2019 в 01:06

Вы не упомянули, но я предполагаю, что вам нужна установка с несколькими мастерами. Это исключает установку базы данных «главный-подчиненный».

Я считаю, что какая технология использовать для обеспечения безопасности, будет меньше всего вас беспокоить.

1. Datababase

Поддерживать синхронизацию настройки базы данных с несколькими ведущими - непросто. Вы можете использовать настройки базы данных с несколькими ведущими (активными / активными), такие как MariaDB с Galera Cluster, но я не уверен, что это такая хорошая идея, учитывая географическое расстояние. Все записи будут синхронными для всех узлов базы данных. Задержка сильно повлияет на производительность базы данных. Кластеры баз данных, такие как Galera, обычно считаются хорошими кандидатами в рамках одной локальной сети. Однако с точки зрения производительности кластеры баз данных с несколькими главными обычно описываются как худшие, когда речь идет о «реальных» установках высокой доступности, когда узлы базы данных распределены по нескольким физическим местоположениям в глобальной сети. Прежде чем перейти к настройке базы данных с несколькими мастерами, сначала прочтите эту тему. Для начала ознакомьтесь с The Scale-Out Blog .

Вы также можете воспользоваться другим подходом и изучить SymmetricDS, который позволяет синхронизировать базы данных. Он использует триггеры для захвата операций CRUD базы данных. Он не будет реплицировать изменения схемы, пользователей или что-либо еще, кроме чистых данных. Однако это будет асинхронная репликация, и она не позаботится, например, о автоматически увеличиваются первичные ключи, как в кластере MariaDB Galera.

2. Файлы

Вы можете использовать центральный сервер NFS, но это лишит вас возможности использовать несколько мастеров (и не будет единой точки отказа). Я использовал csync2 (с lsyncd), чтобы обеспечить синхронизацию веб-узлов с успехом (rsync под капотом).

Общий совет

Вы делаете это для повышения производительности или для обеспечения высокой доступности? Если вы сделаете это для повышения производительности, единственное место и сервер Varnish впереди уведут вас далеко. Я знаю, что у вас все еще будет задержка, но вы сможете «сбрить» накладные расходы на сервер с помощью кэширования. Вы даже можете добавить серверы Varnish в других местах. Сложность будет значительно уменьшена (никогда не недооценивайте это; сохраняйте простоту). Добавьте к этому CDN для ресурсов (CSS, js, изображения и т. Д.), И вы, скорее всего, сможете предоставить пользователям США такое же удобство, как и европейским пользователям (если вы базируете свой сервис в Европе).

Если вы делаете это для обеспечения высокой доступности, тогда вам придется добавить сложности, введя репликацию.

3
ответ дан 3 December 2019 в 01:06

Теги

Похожие вопросы