Я спроектировал эту инфраструктуру.
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
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)
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 со всеми узлами, доступными для записи, - это еще один уровень сложности. Я почти уверен, что ты не хочешь этого делать.
Надеюсь, это поможет :)