Мой вопрос простой. Можно ли выполнять балансировку нагрузки 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, поскольку они смогут посмотреть на вашу точную настройку и конфигурации инстансов - если у вас «много» баз данных с ними, то у вас будет, по крайней мере, базовый договор поддержки, проверьте здесь для вариантов поддержки.