閱讀524 返回首頁    go 阿裏雲 go 技術社區[雲棲]


阿裏雲ECS無法連接阿裏雲數據庫的一般原因

實為吾之愚見,望諸君酌之!聞過則喜,與君共勉

適用於:
1,跨地域/本地主機如何公網訪問經典/vpc網絡的rds?
2,經典網絡的ecs如何內網和公網訪問經典/vpc網絡的rds?
3,vpc網絡的ecs如何公網和內網訪問經典/vpc網絡下的rds?
4,經典/vpc網絡的ecs如何內網訪問經典/vpc網絡的mongodb?
5,經典/vpc網絡的ecs如何內網訪問經典/vpc網絡的redis?
6,經典/vpc網絡的ecs如何內網訪問經典/vpc網絡的ocs(memcached)?

第一章  使用阿裏雲ECS和數據庫前需要了解的相關概念

1.1地域和可用區

地域:地域是指物理的數據中心,類似下麵的表格

地域名稱

華北 1

華北 2

華北 3

華東 1

華東 2

華南 1

所在城市

青島

北京

張家口

杭州

上海

深圳

RegionId

cn-qingdao

cn-beijing

cn-zhangjiakou

cn-hangzhou

cn-shanghai

cn-shenzhen

 

可用區:可用區是指在同一地域內,電力和網絡互相獨立的物理區域

詳細說明看這裏:

https://help.aliyun.com/document_detail/40654.html?spm=5176.doc51704.6.543.jd1ts9

1.2內網

同地域內的雲資源互相訪問地址,不同可用區也可以內網訪問,但是不同地域正常是不可以內網訪問的,不同地域需要公網訪問

詳細說明看這裏:

https://help.aliyun.com/document_detail/25385.html?spm=5176.doc40654.6.557.68NSeb

1.3外網

跨地域之間雲資源互相訪問的地址,不可以內網訪問,可以立即為滿足公網訪問的地址

1.4安全組

Ecs所特有可以理解為防火牆,區別於windows或者linux係統內部的防火牆,安全組和係統內部防火牆互不影響

詳細說明看這裏:

https://help.aliyun.com/document_detail/25387.html?spm=5176.doc25385.6.560.F1KUoi

 

1.5vpc(專有網絡)

阿裏雲的內網隔離的私有網絡,同一個vpc內,不同交換機默認是互通的,不同vpc下正常是無法聯通的

詳細說明看這裏:

https://help.aliyun.com/document_detail/34217.html?spm=5176.doc55051.6.539.4PVhVn

1.6白名單

Rds所特有,ip比如寫入白名單之後,主機才可以進行訪問

https://help.aliyun.com/document_detail/26198.html?spm=5176.product26090.6.686.2Y3o4E

1.7網絡類型

經典網絡以及專有網絡(vpc),經典網絡區別於專有網絡,經典網絡中的雲服務在網絡上不進行隔離

區別的詳細說明看這裏:

https://help.aliyun.com/document_detail/26194.html?spm=5176.product26090.6.682.2mjTIX

1.8 訪問模式

Rds特有分為高安全模式和標準模式

詳細說明看這裏:

https://help.aliyun.com/document_detail/26193.html?spm=5176.doc26194.6.681.iNVL3c

第二章  ECS連接RDS問題

以下是指同地域之間的的阿裏雲ecs訪問rds的說明 ,皆為正常情況,排除了特殊配置的情況,以下四類情況同樣適用於同地域ECS連接雲MONGODB,ECS連接雲REDIS,ECS連接雲OCS(MEMCACHED),並且也適用於不同地域直接連接的問題排查,需要注意的是:

1,雲MONGODB,雲REDIS,雲OCS正常隻支持內網連接,所以跨地域公網訪問時不支持的,本地主機通過公網訪問也是不支持的

2,雲REDIS,雲OCS在切換到vpc後,是不支持再切換到經典網絡的

3,RDS,雲MONGODB(複製集版)是可以從經典網絡切換到vpc並且也可以從vpc切換到經典網絡的

4,雲MONGODB(集群版)創建完成後不支持網絡類型切換

2.1.1經典網絡ECS訪問經典網絡RDS異常

情況描述:ECS是經典網絡(公網和內網都有),RDS是經典網絡(公網和內網都有),如下:

Ecs的網絡配置:

 23d77e9886de1809f85bad518d94aa5a1f363b55

Rds的網絡配置:

07e363d81bcb5c1be92bc5db6219cbc7fb3fa8d6

693c5f7b009dde8cdcade9d58a32f2c236646c0f

通過ECS和RDS的配置,它們網絡類型相同,又都存在公網和內網地址,所以理論上公網和內網的訪問都是沒問題的,測試如下:

1d7e97934869c582fe1c97fcda4dd6c0f6c3a7a1

下麵模擬一個不可以正常連接的例子進行連通性測試:

Ecs連接rds內網:

5509a9400d488a4c940def2855b6e43449fdd0a0

通過ping內網地址和telnet內網地址,獲取了如上的信息,上麵說明了如下兩點:

1,該rds目前的內網地址是10.50.144.213

2,通過3306端口連接10.50.144.213無法連接

網絡類型相同,而無法連接,此類問題一般是ECS的內部的防火牆(或者其他安全軟件)或者ECS的安全組設置以及RDS的白名單設置的問題,按照這個思路,往下查:

自帶防火牆:

dd690ea1942f8450f0c7443834c1909224719931

結果:狀態關閉

Ecs的安全組設置:

1d4722befae191ac283bbd07edcbdab88928d61a

通過安全組可以看到,內網出方向的規則中有一條規則如上,該規則會拒絕發往發往10.50.144.213且目的端口是3306的數據包,所以從ECS發出來的數據包就不可達了

RDS的白名單配置:

e29459966613ab5af3423550427be815163faad3

通過白名單可以看到,rds的白名單設置隻允許來著127.0.0.0的訪問,其他的地址是不允許的

通過上麵的查看,一方麵是ecs的安全組設置有問題,一方麵是rds的白名單設置有問題,先更改ecs的安全組,刪除之前的規則(保持rds的白名單不改動),進行測試:

cdd2a70207b9e169cfa97fd790a2f2528ddf7452

紅框中的提示是:#28000ip not in whitelist,再結合之前查到的rds的白名單問題,可以判斷這是rds的白名單阻止了該ECS的訪問,下麵修改RDS的白名單,將ecs的內網ip地址10.132.35.143加入:

31bae6998effcfbb02a117a5328a1af9643513b8

再次測試:

ddaeb206f15f7f2e3fef1ddcc28b8324b76ce102

測試正常了,同網絡類型的公網訪問問題排查方法同上,同地域網絡類型相同而無法連接的問題一般是源端或者目標端的安全限製導致的

2.1.2經典網絡ECS訪問專有網絡RDS異常

情況描述:ECS是經典網絡(公網和內網都有),RDS是專有網絡(公網和內網都有),如下:

ECS網絡配置:

23d77e9886de1809f85bad518d94aa5a1f363b55

RDS網絡配置:

a050afac721a58414e4e10647b11b34b91bb0523

aabfd465d513ef6187ff1138c307b31cb81339d5

通過上麵的信息可以看到,ECS與RDS的網絡類型是不同的,ecs是經典網絡,rds是專有網絡(vpc),這樣的話正常內網是無法訪問的,隻有公網才可以正常訪問,測試如下:

c55d159b8505da88baf95ec1438a87022cd2d4f5

376852471846065661bc769c2520397bc9f5bc11

此類情況的解決辦法:

1,使用rds的公網地址進行訪問

2,如果想使用內網訪問,必須是相同網絡類型才可以,因為ecs無法直接切換網絡類型,則比較好的解決辦法就是把rds切換為與ecs相同的網絡類型(經典網絡),並設置好安全組防火牆已經白名單,具體操作方法如下:

7d8d1b72436c6d739a1b28e1443ae04cf7d4e5a6

71063df3f343072a9719aa0ce2711237c0591631

3710da72521eb698fd3a49a4897977473941f908

再次測試:

e89741c96c4680f619d3f96fd9990bba8e39703c

2.1.3專有網絡ECS內網訪問經典網絡RDS異常

情況描述:ECS是專有網絡(隻有內網,沒有eip),RDS是經典網絡(公網和內網都有),如下:

ECS網絡配置:

5996a1aaa8e41eaa0dbcbee101fe1d935d4624da

Rds網絡配置:

07e363d81bcb5c1be92bc5db6219cbc7fb3fa8d6

693c5f7b009dde8cdcade9d58a32f2c236646c0f

通過上麵的信息可以看到,ECS與RDS的網絡類型是不同的,ecs是專有網絡,rds是經典網絡,這樣的話與2.1.2相同,也是正常內網是無法訪問的,又因為ecs沒有eip,所以rds的公網也是無法訪問的。

解決辦法:

1,配置ECSeip(取決於購買時的配置,此處我購買時選擇的不分配公網地址),使用rds的公網訪問RDS,操作如下:

1baa79190e235892e0b023dc57510eb973015690

362d574ab4bc446ec0dbe8b810f2cc0ac4782085

92a2d9540f1d53c73ee1f76c503d44145fb0a0d8

測試如下:

67b30d19fce5cea3ee50248951f5739a5f43c5f7

2,如果需要內網的話,需要將rds切換到與ecs相同的vpc下才可以(交換機可以不同,但是交換機必須在同一個vpc下),具體操作如下:

Ecs所在vpc以及交換機:

1c94419ecdb6b45d5f12ee71b7504e240e90383f

相應的vpc以及交換機信息

c1e3e48967469b44df13018ab45316219628f12d

8cf53e1242d1ef482b422c4b2dd0b3bacaacee32

Rds進行網絡類型切換:

2f6f0fa9033f8dd8b8fd252fe474d40639fd5f6c

26cea46d3b7bbb781ed1f02a6249f53a711e2dcc

a0ff27905e17a49af5a985c11b8cfd5e812932c1

測試內網如下:

120ab48baffa7bb9e5de29b46e40c523dec6fc45

2.1.4專有網絡ECS內網訪問專有網絡RDS異常

情況描述:ECS是專有網絡(隻有內網,沒有eip),RDS是專有網絡(公網和內網都有),如下:

Ecs的網絡配置:

3756a6d5b18da4fcf2d4b9c7ee898e07977574f1

0db5dc31a152babf3051dc0d966adb0bfe993e66

RDS網絡配置:

13765986cc0aa8ac00cf023358ab756976871fee

92bdb3a17f2fc8592129a962add03c101fe7585c

通過上麵的信息,可以看到ECS和RDS都是同一個vpc下的,但是他們內網可以連接嗎?外網可以嗎?做個測試(測試公網需要申請eip):

綁定eip:

3f4fca6d50c3e787782fc7c4dbabe54fd84438fa

43ab14ae3a1210f2f4a77e462cc2cdb2dc368556

0505624cd45228cc7abc2b7caaa7ea5b95fe4c82

45cc69c9a3f281fe73137cf7118685175395a8e3


內網測試:

7bfa7bc24828dab7f13e757320959de5eee08d3c

結果:內網測試不通

外網測試:

0e9fe0cb27237df44f57ccbf13159d05c89052c5

結果:外網測試可以聯通,隻是提示白名單問題

內網無法連通原因:通過上麵的ecs的rds的網絡類型,可以看到RDS和ECS的vpc是不同的,所以他們處在兩個不同的vpc下,所以他們無法連通

下麵將RDS切換到與ecs相同的vpc下再測試(ecs無法直接切換vpc):

639887b3f8474a39c86ce1d0a6ed599b3acd2fce

再次內網測試:

f522c08c421bdae7b377add6e9715de2933e4b9c

結果:內網測試可以聯通,隻是提示白名單問題

 

第三章  問題延伸

通過第二章的測試和驗證,當選擇ECS和RDS時,如果需要內網正常連接,可能需要滿足(以下均不包括特殊情況):

1,同地域如果需要內網連接,則網絡類型要相同,如果是經典網絡ecs和rds都為經典網絡才可以內網連接,如果是vpc網絡,ecs和rds必須是在同一個vpc下才可以內網連接

2,不同地域時,經典網絡以及VPC網絡的ecs和rds一般需要公網地址進行連接,不同地域無法內網連接

3,雲mongodb,雲redis,雲ocs此類隻允許內網連接,一般無法通過公網來連接,所以ecs需要與其在同一地域下,

4,當遇到某個ECS連接數據庫出現問題時,可以嚐試使用如下方法進行分析:

1)“ping  實例地址”:解析出ip地址即可,如下

5e3df02179222adcdaaf1844d82af1fd4551d1fc

2)“telnet  實例地址  端口” 或者”telnet  ip 端口”

5e81b7cf47e0ec4aa1ab0a635ac934c0389278d1

Ps: 28000ip not in whitelist是因為白名單未設置,可以看另一篇:

https://yq.aliyun.com/articles/158321?spm=5176.100240.searchblog.8.XNCQSl

3)如果telnet失敗(失敗如下,表現為長時間無反應或者超時):

6f0647dde629bdda32cdde4c9dca3e73ac40349d

可以執行route -n檢查下路由信息

21af4cd026e35b112fae12e37c6473890d9a391e

如果路由信息也沒問題,可以考慮檢查下網絡類型以及安全限製方麵是否符合,如果網絡類型和安全限製也沒有問題的話,需要檢查係統是否有其他的特殊配置,尤其是網絡方麵的特殊配置(回憶下我在這台主機上做過什麼?)

最後更新:2017-08-13 22:26:49

  上一篇:go  SpringCloud--分布式配置中心(Spring Cloud Config)
  下一篇:go  Mac OS X 數據庫 管理工具 無需破解navicat 用Valentina Studio