Назад | Перейти на главную страницу

Балансировка нагрузки и производительность Amazon RDS

Мой вопрос простой. Можно ли выполнять балансировку нагрузки rds (мастер и реплики для чтения), используя тот же экземпляр haproxy, который используется для балансировки нагрузки приложений?

Это будет означать, что IP-адрес приложения и IP-адрес базы данных будут одинаковыми. Какой будет образец конфигурации для части mysql?

Например, для балансировки нагрузки приложений это примерно так:

backend php_app_servers
  balance roundrobin
  option redispatch
  option forwardfor
  option httpchk GET /url.php
  server php-app1 10.100.2.40:80 weight 16 maxconn 160 check inter 10s
  server php-app2 10.81.4.104:80 weight 16 maxconn 160 check inter 10s
  server php-app3 10.100.129.162:80 weight 16 maxconn 160 check inter 10s

На какие настройки стоит обратить внимание для mysql.

Еще одна проблема, с которой я столкнулся, - это то, что rds работает довольно плохо по сравнению с обычными экземплярами opsworks. Проблема может быть вызвана разницей зоны доступности между серверами приложений и сервером базы данных, но падение производительности не кажется оправданным. У нас есть МНОГО баз данных на сервере m3.2xlarge. Метрики CloudWatch показывают только низкие и средние показатели использования ЦП, операций ввода-вывода и памяти. Количество подключений также от 40 до 60 в любой момент. Может ли такая разница быть вызвана зоной доступности?

Короткий ответ нет.

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

Это потому, что реплика чтения - это всего лишь читать реплика, используя MySQL репликацию master / slave, которая по умолчанию не может принимать запросы на запись, такие как INSERT, UPDATE или DELETE Операторы SQL, и даже если вы перевернете read_only switch, вы почти наверняка сломаете (возможно, необратимо) свою базу данных.

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

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