作者:手辨
实为吾之愚见,望诸君酌之!闻过则喜,与君共勉
阿里云的数据库种类较多,但是网络连接问题出现以及排查和解决方式大部分是一样的,所以以下以RDS控制台为例子进行说明,控制台会与redis,mongodb,ocs等有差别,主要目的是为了举一反三
第一章 使用阿里云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的网络配置:
Rds的网络配置:
通过ECS和RDS的配置,它们网络类型相同,又都存在公网和内网地址,所以理论上公网和内网的访问都是没问题的,测试如下:
下面模拟一个不可以正常连接的例子进行连通性测试:
Ecs连接rds内网:
通过ping内网地址和telnet内网地址,获取了如上的信息,上面说明了如下两点:
1,该rds目前的内网地址是10.50.144.213
2,通过3306端口连接10.50.144.213无法连接
网络类型相同,而无法连接,此类问题一般是ECS的内部的防火墙(或者其他安全软件)或者ECS的安全组设置以及RDS的白名单设置的问题,按照这个思路,往下查:
自带防火墙:
结果:状态关闭
Ecs的安全组设置:
通过安全组可以看到,”内网出方向”的规则中有一条规则如上,该规则会拒绝发往发往10.50.144.213且目的端口是3306的数据包,所以从ECS发出来的数据包就不可达了
RDS的白名单配置(rds目前提供了高安全的白名单模式,如果是高安全白名单模式,经典网络白名单分组适用于经典网络以及外网主机访问,而专有网络白名单分组适用于专有网络的主机访问):
通过白名单可以看到,rds的白名单设置只允许来着127.0.0.0的访问,其他的地址是不允许的
通过上面的查看,一方面是ecs的安全组设置有问题,一方面是rds的白名单设置有问题,先更改ecs的安全组,删除之前的规则(保持rds的白名单不改动),进行测试:
红框中的提示是:#28000ip not in whitelist,再结合之前查到的rds的白名单问题,可以判断这是rds的白名单阻止了该ECS的访问,下面修改RDS的白名单,将ecs的内网ip地址10.132.35.143加入:
再次测试:
测试正常了,同网络类型的公网访问问题排查方法同上,同地域网络类型相同而无法连接的问题一般是源端或者目标端的安全限制导致的
2.1.2经典网络ECS访问专有网络RDS异常
情况描述:ECS是经典网络(公网和内网都有),RDS是专有网络(公网和内网都有),如下:
ECS网络配置:
RDS网络配置:
通过上面的信息可以看到,ECS与RDS的网络类型是不同的,ecs是经典网络,rds是专有网络(vpc),这样的话正常内网是无法访问的,只有公网才可以正常访问,测试如下:
此类情况的解决办法:
1,使用rds的公网地址进行访问
2,如果想使用内网访问,必须是相同网络类型才可以,因为ecs无法直接切换网络类型,则比较好的解决办法就是把rds切换为与ecs相同的网络类型(经典网络),并设置好安全组防火墙已经白名单,具体操作方法如下:
再次测试:
2.1.3专有网络ECS内网访问经典网络RDS异常
情况描述:ECS是专有网络(只有内网,没有eip),RDS是经典网络(公网和内网都有),如下:
ECS网络配置:
Rds网络配置:
通过上面的信息可以看到,ECS与RDS的网络类型是不同的,ecs是专有网络,rds是经典网络,这样的话与2.1.2相同,也是正常内网是无法访问的,又因为ecs没有eip,所以rds的公网也是无法访问的。
解决办法:
1,配置ECS的eip(取决于购买时的配置,此处我购买时选择的不分配公网地址),使用rds的公网访问RDS,操作如下:
测试如下:
2,如果需要内网的话,需要将rds切换到与ecs相同的vpc下才可以(交换机可以不同,但是交换机必须在同一个vpc下),具体操作如下:
Ecs所在vpc以及交换机:
相应的vpc以及交换机信息
Rds进行网络类型切换:
测试内网如下:
2.1.4专有网络ECS内网访问专有网络RDS异常
情况描述:ECS是专有网络(只有内网,没有eip),RDS是专有网络(公网和内网都有),如下:
Ecs的网络配置:
RDS网络配置:
通过上面的信息,可以看到ECS和RDS都是同一个vpc下的,但是他们内网可以连接吗?外网可以吗?做个测试(测试公网需要申请eip):
绑定eip:
内网测试:
结果:内网测试不通
外网测试:
结果:外网测试可以联通,只是提示白名单问题
内网无法连通原因:通过上面的ecs的rds的网络类型,可以看到RDS和ECS的vpc是不同的,所以他们处在两个不同的vpc下,所以他们无法连通
下面将RDS切换到与ecs相同的vpc下再测试(ecs无法直接切换vpc):
再次内网测试:
结果:内网测试可以联通,只是提示白名单问题
第三章 问题延伸
通过第二章的测试和验证,当选择ECS和RDS时,如果需要内网正常连接,可能需要满足(以下均不包括特殊情况):
1,同地域如果需要内网连接,则网络类型要相同,如果是经典网络ecs和rds都为经典网络才可以内网连接,如果是vpc网络,ecs和rds必须是在同一个vpc下才可以内网连接
2,不同地域时,经典网络以及VPC网络的ecs和rds一般需要公网地址进行连接,不同地域无法内网连接
3,云mongodb,云redis,云ocs此类只允许内网连接,一般无法通过公网来连接,所以ecs需要与其在同一地域下,
4,当遇到某个ECS连接数据库出现问题时,可以尝试使用如下方法进行分析:
1)“ping 实例地址”:解析出ip地址即可,如下
2)“telnet 实例地址 端口” 或者”telnet ip 端口”
Ps: 28000ip not in whitelist是因为白名单未设置,可以看另一篇:
https://yq.aliyun.com/articles/158321?spm=5176.100240.searchblog.8.XNCQSl
3)如果telnet失败(失败如下,表现为长时间无反应或者超时):
可以执行route -n检查下路由信息
如果路由信息也没问题,可以考虑检查下网络类型以及安全限制方面是否符合,如果网络类型和安全限制也没有问题的话,需要检查系统是否有其他的特殊配置,尤其是网络方面的特殊配置(回忆下我在这台主机上做过什么?)