Я задал этот вопрос переполнение стека но я подумал, что это может быть более подходящим для этого сообщества.
У меня есть веб-сервер, который подключается к кластеру MySQL (это кластер Galera) ... кластер работает нормально (если я обновляю запись в первом экземпляре MySQL, она автоматически обновляется во втором экземпляре). Проблема в том, что мне нужен балансировщик нагрузки между веб-сервером и экземплярами MySQL ...
Итак, я установил балансировщик сетевой нагрузки AWS (NLB работает на сетевом уровне, TCP в моем случае) ... Я добавил 2 экземпляра MySQL в целевую группу NLB (их частные IP-адреса).
Теперь я продолжаю обновлять строку подключения на моем веб-сервере для подключения к NLB:
<add name="MyDB" connectionString="Server=my-nlb-ap-southeast-2.amazonaws.com; Port=3306; Database=mydb; Uid=user1; Pwd=mypassword; Protocol=TCP" providerName="MySql.Data.MySqlClient"/>
Но я получаю следующую ошибку:
[MySqlException (0x80004005): невозможно подключиться к любому из указанных хостов MySQL.] MySql.Data.MySqlClient.NativeDriver.Open () +1734 MySql.Data.MySqlClient.Driver.Open () +60 MySql.Data.MySqlClient. Driver.Create (настройки MySqlConnectionStringBuilder) +309 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection () +18 MySql.Data.MySqlClient.MySqlPool.MySqlClient.MySqlPool.MySqlClient.MySqlPool.MySqlClient.MySqlPool. Data.MySqlClient.MySqlPool.GetConnection () +60 MySql.Data.MySqlClient.MySqlConnection.Open () +1588 MySql.Data.MySqlClient.MySqlProviderServices. .GetProviderManifestToken (подключение к DbConnection)
Когда я пытаюсь подключиться к MySQL со своего веб-сервера, я получаю следующее:
Я считаю, что это означает, что веб-сервер может подключиться к экземпляру MySQL через NLB, но я не знаю, почему строка подключения не работает.
Я открыл порт 3306 для всех IP-адресов и могу подключиться к NLB со своего локального компьютера, которого нет в VPC:
Но веб-сервер по-прежнему получает ту же ошибку ...
Причина, по которой я решил использовать AWS NLB вместо HAProxy, заключается в том, что NLB имеет высокую доступность ... Я считаю, что если я хочу использовать HAProxy, мне нужно будет добавить еще 2 сервера к моему VPC в качестве HAProxy (для высокой доступности) ... В случае NLB я могу просто использовать 1 балансировщик нагрузки высокой доступности, но я не уверен, можно ли использовать AWS NLB для этой цели?
Интересно, что строка подключения не работает. Можете ли вы запустить клиент mysql с веб-сервера и убедиться, что он может подключиться и пройти аутентификацию?
C:\> mysql -hmy-nlb-ap-southeast-2.amazonaws.com -uuser1 -pmypassword
Также - вы уверены, что вам все-таки нужен NLB? Как насчет использования DNS для балансировки нагрузки? Создайте запись типа mydb.example.com
с двумя адресами, по одному для каждого узла кластера БД.
mydb.example.com. IN A 10.20.30.40 ; db node 1
IN A 10.20.40.50 ; db node 2
Записи DNS с несколькими значениями возвращаются в по-круговой заказ, а это значит, что некоторые клиенты получат узел 1 IP сначала, а другие получат узел 2 первый. И если их основной узел выходит из строя, у них все еще есть другой IP-адрес, на который можно переключиться.
Я бы сначала попробовал этот подход DNS, прежде чем тратить слишком много времени и денег на NLB.
Надеюсь, это поможет :)