我拥有并经营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
有没有办法让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) 我一直在研究 SQL Server 2005 的各种高可用性选项。关于高可用性,在什么情况下更倾向于集群而不是镜像?
据我所知,镜像具有许多优点,包括没有单点故障存储设备、无需购买昂贵的集群硬件,以及假设您有见证服务器的情况下更快的自动故障转移。
我能想到的唯一有利于集群的情况是您拥有两台以上的服务器。
谁能提供进一步的见解?
我有几种情况,我需要在发生故障(服务器挂起或崩溃)时将应用程序从一台服务器迁移到另一台服务器。
在solaris 上,我们使用VCS (Veritas Cluster Server) 执行此操作。Linux 有哪些可用的选项?
请说明设置/维护的努力程度或每个人的成本(如果有的话)。
-- 添加了更多详细信息 --
给出复杂程度的概念:
这是一个数据收集或计算节点,而不是一个数据库,所以更简单的解决方案可以工作。
——更多细节(抱歉)——
共享存储不是一种选择,但不需要太多状态(如果有)从一台服务器迁移到另一台服务器。我们通过 rsync 保持两台服务器同步。
非常感谢您到目前为止的所有帖子。
如果您负担不起或不需要在发生故障时等待联机的集群或备用服务器,那么您似乎可以将一台功能强大的服务器提供的服务拆分到两台功能较弱的服务器上。因此,如果服务器 A 出现故障,客户可能无法访问电子邮件,如果服务器 B 出现故障,他们可能无法访问 ERP 系统。
虽然起初这看起来更可靠,但它不是简单地增加了硬件故障的机会吗?因此,任何一次失败都不会对生产力产生如此大的影响,但现在您正在为两倍的失败做好准备。
当我说“不那么健壮”时,我真正的意思是较低的组件规格,而不是较低的质量。因此,一台机器规格用于可视化,而两台服务器规格分别用于减少负载。
通常建议使用 SAN,以便您可以使用集群或迁移来保持服务正常运行。但是 SAN 本身呢?如果我要把钱花在将要发生故障的地方,它不会是在基本的服务器硬件上,而是与存储有关。如果您没有某种冗余 SAN,那么这些冗余服务器不会给我很大的信心。就个人而言,对于小型操作而言,投资具有冗余组件和本地驱动器的服务器对我来说更有意义。我可以看到 SAN 的价格和灵活性具有成本效益的大型操作的好处。但是对于较小的商店,我没有看到争论,至少不是为了容错。
我是小型软件公司的系统管理员。我要虚拟化我们的服务器。这样做的主要原因是提供尽可能高的正常运行时间,但也可能会增加资源利用率。
我们有两台服务器。一方面,我们的开发虚拟机很少,而且还用作构建服务器(Jenkins Master,但也有 Build Executor)。在第二个中,我们得到了一些关键服务(代码存储库、问题跟踪器)。
我想使用这些机器创建两个节点集群并为每个服务创建 VM。我想使用 DRBD,因此可以在节点之间移动机器。
经过一些研究,我的候选人是 Proxmox 和 Ganeti。在我的情况下,哪一种会更好?我喜欢 Proxmox 的简单性(尤其是安装简单性),但也许使用 Ganeti 有正当理由?
对于一个项目,我的任务是为网上商店和 CMS 系统规划高可用性设置。但是,当然,该项目的预算很紧。因此,高端解决方案可能不在预算之内。
将有两台机器运行 Web 服务器(CMS、商店),一台运行数据库的机器,以及一台运行传真服务器的机器,用于向合作伙伴交付订单。所有系统都运行 Linux。所有这些组件都需要高度可用,并且应该支持透明的故障转移。
为了降低硬件成本,我想到了虚拟化环境。那里有很多信息,但我不知道确切地开始。很明显,至少需要服务器作为虚拟机的主机,因此不存在单点故障。
支持高可用性的最佳方式是什么?
第一个问题是在这种情况下哪种虚拟化解决方案是最好的。需要有某种管理界面。需要有一种方法将正在运行的虚拟机从一台主机移动到另一台主机,以便维护主机。需要某种机制,以便在一台主机出现故障时虚拟机仍然可用。你能在这里就一个有效的解决方案提出建议吗?
在大多数情况下,共享文件存储似乎是高可用性的先决条件(期望相当昂贵的 VMware vSphere)。但是,宁可在虚拟机主机上投入更多资金,也不愿向设置中添加另外两台服务器以提供冗余 NFS 文件存储。有没有可能只和两个虚拟机主机相处?一个解决方案可能是两个也将这两个用作 NFS 主机。这样做有很大的性能损失吗?
编辑:我的目标是 99.9% 的可用性。但是,不需要 24/7 可用,因为有正常的营业时间,这提供了一些操作空间。必须以某种方式保证可用性的时间段是上午 10 点到午夜之间。
假设我有给定域的 2 个 IP(循环 DNS)。
如果一个 IP 变得无响应,客户端是否会尝试连接到另一个 IP?或者他们将无法与域建立通信?
domain-name-system high-availability redundancy fault-tolerance round-robin
我使用双头 ZFS 支持的 NAS 用于高可用性集群共享存储,基于 Nexenta 推荐的架构,如下所示:
1 个 JBOD 中的磁盘将存储单个 4 TB Postgres 数据库的数据库文件,另一个 JBOD 中的磁盘存储 20 TB 的大型原始二进制平面文件(大型恒星物体碰撞模拟的集群结果)。换句话说,支持 Postgres 文件的 JBOD 将主要处理随机工作负载,而支持模拟结果的 JBOD 将主要处理串行工作负载。两个头节点都有 256 GB 内存和 16 个内核。该集群有大约 200 个内核,每个内核维护一个 Postgres 会话,所以我预计大约有 200 个并发会话。
我想知道在我的设置中让 ZFS 头节点同时充当集群的一对镜像 Postgres 数据库服务器是否明智?我能看到的唯一缺点是:
但是,我看到的优点是 ZFS 无论如何在自动故障转移方面都非常愚蠢,而且我不必花费大量工作让每个 Postgres 数据库服务器确定头节点是否发生故障,因为它会与头节点一起失败节点。
假设我们有两个服务器 A 和 B,具有“真实”和外部 IP,我们可以切换所谓的“故障转移 ip”(WXYZ)以指向 A 或 B 的特定外部 IP。这从“外部”工作并且是轻松完成。作为背景:故障转移 ip 配置为 /etc/network/interfaces 中的新条目:
auto eth0:0
iface eth0:0 inet static
address W.X.Y.Z
netmask 255.255.255.224
Run Code Online (Sandbox Code Playgroud)
现在让我们假设 WXYZ 被动态配置为使用硬件 A。现在我从 B 调用'curl domain.com',它使用正确的故障转移 ip WXYZ 但然后以某种方式解析到错误的外部 IP B(或本地主机?)而不是使用配置的一个A:
Trying W.X.Y.Z ...
* connect to W.X.Y.Z port 443 failed: Connection refused
* Failed to connect to domain.com port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to domain.com port 443: Connection refused
Run Code Online (Sandbox Code Playgroud)
当我启动本地 nginx 时,它可以成功 curl …
domain-name-system ubuntu failover high-availability hetzner
failover ×4
arp ×1
bgp ×1
cluster ×1
ganeti ×1
hardware ×1
hetzner ×1
keepalived ×1
linux ×1
postgresql ×1
proxmox ×1
redundancy ×1
round-robin ×1
storage ×1
ubuntu ×1
vcs ×1
zfs ×1
zfsonlinux ×1