• 沒有找到結果。

什么是 Round-robin DNS 负载均衡机制?

当某一域名配置了多条A类型记录集时,DNS服务器向访问者返回解析记录的顺序是随 机的,访问者所在客户端程序默认会取第一个返回的IP地址作为解析结果,从而实现 Round-robin DNS负载均衡。

问题描述

如果访问者的客户端为Linux系统,当访问配置了多条A类型记录集的域名时,操作系 统glibc中的getaddrinfo函数会对DNS服务器随机返回的解析记录进行排序,这样会导 致客户端程序一直获取同一个IP地址,从而使Round-robin DNS负载均衡机制失效。

原因分析

Round-robin DNS负载均衡机制失效的原因与RFC-3484中定义的地址排序要求有关。

RFC-3484中定义了主机名查找函数返回的IPv4地址和IPv6地址的排序机制,当DNS服 务器返回多条解析记录时,系统应该选择“最近的”IP地址。

在Linux的RHEL4.5版本中,getaddrinfo函数进行了更新,以便于符合RFC-3484中

“Internet协议版本6(IPv6)的默认地址选择”定义的地址排序要求。这种排序机制 对IPv4地址无效,导致域名解析每次都返回同一个IP地址,使Round-robin DNS负载均 衡机制失效。

我们通过以下示例查看Round-robin DNS负载均衡机制失效的过程:

1. 通过如下命令,查看eth0的网卡配置。

# ifconfig eth0

常见问题 4 公网域名解析

4-5 查看 eth0 的网卡配置 1

从查询结果中,可以查看到eth0的IPv6地址。

2. 在“/etc/hosts”文件中加入如下DNS的解析记录。

10.0.1.1 huaweicloudtest.com 10.0.1.2 huaweicloudtest.com 10.0.1.254 huaweicloudtest.com

3. 通过ping命令,查看域名解析结果。

# ping huaweicloudtest.com4-6 DNS 解析结果 1

从解析结果中可以看到,返回的IP地址并不是“/etc/hosts”文件中排在第一顺序 的10.0.1.1,而是第三顺序的10.0.1.254,说明解析记录被进行了排序。

4. 在“/etc/hosts”文件中修改解析记录顺序。

10.0.1.254 huaweicloudtest.com 10.0.1.2 huaweicloudtest.com 10.0.1.1 huaweicloudtest.com

常见问题 4 公网域名解析

4-7 DNS 解析记录 2

从解析结果中可以看到,即使将“/etc/hosts”文件中的解析记录顺序进行调换,

返回的IP地址依然是10.0.1.254。

处理方法

由于getaddrinfo函数的地址排序机制对DNS服务器返回的IPv4地址无效,因此我们通 过在客户端Linux操作系统内部禁用IPv6的方法禁止getaddrinfo函数对DNS解析记录进 行排序。

禁用IPv6的方法:

1. 编辑“/etc/sysctl.conf”文件,添加以下字段并保存退出。

net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1

2. 执行以下命令,使修改内容生效。

# sysctl -p

3. 验证DNS解析结果。

a. 通过如下命令,查看eth0的网卡配置。

# ifconfig eth0

4-8 查看 eth0 的网卡配置 2

从查询结果中,可以看到已经没有eth0的IPv6地址。

b. 在“/etc/hosts”文件中加入如下DNS的解析记录。

10.0.1.1 huaweicloudtest.com 10.0.1.2 huaweicloudtest.com 10.0.1.254 huaweicloudtest.com

常见问题 4 公网域名解析

c. 通过ping命令,查看域名解析结果。

# ping huaweicloudtest.com4-9 DNS 解析记录 3

从解析结果中可以看到,返回的IP地址是“/etc/hosts”文件中排在第一顺序 的10.0.1.1,说明解析记录没有进行排序。

d. 在“/etc/hosts”文件中修改解析记录顺序。

10.0.1.254 huaweicloudtest.com 10.0.1.2 huaweicloudtest.com 10.0.1.1 huaweicloudtest.com

4-10 DNS 解析记录 4

从解析结果中可以看到,返回的IP地址是“/etc/hosts”文件中调换顺序后排 在第一顺序的10.0.1.254,进一步证实了解析记录没有进行排序。

至此,解决了Round-robin DNS负载均衡机制失效的问题。

相關文件