我明白,要在 HAProxy 负载平衡设置上进行故障转移,您需要两台运行 HAproxy 的机器(并将其路由到多个网络服务器实例)。但是在这种情况下,比如说 abcd.com,我们如何将此流量拆分/路由到 2 个 IP 地址而不是一个?DNS 通常将域名解析为单个 IP。我们如何使用免费/廉价的工具/服务来做到这一点?
假设我正在使用 Amazon 的 EC2 负载均衡器。我将它连接到两个实例(如果我的术语不正确,请原谅)。如果负载均衡器出现故障会怎样?两个实例现在都无法工作吗?
在管理自己集群的人中(即不使用/支付 Amazon Autoscale、Rightscale、Scalr 等),您如何管理 EC2 上的实例并处理(例如)故障转移?我想知道是否大多数人最终会像我怀疑的那样针对 EC2 API 编写自己的大量脚本。
这当然是我们的方法:启动我们自己的基于 Python Boto 的监控/重启守护进程,该守护进程在异地运行,从我们的实例中监听 UDP 保持活动。失败时,我们对卷进行快照、注册映像、启动新实例、删除旧卷等。
每隔一段时间,当对我们的脚本进行黑客攻击时,我认为必须有一些开源工具已经可以处理这些问题,并且没有(比如)Scalr 的限制,但我总是从谷歌回来空手而归。(像 Scalr 这样的东西在支持的软件集/版本/配置方面非常有限,并且有专门的和 IMO 繁琐的方法来操纵这些设置。)
此外,Linux-HA/Pacemaker 生态系统(Heartbeat、ldirectord 等)听起来并不适合 EC2。(但后来我发现了这一点——尽管我不确定这是否真的是一个高质量的解决方案)。
当浏览器获取给定主机名(例如 ip1 和 ip2)的多个 A 记录并且其中一个无法访问时,有人可以指导我了解有关确切浏览器行为的信息。
我对确切的细节感兴趣,例如(但不限于):
现在让我们假设浏览器首先尝试使用 ip2。
当然,这一切都可能取决于浏览器,也可能因版本和平台而异,我很乐意提供最多的细节。
这样做的目的 - 我试图了解当使用基于循环 DNS 并且其中一台主机出现故障时,用户会体验到什么。
拜托,我不是在问 DNS 负载平衡有多糟糕,请不要回答“不要这样做”、“这是一个坏主意”、“您需要心跳/代理/BGP/任何东西”等等。
如果后端服务器关闭,我需要 nginx 代理使用缓存:
这是我的配置。但似乎是 nginx 使用缓存而不检查后端服务器。
http {
# ...
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
server_name _;
location / {
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
proxy_cache tmpzone;
proxy_cache_valid 200 304 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host 'www.example.com';
proxy_pass http://www.example.com;
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果后端服务器已启动,我如何绕过代理缓存?当后端服务器启动时,我的代理服务器根本不使用缓存。
我拥有并经营visualwebsiteoptimizer.com /。该应用程序提供了一个代码片段,我的客户将其插入到他们的网站中以跟踪某些指标。由于代码片段是外部 JavaScript(位于站点代码的顶部),因此在显示客户网站之前,访问者的浏览器会联系我们的应用服务器。如果我们的应用服务器出现故障,浏览器将在超时(通常为 60 秒)之前继续尝试建立连接。可以想象,在任何情况下我们都不能让我们的应用程序服务器停机,因为这不仅会对我们的网站访问者的体验产生负面影响,还会对我们客户的网站访问者的体验产生负面影响!
我们目前使用 DNS 故障转移机制,一台备份服务器位于不同的数据中心(实际上是不同的大陆)。也就是说,我们从 3 个不同的位置监控我们的应用服务器,一旦检测到它关闭,我们将 A 记录更改为指向备份服务器 IP。这适用于大多数浏览器(因为我们的 TTL 是 2 分钟),但 IE 将 DNS 缓存了 30 分钟,这可能是一个交易杀手。请参阅我们最近发布的visualwebsiteoptimizer.com/split-testing-blog/maximum-theoretical-downtime-for-a-website-30-minutes/
那么,我们可以使用什么样的设置来确保在应用程序数据中心遭受重大中断时几乎即时的故障转移?我在这里读到 www.tenereillo.com/GSLBPageOfShame.htm有多个 A 记录是一种解决方案,但我们无法负担会话同步(还)。我们正在探索的另一种策略是拥有两条 A 记录,一条指向应用服务器,第二条指向反向代理(位于不同的数据中心),如果主应用服务器启动,则解析为主应用服务器,如果启动则解析为备份服务器。你觉得这个策略合理吗?
只是为了确定我们的优先事项,我们有能力让我们自己的网站或应用程序关闭,但我们不能因为我们的停机时间而让客户的网站变慢。因此,如果我们的应用服务器关闭,我们不打算使用默认应用程序响应进行响应。即使是一个空白的响应就足够了,我们只需要浏览器完成该 HTTP 连接(除此之外别无他物)。
参考:我读了这个有用的线程serverfault.com/questions/69870/multiple-data-centers-and-http-traffic-dns-round-robin-is-the-only-way-to-assure
我有一个奇怪的间歇性连接问题,大约每两周发生一次。
首先是我的配置:我正在运行一个带有两个物理主机(node01 和 node02)的 HyperV 故障转移集群。主机都运行带有 SP1 的 Windows Server 2008 R2 HyperV 服务器(免费的)。在这些主机上,我运行了两个 VM,每个 VM 都运行带有 SP1 的 Windows Server 2008 R2 Web 版。我的存储服务器是通过 iSCSI 连接的 Windows Storage Server 2008。主机和存储服务器都运行直接从英特尔网站下载的最新网络驱动程序。
问题是:在 99.99% 的情况下,一切正常。大约每两到三周一次,VM 将同时失去传入和传出的网络连接。当这个情况发生时,
这种情况已经发生了大约 5 次,症状与上述相同。我怀疑是网络驱动程序或网络硬件问题,但由于我已经在运行最新的驱动程序,我不知道该怎么办。
这真是令人头疼……有什么想法吗?
更新
我在这里发现了一个非常相似的案例:虚拟机失去了 Hyper V 集群上的网络连接
2011 年 7 月 29 日更新 …
networking failover hyper-v hyper-v-server-2008-r2 failovercluster
我已经阅读了一些关于将 nics 与 ifenslave 结合的内容;我无法理解的是是否需要特殊配置才能在两个交换机之间拆分绑定。例如,如果我有几台服务器,每台服务器都有两个网卡和两个独立的交换机,我是否只需配置绑定并将每个网卡的 1 个插入交换机 #1,将另一个插入交换机 #2?或者还有更多吗?
如果绑定是主动备份,单台机器上的网卡故障是否意味着服务器可能会断开连接,因为其余机器正在使用主网卡而它正在使用辅助网卡?或者你也用一根电缆连接交换机?
有没有办法让keepalived定期发送免费的ARP?
我们有以下情况:
因此,我们认为我们可以通过定期 GARP 来避免这种情况。这是一个好方法吗,有没有办法在keepalived中做到这一点?
还有其他建议可以避免此类问题吗?
保活配置:
global_defs {
notification_email {
email@address.com
}
notification_email_from SERVER_1
smtp_server smtp.server.local
smtp_connect_timeout 30
router_id SERVER_1
}
vrrp_instance V1 {
state BACKUP
nopreempt
interface eth0
lvs_sync_daemon_interface eth0
virtual_router_id 150
priority 120
advert_int 1
persistence_timeout 0
smtp_alert
authentication {
auth_type PASS
auth_pass xxx
}
virtual_ipaddress {
10.xxx.xxx.xxx …Run Code Online (Sandbox Code Playgroud) 我想在故障转移系统中设置 MSMQ。
我没有共享存储设置(硬件不可用 - 预算),但我有三个运行 Windows Server 2016 的 dl380。
我想使用仲裁服务器设置故障转移。
这个设置可以吗?