2016-10-01 3 views
0

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

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

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

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

ответ

1

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

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

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


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

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

+0

Большое спасибо Mark, приложение предназначено для того, чтобы иметь 100 000 пользователей и может увеличиться до 100x. Следовательно, масштабирование сервера базы данных является единственным решением, так как оно в конечном итоге станет узким местом, если используется экземпляр малого/среднего размера и будет чрезмерным и дорогостоящим, когда загрузка сократится. – Narayanan