Я понял, на что ты смотришь. Прежде чем ответить, я хотел бы добавить, как я воспроизвел проблему, чтобы легко было сказать, что мы находимся на одной странице.
Это мои слушатели HAProxy, реплицированные аналогично тому, что вы сделали.
listen port_33306
bind :33306
mode tcp
server local-tunnel localhost:23306 check
listen port_23306
bind :23306
mode tcp
server mysql-tunnel localhost:13306 check
Я туннелировал MySQL, работающий на Авроре, используя socat
на порте 13306, это очень помогло бы понять, в чем проблема.
Так вот как это выглядит
localhost:33306 => localhost:23306 => localhost:13306 => myaurora.aws-aurora-blah-blah.com:3306
Прямо сейчас, вот как выглядит мой netstat
robot@proxy:~$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:13306 0.0.0.0:* LISTEN 3465/socat
tcp 0 0 0.0.0.0:23306 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:33306 0.0.0.0:* LISTEN -
А вот так выглядит моя haproxy?stats
страница.
![enter image description here](https://i.stack.imgur.com/XKlzV.png)
Теперь я переношу этот socat
туннель TCP-порта 13306
в Аврору, так как вы сказали, что он нарушит поток и покажет слушателю port_23306
красным на моей странице haproxy?stats
, потому что порт 13306
больше не существует.
Итак, пока здесь у нас нет аналогичных выходов, а теперь вопрос в том, почему слушатель port_33306
остается зеленым, а port_23306
не проверяет.
Сейчас это то, что мой * 10 40 * выглядит так.
robot@proxy:~$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:23306 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:33306 0.0.0.0:* LISTEN -
Как вы можете видеть, туннель socat
для порта 13306
не существует, так как я убил процесс, и слушатель проверяет localhost:13306
. Даже если соединение не существует, HAProxy оставил привязку порта открытой, оставив порт 23306
для связи, если я запустил туннель, он, очевидно, снова станет зеленым, не перезапуская мой HAProxy.
Из-за этого 23306
открыт, и слушатель в port_33306
, который связывает порт 33306
с localhost:23306
, проверяет только на 23306
и не выполняет более глубоких проверок дерева, если 23306
подключен к какому-либо процессу или нет ,
Следовательно, мы можем видеть слушателя port_33306
все еще зеленым, поскольку он проверяет порт 23306
, и пока слушатель port_23306
красный, поскольку привязка 23306
открыта и готова к подключению к чему-либо но проверка выполняется на порту 13306
, который не открыт, поэтому проверки работоспособности проходят для порта 23306
, но не для 13306
.
Трудно объяснить в точных терминах и все, но я попробовал.
Надеюсь, это поможет.