Answers:
您无法通过该/etc/hosts
文件提供弹性或轮询负载平衡-并非为此目的而设计的。
相反,您的选择是... (无特定顺序)
/ etc / hosts不支持循环,但是您可以编写一个简单的bash脚本来sed替换带有#RoundRobin注释(或您要使用的任何其他标签的标签),只需将其反映在脚本的grep行中即可。
#!/bin/bash
fqdnips=( $(nslookup sub.domain.com|grep Address:|awk -F\ '{ print $2 }'|grep -v '#') )
new=`printf "${fqdnips[@]}"`
old=`grep "#RoundRobin" /etc/hosts|awk -F\ '{ print $1 }'`
sed -i "s/$old/$new/g" /etc/hosts
上面的脚本为sub.domain.com获取nslookup的输出,并将其存储在数组中。然后将最上面的值打印到$ new,并获取在/ etc / hosts中分配的标签#RoundRobin的现有值...最后,它执行sed替换
/ etc / hosts文件条目如下所示
127.0.0.1 localhost
::1 localhost
11.12.13.14 sub.domain.com #RoundRobin
最后,将此脚本放置在根目录的crontab中,使其每隔一个小时左右运行一次,您现在将获得一个/ etc / host轮询。
如果您的编码页面正在从API提取一些数据并且API服务器的DNS查找在页面的脚本执行中导致大量的挂起时间,这会特别有用。似乎是一个简单的页面。为了避免进行昂贵的DNS查找(特别是如果您的站点每分钟要进行数百次的处理,从而导致流量很大),则应使用/ etc / hosts来解析远程API服务器的FQDN。这将大大减少用于提取API数据和生成页面的CPU使用率。
实现此目标的简单方法是仅使用公共DNS服务,例如AWS Route53。您可以为每个A记录输入多个IP地址,并具有优先级
abc.efg.datastore.com
10 141.131.286.1
20 141.131.286.237
只要不涉及任何证书,就可以正常工作,甚至不违反任何规范或最佳实践。
NSLookup或其他域查询将返回两个地址。您的应用需要能够处理此问题。是的,该域需要是一个公开注册的域,而不仅仅是本地主机名。
A
记录没有优先级字段。一些权威的DNS服务具有记录权重,但这是通过概率地包括或排除记录来完成的。
易于设置,请按照说明进行操作: