В PHP мы создаем различные файлы на наших серверах. Проблема в том, что у нас есть два сервера с балансировкой нагрузки. Как лучше всего синхронизировать созданные файлы между ними? Есть ли какая-то обычная практика, о которой я никогда не слышал?
4 ответа
# 1: Вы можете позволить ОС делать всю работу. Предполагая, что вы используете среду Microsoft Windows, DFS будет самым простым решением (с точки зрения административной работы). Вы должны настроить контроллер домена, для которого требуется версия Windows Server R2 (будь то 2003 или 2008).
# 2: Не создавайте файлы на собственном жестком диске серверов с балансировкой нагрузки. Вы должны отделить обработку файлов от веб-сервера и использовать внешнее хранилище.
Совместное хранение - путь. Мы используем NAS, чтобы сделать файлы доступными для всех серверов.
Ну, односторонняя синхронизация была бы легко с rsync. Как насчет двунаправленного? Я сделал быстрый Google, и кажется, что это возможно.
В нижней части этой ссылки вы найдете метод.
Ваш балансировщик нагрузки должен позволить вам настроить его так, чтобы все запросы от одного конкретного клиента всегда направлялись на один и тот же сервер с балансировкой нагрузки. Когда он включен, каждый раз, когда файл создается для клиента, он появляется при последующих запросах от того же клиента. Однако не очень хорошо работает, если, например, Клиент А инициирует создание файла для Клиента Б.
Вы можете рассмотреть сервер базы данных. Например, если ваши созданные файлы хранят информацию о сеансе, вместо этого сохраните эти данные в базе данных, на которую указывают оба веб-сервера (вы можете добавить репликацию здесь, чтобы сохранить нагрузку распределенной, если вы хотите / нуждаетесь). Если это не данные сеанса, рассмотрите возможность хранения данных, необходимых для генерации файлов в этой базе данных, и генерируйте фактический файл только по запросу, когда извлекаете эти данные из базы данных; не может быть применимо в вашей ситуации, хотя.
Наконец, вы можете рассмотреть общее и / или реплицированное хранилище. DFS в среде Windows - хорошее решение для репликации; NFS или SMB могут быть применимы, или SAN; в основном все упомянутое @karatedog.
Еще один вариант для рассмотрения - это файлово-ориентированное решение для базы данных, такое как MongoDB, которое в основном принимает форму базы данных, служащей централизованным хранилищем файлов. Поместите туда свои файлы, и любой из серверов сможет потом снова их вытащить.