我们正在研究如何在此服务器上对静态内容进行负载平衡,以避免单一服务器依赖性.
我意识到循环DNS充其量只是一个低端(有些甚至可能说是贫民窟)解决方案,但我不禁疑惑 – 循环DNS是一个“足够好”的解决方案,用于静态内容的基本负载均衡?
在[dns] [load-balancing]标签中对此进行了一些讨论,我已经阅读了一些关于该主题的精彩帖子.
我知道通过多个循环A记录的DNS负载平衡的共同缺点:
> DNS记录通常没有检测到心跳或故障,因此如果轮换中的给定服务器出现故障,则必须手动从DNS条目中删除其A记录
>生存时间(TTL)必须设置得相当低才能完全正常工作,因为DNS条目在整个互联网上都是积极缓存的
>客户端计算机负责查看有多个A记录并选择正确的A记录
但是,循环DNS是否足够好作为首发,总比没有好,“我们研究和实现更好的替代方案”形式的负载平衡我们的静态内容?或者DNS循环在任何情况下几乎都没有价值?
解决方法
通过在多个点(可能是地理位置分布)上分配负载,DNS roundrobin非常适合增加容量.但它不提供故障转移.您必须首先描述您试图涵盖的失败类型.必须使用标准IP地址接管机制(VRRP,CARP,…)在本地覆盖服务器故障.交换机故障由服务器上的弹性链路覆盖到两个交换机.使用路由协议或layer2解决方案(例如:多链路PPP),您和您的提供商之间的多链路设置可以涵盖WAN链路故障. BGP应该覆盖站点故障:您的IP地址将在多个站点上复制,并且只有在可用的地方才会将它们通知网络.
从您的问题来看,您似乎只需要提供服务器故障转移解决方案,这是最简单的解决方案,因为它不涉及任何硬件或与任何ISP的合同.您只需在服务器上设置适当的软件,这是迄今为止最便宜,最可靠的解决方案.
你问“如果haproxy机器出现故障怎么办?”.一样的.我认识的所有使用haproxy进行负载平衡和高可用性的人都有两台机器,可以运行ucarp,keepalived或heartbeat,以确保其中一台始终可用.
希望这有帮助!