Další informace pro lidi, kteří by se při pokusu o připojení k RDS nebo RedShift mohli setkat s podobnými problémy:
1) Zkontrolujte skupiny zabezpečení
Ověřte, že skupina zabezpečení pro instanci RDS umožňuje přístup ze skupiny zabezpečení, do které patří váš zdrojový server (nebo jeho IP přidaná přímo, pokud je externí k AWS). Skupina zabezpečení, na kterou byste se měli podívat, je ta, která je uvedena v atributech instance RDS z uživatelského rozhraní konzoly RDS (s názvem "skupina zabezpečení").
POZNÁMKA :Skupiny zabezpečení databáze se mohou lišit od skupin zabezpečení AWS EC2. Pokud je vaše instance RDS v klasickém/veřejném EC2, měli byste se podívat do části „skupina zabezpečení databáze“ v uživatelském rozhraní RDS. Pro uživatele VPC bude bezpečnostní skupina běžnou bezpečnostní skupinou VPC (název sg-xxx bude uveden v atributech instance RDS).
2) Potvrďte, že DNS není problém.
Amazon používá rozdělené DNS, takže externí vyhledávání DNS k AWS vrátí veřejnou IP, zatímco interní vyhledávání AWS vrátí soukromou IP. Pokud máte podezření, že se jedná o problém s DNS, potvrdili jste, že se z různých zón dostupnosti vrací různé IP adresy? Pokud různé AZ získají různé IP adresy, budete muset kontaktovat podporu AWS.
3) Potvrďte připojení k síti vytvořením soketového připojení.
Nástroje jako tracepath a traceroute pravděpodobně nepomohou, protože RDS aktuálně snižuje provoz ICMP.
Otestujte konektivitu portu pokusem o vytvoření soketového připojení k instanci RDS na portu 3306 (mysql nebo 5432 pro postgres). Začněte vyhledáním IP instance RDS a pomocí telnetu nebo nc (pokud se připojujete z AWS, nezapomeňte použít interní/soukromou IP):
telnet x.x.x.x 3306
nc -vz x.x.x.x 3306
a) Pokud váš pokus o připojení není úspěšný a okamžitě selže, port je pravděpodobně zablokován nebo vzdálený hostitel na tomto portu nespouští službu. možná budete muset zapojit podporu AWS, abyste mohli dále odstraňovat problémy. Pokud se připojujete mimo AWS, zkuste se nejprve připojit z jiné instance uvnitř AWS (protože tato připojení může blokovat váš firewall).
b) Pokud vaše připojení není úspěšné a dojde k vypršení časového limitu, pakety jsou pravděpodobně zahazovány/ignorovány bránou firewall nebo se pakety vracejí po jiné síťové cestě. Můžete to potvrdit spuštěním netstat -an | grep SYN
(z jiné relace ssh při čekání na vypršení časového limitu příkazu telnet/nc).
Připojení ve stavu SYN znamenají, že jste odeslali požadavek na připojení, ale neobdrželi jste nic zpět (SYN_ACK nebo odmítnutí/blokování). Obvykle to znamená, že firewall nebo skupina zabezpečení ignoruje nebo zahazuje pakety.
Může to být také problém s NAT směrováním nebo více cestami z více rozhraní. Zkontrolujte, zda mezi hostitelem a instancí RDS nepoužíváte iptables nebo bránu NAT. Pokud jste ve VPC, také se ujistěte, že povolujete odchozí/odchozí provoz ze zdrojového hostitele.
c) Pokud byl váš test připojení soketu úspěšný, ale nemůžete se připojit s klientem mysql (CLI, workbench, app atd.), podívejte se na výstup netstat a zjistěte, v jakém stavu je připojení (x.x.x.x nahraďte skutečná IP adresa instance RDS):
netstat -an | grep x.x.x.x
Pokud se vám při použití telnetu nebo NC navazovalo připojení, ale při použití klienta mysql vidíte stav 'SYN', možná máte problém s MTU.
RDS v době, kdy je toto napsáno, nemusí podporovat pakety ICMP používané pro PMTUD (https:/ /cs.wikipedia.org/wiki/Path_MTU_Discovery#Problems_with_PMTUD ). To může být problém, pokud se pokoušíte přistupovat k RDS nebo RedShift, které je ve VPC, z klasické instance ec2 přes ClassicLink. Zkuste snížit MTU pomocí následujícího a poté otestujte znovu:
sudo ip link show
# take note of the current MTU (likely 1500 or 9001)
sudo ip link set dev eth0 mtu 1400
Pokud fungovala nižší MTU, nezapomeňte kontaktovat zákaznickou podporu AWS a zmínit, že při pokusu o připojení k instanci RDS vidíte problém s MTU. To se může stát, pokud jsou pakety TCP zabaleny do zapouzdření pro tunelování, což má za následek nižší použitelnou MTU pro paketová data / užitečné zatížení. Snížení MTU na zdrojovém serveru umožňuje, aby se zabalené pakety stále vešly pod limit MTU při průchodu bránou tunelování.
Pokud to nefungovalo, nastavte MTU zpět na výchozí a zapojte podporu AWS pro další odstraňování problémů.