IRC 服务支持故障转移吗?

IRC 服务支持故障转移吗?

我运行一台服务器(称之为“服务器 A”)IRC“网络”,感谢一些朋友的慷慨解囊,我获得了第二台服务器('服务器 B')我可以在上面运行 IRCd,以便在服务器 A 崩溃时提供冗余。这样很好,我可以设置一个循环 DNS 并链接服务器。我遇到的问题是如何处理服务?是否有人知道在服务器发生故障时使服务“故障转移”的方法?例如,服务器 A 开始运行服务,但突然崩溃。服务器 B 检测到此情况并启动自己的服务副本(理想情况下,配置和数据与服务器 B 上的服务相同)

我想到的一个解决方案是编写一个机器人,每个服务器都运行该机器人,该机器人位于一个频道中,定期检查来自另一台服务器的机器人是否在该频道中。如果是,则一切正常。如果不是,则进行故障转移。不过,我宁愿不必自己编写代码

我们目前在 Linux 上使用 Unreal IRCd 和 Anope 服务

答案1

简短回答:你不能与 Anope(或我所知道的任何其他服务系统)

长答案:你的想法很好,你可能不必从头开始编写代码 - 你可能可以使用现有的简单 IRC 机器人模板代码(例如使用 Python);它们也不一定必须定期轮询其他机器人,而只需处理加入/退出/退出消息。当然,你必须以某种方式处理各种竞争条件(例如网络分裂、数据库访问问题等)

答案2

最接近故障转移的方法就是在不编写自定义服务代码的情况下(这不是一项简单的任务)在网络上已经运行 IRCd 的几个其他帐户上安装服务,并 crontab 一个 rsync 脚本来将服务数据库分发到其他机器。这样,如果盒子服务坏了,您可以从另一台机器启动服务,并且仍然拥有相对最新的数据库。

Crontab 并不难学,rsync 也不难,而且比编写自定义解决方案要快得多。

最重要的是,此方法适用于所有使用平面数据库的现有服务包。

答案3

根据 @IRCGuru 所述。还可以为每个要访问的服务器设置 DNS 故障转移 viva region.irc.yourirc.net。这两种方法在您描述的环境中以及在虚拟机环境中运行时都可以很好地工作。

使用 vm 版本,您可以简单地启动服务器的第二个实例,并将入站端口从一个重定向到另一个,甚至可以在两者之间进行负载平衡,使它们内部相互连接,以防止通道中的网络分裂。

相关内容