Amazon масштабирует сервер базы данных веб-сервера

У нас есть веб-сервер на основе PHP, который размещен на AMI на Amazon EC2. Этот веб-сервер использует сервер MySQL, работающий на другом экземпляре RDS Amazon. Обе настройки работают отлично. Мы пытаемся масштабировать настройки, помещая их за балансировщиком нагрузки и ускоряя новые экземпляры, когда нагрузка идет вверх и вниз в другую сторону.

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

Я искал в интернете и читал документы Amazon, но все стало пустым.

Честно говоря, я также не знаю, является ли это вопросом, связанным с SO, или вопросом сайта SU или ServerFault. Пожалуйста, будьте снисходительны, если это не так.

0

Решение

Масштабирование сервера базы данных намного сложнее, чем масштабирование веб-сервера. Вам нужно будет создать экземпляры для чтения-реплики, что делает RDS довольно простым. Реплики для чтения синхронизируются с первичным экземпляром базы данных. Однако, как следует из названия, реплики для чтения являются экземплярами базы данных только для чтения. Любые команды вставки / обновления / удаления должны быть возвращены на основной сервер базы данных.

Это означает, что вы не можете использовать простую балансировку нагрузки для распределения нагрузки. Балансировщик нагрузки должен проверять каждый запрос SQL и понимать, какие команды могут отправляться на какие серверы. Elastic Load Balancer от Amazon не способен на это. Если вы ищете «Балансировщик нагрузки MySQL», вы можете найти множество статей и руководств по настройке программного обеспечения, такого как HAProxy, для интеллектуального распределения нагрузки по кластеру экземпляров MySQL.

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


В качестве примечания: поскольку вы используете MySQL в Amazon RDS, вам стоит взглянуть на базу данных Amazon Aurora. Он совместим с MySQL, поэтому вам не нужно менять ни одной строки кода, и, как правило, он работает лучше, чем MySQL. Если вы переключитесь на Aurora, вы можете обнаружить, что ваша база данных не является таким узким местом.

Amazon также недавно добавленная балансировка нагрузки поддержка Авроре. Благодаря этой новой функции у вас по-прежнему есть основная база данных для обновлений, но теперь вам нужно только отслеживать одну конечную точку чтения-реплики, которая будет распределять нагрузку запроса по всем вашим экземплярам чтения-реплики.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector