Bir ApsaraDB RDS örneğine bağlantı kurulamaz ve RDS örneğinin dahili uç noktasına ping attığınızda Destination Host Unreachable hata iletisi görüntülenir.
Sorun açıklaması
Bir Elastic Compute Service (ECS) örneğinden RDS örneğinin dahili uç noktasına ping atamazsınız ve Destination Host Unreachable yanıtını alırsınız.
PING rm-bpxxxx.mysql.rds.aliyuncs.com (172.17.0.31) 56(84) bytes of data.
From xxxx (172.17.0.1) icmp_seq=1 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=2 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=3 Destination Host Unreachable
Nedenler
Çoğu durumda, RDS örneğinin dahili CIDR bloğu başka bir hizmetin CIDR bloğu ile çakışır.
Analiz
RDS örneğinin dahili uç noktasına ping atmak için PING komutunu çalıştırın ve özel IP adresini görüntüleyin. Yukarıdaki örnekte, RDS örneğinin özel IP adresi
172.17.0.31şeklindedir.-
Bu örnekte Linux işletim sistemi kullanılmaktadır. Yönlendirmeleri görüntülemek için
route -nkomutunu çalıştırın. Aşağıdakine benzer bir çıktı döndürülür:Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.17.2.253 0.0.0.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br-350b446c181aÇıktı, ağ arayüz kartının (NIC)
br-350b446c181aCIDR bloğunun172.17.0.0/24olduğunu ve bu bloğun RDS örneğinin özel IP adresi ile çakıştığını gösterir. Sonuç olarak, ECS örneği trafiği RDS örneğine yönlendiremez.Bu sorun çoğunlukla konteyner hizmetinin CIDR bloğunun ApsaraDB RDS'nin CIDR bloğu ile çakışmasından kaynaklanır. Aşağıdaki örnekte, bir yönlendirme çakışmasının nasıl çözüleceğini açıklamak için bir konteyner hizmeti kullanılmıştır.
Çözümler
Çözüm 1: Konteyner hizmetinin varsayılan CIDR bloğunu değiştirin
Bu çözüm, SQL Server için ApsaraDB RDS örnekleri için geçerli değildir. RDS örneğiniz SQL Server çalıştırıyorsa Çözüm 2'yi uygulayın.
Docker'ı durdurmak veya Docker'ın varsayılan CIDR bloğunu değiştirmek hizmetlerinizi kesintiye uğratır. Bu işlemi yoğun olmayan saatlerde gerçekleştirin.
Docker'ın varsayılan CIDR bloğunu değiştirirken, olası bağlantı sorunlarını önlemek için mevcut tüm konteynerlerin ve uygulamaların ağ ayarlarıyla uyumlu olduğundan emin olun.
Bu örnekte Linux işletim sistemi kullanılmaktadır. Aşağıdaki adımları uygulayın:
-
Docker hizmetini durdurun.
sudo systemctl stop docker -
Docker yapılandırma dosyasını düzenleyin. Çoğu durumda Docker yapılandırma dosyası
/etc/docker/daemon.jsonveya/etc/docker/daemon.confkonumunda bulunur. Dosya adı farklılık gösterebilir.sudo vim /etc/docker/daemon.jsonDosyanın aşağıdaki içeriği içerdiğinden emin olun:
{ "bip": "New CIDR block" }Örneğin, yeni CIDR bloğunu 192.168.0.0/16 olarak ayarlayın.
Yapılandırma dosyasını kaydedin ve kapatın.
-
Değişikliklerin etkili olması için Docker hizmetini başlatın.
sudo systemctl start docker
Çözüm 2: RDS örneğinin vSwitch'ini değiştirin
vSwitch CIDR bloğunun konteyner hizmetinin CIDR bloğu ile çakışmaması için RDS örneğinin vSwitch'ini değiştirebilirsiniz.
Varsayılan olarak, farklı sanal özel bulutlar (VPC) birbirleriyle dahili ağ üzerinden iletişim kuramaz. (Önerilen) Yalnızca vSwitch'i değiştirin ve VPC'yi değiştirmeyin. Bu şekilde, diğer Alibaba Cloud hizmetleri ile RDS örneği arasındaki dahili ağ bağlantıları etkilenmez.