我运行一个服务器(称为服务器A) IRC的networking,感谢一些朋友的慷慨解囊,我得到了第二个服务器(服务器B) ,我可以运行一个IRCd以便在服务器A崩溃的情况下提供冗余。 这很好,我可以build立与服务器链接的循环DNS。 我遇到的问题是如何处理服务? 有谁知道在服务器故障的情况下让服务“故障转移”的方法吗? 例如,服务器A开始运行服务,但突然崩溃。 服务器B检测到这一点,并启动自己的服务副本(最好使用与服务器B上的服务相同的configuration和数据)
其中一个解决scheme就是写一个每个服务器都运行的僵尸工具,它定期检查来自其他服务器的僵尸程序是否在通道中。 如果是,那么一切都很好。 如果不是,那么故障转移。 我宁愿不必自己编码
我们目前在Linux上使用虚幻IRCd和Anope服务
简答 :你不能和Anope (或者我知道的任何其他服务系统)
长的答案:你的想法是一个好主意,你可能不需要从头开始编写代码 – 你可以把现有的模板代码用于简单的IRC机器人(例如Python)。 他们也不一定要定期轮询其他机器人,而只是处理join/部分/退出消息。 当然,你必须以某种方式处理各种竞争条件(例如networking分割,数据库访问问题等)
最接近于故障转移,你可以得到没有编码自定义服务(不是一个简单的任务)。 是将服务安装在您已经从networking上运行IRCd的一些其他帐户上,并使用crontab rsync脚本将服务数据库分发到其他计算机上。 这样,如果盒子服务已经死亡,则可以从另一台机器启动服务,并且仍然具有相对较新的数据库。
Crontab并不难学,rsync也比编写自定义解决scheme快得多。
最重要的是,这种方法适用于所有使用平面数据库的现有服务包。
build立在@IRCGuru所说的。 也可以为每个要访问的服务器viva region.irc.yourirc.net设置DNS翻转。 这两种方法在您所描述的环境中运行良好,并且在虚拟机环境中运行。
使用虚拟机版本,你可以简单地旋转你的服务器的第二个实例,并将入站端口从一个redirect到另一个,甚至在二者之间进行负载平衡,两者在内部相互连接,以防止通道中出现分割。