我有两个复制的 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 实际上无法为单个域提供不同的记录。事实上,从服务器应从主服务器接收区域文件,以确保其提供完全相同的信息。