我目前管理着一个运行带有 apache、mysql 和 ssh 的 ubuntu linux 的小型 web 服务器。我正在使用 rsync 将其备份到另一台服务器,但我正在将其备份到 /backup 目录。
我想设置它,如果第一台服务器出现故障,我可以更改第二台服务器的 ip 并准备好所有用户、文件、数据库等。
有没有人对最简单/最好的方法有任何建议?
注意事项
简短而甜蜜,我认为您不需要比这更多的细节:
我们在内部网络服务器上托管我们的网站。
当网络进/出我们建筑物的通信停止时,灾难已经并将再次发生。
发生这种情况时,我们希望我们的用户在尝试访问我们的网站时至少看到某种 “停机维护”或其他消息(twitter 的失败鲸鱼?),而不是当前“未找到服务器” 类型的消息他们目前得到。(静态服务器,所有请求的临时重定向)。
[能够故障转移到功能齐全的网站会很棒,但不是必需的,也可能不是一种选择]。
显然,当我们的本地服务器关闭时,必须有某种异地故障转移可以接管。
这样的解决方案是如何实施的?其他建议?
编辑:如果我没有为此使用(或遗漏)一些正确的术语,请告诉我!
我目前正在使用 linux box 来使用 iptables 处理我的防火墙/NAT。它有两个 NIC,一个连接到 LAN 交换机,一个连接到我们的出口 Internet 提供商。我正在考虑将这个盒子升级到两个盒子以实现冗余,并向解决方案添加第二个 Internet 提供商。这意味着我需要四个我相信的端口(如果我错了,请纠正我)
我读过 carp+pfsync 是一个很好的解决方案。这是目前你们大多数人正在使用的吗?linux中是否有等效的解决方案?
对于与上述类似的设置,截至今天,对于易于配置的热故障转移有哪些建议?
我有一个互联网连接的 Ubuntu 服务器,通过以太网连接到住宅 ADSL 线路。大多数情况下,这是足够的,但我不能依赖 ADSL 链接像我希望的那样可靠。墨菲定律已经规定,停机时间在最不方便的时候到来。
我想使用“即用即付”的 3G USB 加密狗来提供故障转移。我缺乏有关适用于其他人的示例配置的信息 - 以及最适合我的(廉价)硬件的信息。目的是,当我的 ADSL 线路断开时,服务器检测到这一点并拨打 3G 服务 - 监控 ADSL 线路并在连接恢复时无缝切换回。
我关心的主要服务是 OpenVPN 隧道 - 通过 UDP 到远程服务器。另一个有用的服务是 Squid - 所以当 ADSL 断开连接时,我仍然可以从我的 LAN 访问网络。
问题:
我已经使用 PG Pool 设置了两台服务器来为 web 应用程序创建 HA 设置。
PGPool 和 postgres 在两台服务器上运行,使用从服务器 1 到服务器 2 的流式复制。每台机器上的 webapp 连接到 PgPool,然后将请求发送到当前主服务器。如果数据库连接中断,它被设置为自动故障转移,它运行自定义故障转移脚本将服务器 1 降级为从服务器并将服务器 2 提升为主服务器。
今天早上发生的事情是,网络中断了 2 分钟,这意味着两个 PGPool 实例都无法相互通信 - 因此每个 PGPool 都认为另一台机器出现故障。
服务器 1 - 继续作为主服务器,断开服务器 2
服务器 2 - 启动故障转移,断开服务器 1 并使其自己成为主服务器
由于网络关闭,故障转移命令无法通过服务器 1 使其成为从服务器,反之亦然。因此,当网络在 2 分钟后恢复正常时,我所拥有的是两台服务器,它们都认为自己是主服务器。
PgPool 似乎没有自动故障回复命令,可以用来在网络重新连接时强制服务器 1 再次成为主服务器,这是我能想到的唯一真正的解决方案。
我的问题是我应该如何处理这种情况?这甚至是此设置的正确架构吗?当然,这是一个常见的情况,我无法理解如何解决这种问题。
编辑:是否建议 pgpool 在 linux-ha 下的虚拟 ip 下运行?这可以解决问题,而且我已经为公共 IP 启动并运行了它——这样,任何一台机器都只能访问一个 pgpool 实例。
我将按照本指南为 MySQL 复制(1 个主和 1 个从)设置故障转移:https : //github.com/jayjanssen/Percona-Pacemaker-Resource-Agents/blob/master/doc/PRM-setup-guide .rst
这是输出crm configure show:
node serving-6192 \
attributes p_mysql_mysql_master_IP="192.168.6.192"
node svr184R-638.localdomain \
attributes p_mysql_mysql_master_IP="192.168.6.38"
primitive p_mysql ocf:percona:mysql \
params config="/etc/my.cnf" pid="/var/run/mysqld/mysqld.pid"
socket="/var/lib/mysql/mysql.sock" replication_user="repl"
replication_passwd="x" test_user="test_user" test_passwd="x" \
op monitor interval="5s" role="Master" OCF_CHECK_LEVEL="1" \
op monitor interval="2s" role="Slave" timeout="30s"
OCF_CHECK_LEVEL="1" \
op start interval="0" timeout="120s" \
op stop interval="0" timeout="120s"
primitive writer_vip ocf:heartbeat:IPaddr2 \
params ip="192.168.6.8" cidr_netmask="32" \
op monitor interval="10s" \
meta is-managed="true"
ms ms_MySQL p_mysql \ …Run Code Online (Sandbox Code Playgroud) failover mysql-replication high-availability pacemaker corosync
作为他非常受欢迎的问题的后续问题:为什么不建议使用 DNS 故障转移?,我认为由于缓存,DNS 故障转移不是 100% 可靠的。
然而,投票最高的答案并没有真正讨论在两个不同数据中心之间实现故障转移的更好解决方案是什么。提出的唯一解决方案是本地负载平衡(单个数据中心)。
所以我的问题很简单,跨数据中心故障转移的真正解决方案是什么?
domain-name-system disaster-recovery failover high-availability datacenter
我必须为 Magento 进行设置。我的限制主要是易于设置和容错/故障转移。此外,成本也是一个问题。我有三个相同的物理服务器来完成工作。每个服务器节点在软件 RAID 1 配置中都有一个 i7 四核、16GB RAM 和 2x3TB HD。每个节点都运行 Ubuntu 12.04。马上。我有一个额外的 IP 地址,可以路由到这些节点中的任何一个。
Magento 商店有最大。1000个产品,其中50%是捆绑产品。我估计最大。10 个用户同时处于活动状态。这使我得出结论,性能不是这里的重中之重。
一个节点 (lb) 将 nginx 作为负载均衡器运行。附加 IP 与域名一起使用并默认路由到此节点。Nginx 将负载平均分配给其他两个节点(shop1、shop2)。Shop1 和 shop2 配置相同:每个服务器运行 Apache2 和 MySQL。Mysqls 配置了主/从复制。
我的故障转移策略:
这是一个明智的策略吗?有没有人用 Magento 做过类似的设置?
另一种方法是使用 drbd 将 MySQL 数据文件存储在 shop1 和 shop2 上。我知道在这种情况下,只有一个节点/MySQL 实例可以处于活动状态,另一个用作热备用。因此,如果 shop1 失败,我会在 shop2 …
我有一台 Fortigate 100D,带有 2 个 BT Business Infinity 光纤连接,用作 WAN1 和 WAN2。
BT 线路各有 5 个静态公共 IP,我的 DNS 通过 CloudFlare 托管,指向 WAN 连接之一上的静态 IP。
(假设您在 mylesgray.com 上执行 nslookup,您将看到 217.45.201.1 作为公共 IP)。
我们希望为我们的 A 记录(用于托管网站、VPN、ssh 等)提供冗余,但显然 2 条 BT 线路有 2 组不同的公共 IP,因此如果 WAN1 出现故障,我们将陷入困境 - 没有故障转移,因为地址是静止的。
我已经查找了外部 DNS 故障转移,但这对我来说似乎很混乱而且非常错误(循环法让我很恼火)。然后任播作为一个选项出现,然而,任播似乎需要整个 /24 块或在某些 ISP 的强制转换中甚至是 /22。我们正在运行企业级路由器,因此使用 BGP 等不是问题。
任何人都可以了解如何在不购买 /22 块 IP 或使用循环 DNS 的情况下实现 DNS A 记录的故障转移吗?
设置:虚拟主机,运行 server 2012,托管大约 10 个生产虚拟机
问题:昨晚,2 台虚拟机在没有警告、事件日志通知或任何信息的情况下停止。该主机上的其余 VM 运行良好。我们发现了这个错误,因为它是在营业时间之前,决定重新启动虚拟主机。一旦虚拟主机恢复正常,所有虚拟机都出现了与其他两个之前完全相同的问题。除了一个。10 个虚拟机中有 1 个仍然运行良好。完整的错误消息在这里:
[Window Title]
Hyper-V Manager
[Main Instruction]
An error occurred while attempting to start the selected virtual machine(s).
[Content]
'VMNAME' could not initialize.
An attempt to read or update virtual machine configuration failed.
[Expanded Information]
'VMNAME' could not initialize. (Virtual machine ID IDREMOVED)
'VMNAME' could not read or update virtual machine configuration: Unspecified error (0x80004005). (Virtual machine ID IDREMOVED)
[^] Hide details [Close]
Run Code Online (Sandbox Code Playgroud)
到目前为止我们检查过的内容:
failover ×10
redundancy ×2
3g ×1
a-record ×1
corosync ×1
datacenter ×1
drbd ×1
firewall ×1
hyper-v ×1
iptables ×1
linux ×1
magento ×1
master-slave ×1
modem ×1
networking ×1
openbsd ×1
pacemaker ×1
postgresql ×1
ubuntu ×1
vhd ×1
web-server ×1