在实例内访问时,主机网络的负载平衡不起作用

在实例内访问时,主机网络的负载平衡不起作用

我设计了这个基础设施。 最初的

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.

目标组: TG1 TG2 任务定义网络模式:HOST

问题

我怎样才能解决这个问题?

问题不存在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。在容器中运行数据库有很多挑战,并且运行所有节点都可写的主-主设置又是另一个复杂程度。我很确定你不想这样做。

希望有帮助:)

相关内容