Amazon Route 53是一种高度可用且可扩展的云域名系统(DNS)Web服务。可以将域名转换为IP地址,目前还完全兼容IPv6。Route 53主要用于以下几个方面:
1. 域名注册
2. DNS管理
3. 可用性监控,健康检查
4. 路由策略,流量管理
Route53 工作流程:
准备数据:
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd.service
systemctl enable httpd.service
EC2_AVAIL_ZONE=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo "Hello World from $(hostname -f) in AZ $EC2_AVAIL_ZONE
" > /var/www/html/index.html
创建EC2:
创建3个不同区域的EC2,把上面的脚本放到use script里面,这样访问EC2的时候就会显示EC2的详细信息。
但是由于账号的权限问题,没法实际创建不同区域的EC2 instance,所以这里假设了3个不同区域的EC2已经被创建好:
39.156.69.79 us-east-1
40.156.69.79 ap-southeast-2
41.156.69.79 eu-west-3
DNS记录类型:
- SOA - Start of Authority授权起始点记录会提供有关域和相应Amazon Route53托管区域的信息。记录了关于该域名的很多信息。
- NS -- Name Server
- A -- Address直接将域名转换为IPv4地址。例如www.baidu.com -> 61.135.169.121
- AAAA -- IPv6地址。例如2001:0db8:85a3:0:0:8a2e:0370:7334
- CNAME -- Canonical Name。
- Alias -- 别名记录
- CAA -- 认证机构授权
- MX -- 邮件交换记录
- NAPTR -- 命名授权指针记录
- NS -- 名称服务器记录
- PTR -- 指针记录
- SPF -- 发件人策略框架
- TXT -- 文本记录
在AWS里常用的是:
A,AAAA,CNAME,Alias
CNAME和Alias
- CNAME -- 可以将一个域名转向另一个域名。例如www.baidu.com -> www.google.com。
- DNS协议不允许为DNS命名空间的顶端节点创建CNAME,例如创建了example.com,则不能为example.com创建记录,但是可以为其子域创建CNAME记录。即只能给非根域名使用。
- Alias -- 和CNAME类似,又叫别名记录,可以将一个域名指向AWS资源。例如www.baidu.com -> blabla.amazonaws.com。它是可以给根域名和非根域名使用。它是免费的,而且可以做本地健康检查。
NS
- 可帮助将域名转换为计算机用于彼此相互通信的 IP 地址
- NS记录会标识托管区域的名称服务器
- 在托管区域里创建的时候,Route53会自动创建名称相同的NS记录。列出的四个NS是托管区域的权威名称服务器。非特殊情况,不要添加,删除或更新名称服务器
- NS记录的最常见用途是控制域的Internet流量路由方式。
- 可以为子域(acme.example.com)创建单独的托管区域,并使用该托管区域为子域及其子域(subdomain.acme.example.com)路由internet流量。可以通过在根域的托管区域(example.com)中创建另一个NS记录来设置此配置。
- 使用NS记录配置白标签名称服务器 -> 希望名称服务器的域名与托管区域的域名相同的时候。例如ns-2048.awsdns-64.com -> ns1.example.com
CAA
指定允许哪些证书颁发机构(CA)为域或子域颁发证书。创建CAA记录有助于防止错误的CA为您的域颁发证书。但是不能替代CA指定的安全要求,例如验证您是域所有者的要求。可以指定以下内容:
- 哪些CA可以签发SSL/TLS证书
- CA为域或子域签发证书时要联系的电子邮件或URL
MX
- 指定邮件服务器的名称,如果有多个的话,还可以指定优先级。MX记录的值都包含两个值,即优先级和域名。
PTR
- PTR 记录将 IP 地址映射到相应的域名。
SRV
- SRV 记录 Value 元素包含四个以空格分隔的值。前三个值为分别是表示优先级、权重和端口的十进制数。第四个值为一个域名。
路由策略
1. Simple Routing Policy
- 一个域名对应一个URL
- 当需要转向到一个单独的资源时候使用
- 不能绑定健康检查
- 如果返回多个值,由客户端随机选择一个
此时打开terminal,输入dig simple.biao.com就会发现类似如下图的信息,上面就会显示TTL时间和对应的IP。TTL是存活期,会在设置的时间内缓存DNS记录。在每次dig的时候,会发现这个时间是不断的减少的,然后重新开始计算。
2. Weighted Routing Policy
- 根据终端的百分比来决定到instance的请求
- 当测试新的app的时候,把1%的流量转过去,可以很方便的测试
- 有助于分割流量到2个不同的区域
- 可以关联健康检查
如下图创建weight策略的记录,目前是可以同时创建多个记录。weight的最大值是200。健康检查是可选的。
3. Latency Routing Policy - 延迟
- 从延迟最低的AWS区域处理用户请求
- 在优先考虑用户延迟时非常有用
- 根据用户设计的AWS区域评估延迟
如下图配置后,例如当前请求来自澳洲,那么就会选择延迟最小的40.156.69.79 ap-southeast-2来响应,此时切换VPN到US,就会发现会选择这个时候延迟最小的39.156.69.79 vs-east-1来响应。
健康检查
- 有18%及以下运行状况检查程序报告终端节点运行状态良好,则认为运行状况不良
- 有超过18%运行状况检查程序报告终端节点运行状态良好,则认为运行状况良好
- 选择 18% 的值是为了确保位于多个区域的运行状况检查程序认为终端节点运行状况良好。这可以防止终端节点仅因为网络条件问题导致与部分运行状况检查位置隔离而被视为运行状况不佳。在未来的版本中,这个值可能会更改。
- 默认的健康检查是30秒,可以设置,但是时间越短花费越高。但是无论设置30秒或者10秒,都是有可能遇到有时每秒收到多个请求,接下来多少秒根本没有任何运行状况检查请求的情况。
- 主要通过两点来检查:响应时间,失败阈值
- 大概15个health checkers进行endpoint的检查
- 默认的检查失败的数量是3个
- 平均每2分钟一个请求
- 可以检查HTTP,TCP和HTTPS,但是注意这里不会检查SSL/TLS证书
- 和CloudWatch集成
- 不带运行状况检查的记录始终是运行状况良好的记录
- 如果没有运行状况良好的记录,则认为所有记录均为运行状况良好
- 权重为 0 的加权记录 - 按照有权重情况来进行
如下图所示,有三种内容可以监控:
1. 指定资源(如Web服务器)的运行状况
2. 其他运行状况检查的状态
3. Amazon CloudWatch警报的状态
4. Geo Location Routing Policy
- 基于用户的位置
- 要有一个默认的,如果匹配不上的话
如下图配置后,会根据用户发请求所在的区域来响应请求,例如给英国配置的是39.156.69.79 us-east-1,那么请求从英国来的都会用这个记录来响应,如果给香港配置的是40.156.69.79 ap-southeast-2,那么请求从香港来的会用40这个记录来响应,而加拿大来的请求就会访问默认的41.156.69.79 eu-west-3
5. Failover Routing Policy
- 只有一个primary和secondary的节点,只有当primary的health check是unhealthy的时候,流量才会转向到secondary
如下图,配置了primary节点为39.156.69.56. eu-east-1,并且有对应的health check,如果它的状态一直是healthy,那么每次请求都是响应的primary节点,直到它的状态变成unhealthy,才会转向到secondary节点。这里可以通过关闭39.156.69.79,让其状态变成unhealthy来测试结果。
6. Multi Value Answer Routing Policy
- 当流量到多个资源的时候使用,即返回多个值来响应DNS请求
- 最多8条记录响应请求
- 因为可以具备同时健康检查每个资源的运行状况,可以与DNS配合使用,来提高可用性和负载均衡性
- 但是它不可替代负载均衡器(ELB)
当一个请求进来,可以随机从8条记录里响应,下面的图里面配置了3条记录,那么在TTL的过期后,再次请求就有可能会选择另外一个记录响应。
例如,第一次请求进来选择的是39.156.69.79 us-east-1,TTL是60,那么TTL时间过期后,再次进来可能选择的就是40.156.69.79 ap-southeast-2
日志
- 可以记录关于公共DNS查询的信息,例如:已请求的域或子域,请求的日期和时间,DNS记录类型,对请求响应的Route53边缘站点,响应代码等等
- 只能记录public的hosted zone
- 日志里包含的信息:version,account_id,region,vpc_id,query_timestamp,query_name,query_type,query_class,rcode,answer_type,rdata,answer_class,srcaddr等等
- 和CloudWatch集成
- 和CloudTrail集成