ECS SG:
- 入口:0.0.0.0/0
- 出口:0.0.0.0/0
ECS 集群 ASG SG:
- 入口:0.0.0.0/0
- 出口:0.0.0.0/0
现在,当我通过 SSH 连接到实例 EC2 时,有时我可以访问 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.
现在我对基础设施进行修改:
我无法从实例 1 访问 MySQL,但我可以从实例 2 访问 MySQL
实例 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.
问题
我怎样才能解决这个问题?
问题不存在awsvpc网络模式用于任务定义,但我需要扩展实例才能使用此模式。
答案1
NLB 的问题在于它会通过客户端 IP。如果您在 ECS1(例如 10.0.0.10)上并连接到 NLB(10.0.0.20),而它恰好将您送回 ECS1 的 mysql 容器,则看起来连接来自 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。在容器中运行数据库有很多挑战,并且运行所有节点都可写的主-主设置又是另一个复杂程度。我很确定你不想这样做。
希望有帮助:)