这个故障转移方案能起作用吗?

这个故障转移方案能起作用吗?

我有两个复制的 LAMP 服务器,一个作为从服务器,另一个作为主服务器:

Master: Name = master.kimsufi.com - IP = 5.5.5.1
Slave:  Name = slave.kimsufi.com  - IP = 5.5.5.2

(如您所见,两者都已在 kimsufi 注册)

有了这些服务器和无需额外的 IP 地址,我的目的是举办www.域名.com与 Master 连接,以防万一发生故障,将控制权转移给从属设备(我知道有像 Heartbeat 这样的软件可以实现这一点,但是需要一个虚拟 IP,它是一个额外的 IP 地址,而 Kimsufi 不允许这样做)。

我一直在思考这个问题,并“找到”了一个可能的解决方案,但我确信它无效,因为我没有在任何地方找到它(而且我的网络知识很少)。也许你可以帮助我找到这个问题。

这个想法是在每个服务器中添加一个 DNS 服务器,并将从服务器配置为备份服务器,以防万一掌握无法解决。或多或少,这个想法是在寄存器中设置域名.com像这样:

Primary DNS: Master (5.5.5.1)
Secondary DNS: Slave (5.5.5.2)

然后,掌握服务器将像往常一样配置,指向他的bind9服务于掌握服务器:

$TTL        86400
@       IN      SOA     master.kimsufi.com. user.gmail.com. (
                        2014011302       ; serial, todays date + todays serial #
                        28800              ; refresh, seconds
                        7200              ; retry, seconds
                        604800              ; expire, seconds
                        86400 )            ; minimum, seconds
;

domain.com.   86400 A        5.5.5.1
domain.com.      NS        master.kimsufi.com.
domain.com.      NS        slave.kimsufi.com.
www           86400 A        5.5.5.1

奴隶说:

$TTL        86400
@       IN      SOA     slave.kimsufi.com. user.gmail.com. (
                        2014011304       ; serial, todays date + todays serial #
                        28800              ; refresh, seconds
                        7200              ; retry, seconds
                        604800              ; expire, seconds
                        86400 )            ; minimum, seconds
;

domain.com.   86400 A        5.5.5.2
domain.com.      NS        master.kimsufi.com.
domain.com.      NS        slave.kimsufi.com.
www           86400 A        5.5.5.2

因此,如果你尝试用这个进行挖掘,你会得到类似这样的结果:

ivan@local:~$ dig domain.com NS

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> domain.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33268
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;domain.com.            IN  NS

;; ANSWER SECTION:
domain.com.     86400   IN  NS  master.kimsufi.com.
domain.com.     86400   IN  NS  slave.kimsufi.com.

;; Query time: 87 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Jan 14 15:30:11 2015
;; MSG SIZE  rcvd: 78

这个想法是掌握是主名称服务器,它将处理任何查询域名.com但如果是离线的话,奴隶做这项工作。

我没有测试过,这只是一个想法(目前我在 kimsufi 只有一台服务器)。有可能吗?这个方案有什么缺陷?

答案1

首先,您需要正确设置您的 DNS 服务器。

您的设置有些不合常规,可能会在标准检查中失败(例如,您的 SOA 记录在为该区域服务的所有名称服务器上都必须相同)

设置主/从 DNS 服务器的正确方法是设置主服务器并将从服务器配置为 AXFR 将区域从主服务器传输给它。

所以两个都DNS 服务器将随时处理请求,并且对区域的任何更改都应仅有的在主服务器上。 任何更改后,您只需在主服务器上重新加载区域,它也将自动传输到从属服务器。

网络上有大量关于如何设置具有主/从配置的 DNS 服务器的教程。

使用具有区域传输的标准主/从配置,您无需担心 DNS 级别的故障转移。
这些由 DNS 协议本身自动处理。
因此,如果一个名称服务器发生故障,查询您域的 DNS 解析器将自动转到下一个可用的名称服务器(如区域文件的 NS 记录中所定义)

现在,为了服务您的 HTTP 流量,您只需添加 2 个指向 2 个服务器 IP 的 A 记录。

domain.com.   86400 A        5.5.5.1
domain.com.   86400 A        5.5.5.2
www           86400 A        5.5.5.1
www           86400 A        5.5.5.2

这样,当浏览器想要连接网站时,它会看到有 2 个 IP 为该网站提供服务,它会选择 DNS 服务器响应的第一个 IP。如果该 IP 没有响应任何请求,它会自动尝试下一个 IP。

如果某个 IP 正在运行,然后突然停止响应请求,情况也是如此。浏览器将自动切换到下一个 IP(当然第一次会有一些延迟)

本质上,拥有 2 个 A 记录您就可以获得高可用性/冗余以及负载平衡,因为 DNS 服务器将以循环方式向客户端提供 IP。

但请记住,上述设置要求两台服务器提供完全相同的内容。
因此,如果您的网站是动态的,并且具有数据库后端,则您可能必须配置数据库主主复制、一种复制会话的方法(如果这对网站很重要)以及某种复制文件的方法。

再次强调,这在很大程度上取决于你的网站,因此没有一劳永逸的解决方案

答案2

该方案的缺陷在于,主/从设置中的 DNS 实际上无法为单个域提供不同的记录。事实上,从服务器应从主服务器接收区域文件,以确保其提供完全相同的信息。

相关内容