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

Балансировка нагрузки для сети хоста не работает при доступе внутри экземпляра

Я спроектировал эту инфраструктуру.

ECS SG:

ПГС кластера ECS:

Теперь, когда я использую SSH для подключения к экземпляру EC2 № 1. Иногда у меня есть доступ к MySQL, иногда нет:

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
ERROR 2003 (HY000): Can't connect to MySQL server on 'loadbalancerdomain.co.uk' (110)

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
ERROR 2003 (HY000): Can't connect to MySQL server on 'loadbalancerdomain.co.uk' (110)

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
ERROR 2003 (HY000): Can't connect to MySQL server on 'loadbalancerdomain.co.uk' (110)

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.

Сейчас делаю модификацию инфраструктуры:

У меня нет доступа к MySQL из экземпляра 1, у меня есть доступ к MySQL из экземпляра 2

Экземпляр 1

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
ERROR 2003 (HY000): Can't connect to MySQL server on 'loadbalancerdomain.co.uk' (110)

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
ERROR 2003 (HY000): Can't connect to MySQL server on 'loadbalancerdomain.co.uk' (110)

ec2-user@EC2No1 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
ERROR 2003 (HY000): Can't connect to MySQL server on 'loadbalancerdomain.co.uk' (110)

Экземпляр 2

ec2-user@EC2No2 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.


ec2-user@EC2No2 $ mysql -u root -hloadbalancerdomain.co.uk -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.

Целевая группа: Сетевой режим определения задачи: HOST

Вопрос

Как я могу это исправить?

Проблема не существует с awsvpc сетевой режим для определения задачи, но мне нужно масштабировать экземпляры, чтобы использовать этот режим.

Проблема с NLB в том, что он проходит через клиентский IP. Если вы используете ECS1 (например, 10.0.0.10) и подключаетесь к NLB (10.0.0.20), и он отправляет вас обратно в контейнер mysql ECS1, это будет выглядеть так, как будто соединение исходит от ECS1.

Другими словами, ваш клиент mysql подключается с 10.0.0.10 к 10.0.0.20, но mysql считает, что он подключается с 10.0.0.10, а не с 10.0.0.20. В свою очередь, ответ приходит с 10.0.0.10 обратно на 10.0.0.10. Это не работает.

Также: у вас есть 2 базы данных mysql в двух независимых контейнерах? Как вы ожидаете их синхронизации? Если я ВСТАВЛЯЮ что-то в левое, и при следующем подключении NLB отправляет меня вправо, его там не будет.

Если вам нужна надежная база данных mysql, посмотрите AWS RDS или AWS Aurora. Запуск баз данных в контейнерах сопряжен с множеством проблем, а запуск настройки master-master со всеми узлами, доступными для записи, - это еще один уровень сложности. Я почти уверен, что ты не хочешь этого делать.

Надеюсь, это поможет :)