Articles of 高可用性

更改Linux上的主机名ha故障转移情况

我已经configuration了两台机器进行热备份,以便机器2可以接受机器1的IP,如果这样做会失败并成为它的替代品。 可悲的是,这还不够,我也需要改变主机名/ fqdn,因为一些软件依赖于本地主机名,并在故障转移后主机名不同时崩溃。 所以问题是:我如何更改我的主机名并将其更改回机器1回到正轨?

心跳:/etc/ha.d//haresources中的节点名称不正确

我试图在service heartbeat start Ubuntu 10.04上开始心跳,但得到以下错误: heartbeat[24829]: 2011/11/22_19:31:07 ERROR: Bad nodename in /etc/ha.d//haresources [node1] heartbeat[24829]: 2011/11/22_19:31:07 ERROR: Configuration error, heartbeat not started. 在服务器上uname -n产生loadb1 ,在第二个服务器上uname -n产生loadb2 。 这两个服务器可以用这些名字相互ping通。 这是两个服务器上的/etc/ha.d/ha.cnf : debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 10 udpport 694 bcast eth1 ucast eth0 my.external.ip ucast eth0 my.external.ip ucast eth1 10.0.0.5 ucast eth1 10.0.0.6 […]

在失败时交换DNS条目

我正在构build一个需要高可用性的应用程序。 我们目前运行:4个Web服务器,2个清漆服务器(两个都用磅代表SSL代理),3个Cassandra节点。 清漆服务器被用作系统的入口点。 我们要configurationVarnish A始终工作的所有东西,直到失败,然后Varnish B应该收到请求并将其分发给Web服务器。 由于光油A和光油B不在我们公司的同一直stream电和其他一些要求,所以不可能使用一些类似心跳的系统来使用虚拟IP。 我们决定用我们网站的CNAMElogging来解决这个问题。 我们现在有这样的东西: hac.domain.com CNAME hac1.domain.com(TTL = 60s) hac1.domain.com A 12.34.56.78(TTL = 86400s) hac2.domain.com A 22.33.44.55(TTL = 86400s) 我们的想法是在我们检测到失败时交换hac.domain.com CNAMElogging。 这给了我们大约2分钟的最大停机时间(如果没有DNScaching仍然redirect到错误的服务器)。 可以接受我们的用例。 主要问题:如何以冗余方式检测故障并防止误报?

提供HA访问外部(光纤)RAID子系统的build议

我们正在考虑使用具有冗余(2)光纤控制器的外部RAID子系统升级存储容量,每个控制器具有4个8 Gbps光纤端口。 我想通过HA Linux来访问这个存储系统。 理想情况下,我会将每个控制器的2个光纤端口连接到每个Linux服务器,然后通过10 Gbe接口导出NFS或iSCSI。 我已经看到很多关于DRBD的参考资料,但是所有这些参考资料都倾向于使用单独连接到每台计算机的块存储,而不是具有共享块存储设备,所以我不确定DRBD是否可以(或应该)用于这个案例。 想法?

Linux HA心跳虚拟IP交换与链接到它的域名

我在两台服务器上设置了心跳,如下所示: 主人 :10.15.1.50 备份 :10.15.1.51 (虚拟IP: 10.15.1.52 ) 所以,主人总是有10.15.1.52,但是如果下降,备份将会超过10.15.1.52。 这工作完美,并在10秒内失败。 我们有一个域名链接到10.15.1.52,所以当服务器故障时它是透明的。 我们注意到,尽pipeIP在10秒内切换,但在服务器实际通过域名访问之前可能需要10-20分钟。 我们有一个路由器转发端口80,因为10.15.1.52是一个私有IP。 这没有任何意义,因为我们实际上并没有改变域名registry中的任何内容。 一旦IP故障转移,备份服务器应该可以通过域名访问。 问题可能是路由器上的NAT吗? 这似乎是某种主机validation问题。 编辑:现在我想到了,这可能是路由器上的ARP表的问题

在两个不同的数据中心使用两台服务器进行简单的冗余设置?

问题的范围 这个问题完全是关于让一个客户端请求一个域: example.com到两个可用的服务器之一。 如何处理这个问题是另一个需要解决的问题,因此不应该在答案中提及。 可用的工具 我可用的工具是分布在位于另一个物理位置的两个不同数据中心( data center A和data center B )的两个专用服务器( server A和server B )。 server A的纯虚拟 IP地址表示为aaaa , server B的IP地址表示为bbbb 。 两台服务器都有一个Linux发行版,这并不重要。 由于我想自己控制事物,我不希望使用任何第三方服务(托pipeDNS,CDN等)。 因此,这些是我唯一的工具。 目标 我所指望的这场灾难是在我正确地在两台服务器上正确设置好一个星期之后,氢弹消灭了两个数据中心之一。 我希望我的域名example.com在任何时候都可用,尽pipe我不打扰几秒钟甚至几分钟的停机时间,因为服务器非常可靠,甚至可能一年不会超过一次。 另外一个显示“我们正在忙着解决问题”的简单页面可以将这个可以接受的停机时间延长到一个小时左右。 我的固定解决scheme 我问这个问题已经有一段时间了,现在我有一个合理的冗余设置。 由于它是封闭的,我不能张贴这个答案:( 这两个服务器结果都有相同的example.com域的DNSlogging: # DNS records for both server A and server B example.com. NS ns1a.example.com. example.com. NS ns1b.example.com. example.com. NS ns2a.example.com. example.com. NS […]

Corosyncdynamic添加节点

我一直在尝试与心脏起搏器和Corosync HA设置。 我把它安装在两个Ubuntu 14.04 Linode上,经过了很多过时的configuration例子和教程,设法启动并运行。 这主要是因为我必须将它设置为使用UDP单播才能工作(组播和广播不能在Linode的networking上工作) 两个节点都能够看到对方,并且能够检测到另一个节点的状态。 大! 现在我想尝试在集群运行的时候添加第三个节点,所以我要去寻找一些命令来这样做…不…不…这个看似重要而简单的动作是,尽我所能告诉,不可能用一个简单的命令。 要添加节点,您必须将其添加到每个节点的configuration中,然后closures群集,重新加载并重新启动。 高可用性超出了窗口。 dynamic添加我能find的节点的唯一方法是在cmap_keys(8)之下。 我必须先运行一个命令来查找下一个空闲的节点ID。 然后,对于群集中的每个节点,手动将其添加到nodelist.node.x.ringy_addr,依此类推。 即使在重启之后,我也必须手动更新每个configuration文件。 那么我必须复制新的configuration文件到新的节点,并启动它。 可以连接到集群中的任何节点,发出改变现有节点的命令,并添加资源,这些资源将在所有节点之间同步。 但是我不能以同样的方式添加一个新节点? 请有人告诉我,我只是在使用Googlesearch的信息不好,并且有一个简单的命令来添加新的节点,在运行中的HA集群。 有没有我忽略的工具或方法? 感谢您的时间!

在Apache和Tomcat服务器之间configurationHA代理

想要用我现有的结构来configurationHA代理。 目前我有Apache-> Tomcat服务器。 这个我想改成Apache-> HA Proxy-> Tomcat Server。 HA我configuration了Http请求。 但是我的Apache与AJP13一起工作。 我需要改变吗? 1)Apacheredirect与Http请求? 要么 2)HA接受AJP请求(我不知道这个可以实现与否)? 我认为第一种select是可能的。 任何人可以build议我如何实现第一select? 还有哪一个是最好的办法。

将主节点降为从节点时获取运行特定资源的节点的IP地址

build立 我正在为具有2个节点(2个物理服务器)的Web应用程序设置HA群集: node1(当前master节点) node2(当前slave节点) 使用Corosync&Pacemaker我能够创build群集和一些资源代理,包括IP故障转移和Web服务器(apache)。 资源 Failover资源一次仅存在于一个节点上 使用python脚本对我的主机提供商进行API调用,以更新IP故障转移目标 WebServer资源在每个可用节点上都存在(作为克隆) 标准的OCF资源使用Apache的server-status处理程序 约束 有一个约束,说Failover和WebServer必须同时在服务器上运行,以便将其视为可用。 问题 现在我想创build一个自定义资源代理(就像我为IP故障转移所做的那样),它将: 将当前从节点的mysql实例切换到主节点 将当前主节点的mysql实例切换到新主节点的从节点 Redis实例基本上是一样的 理想情况下,资源将仅在一个节点( 主节点)上启动,并在所有其他节点( 从节点)上停止。 因此,启动资源会将当前节点置于master模式,并停止将其置于slave模式。 我做了一个脚本,可以轻松实现所有这些操作。 这是如何工作的。 以主模式打开本地节点: # /usr/local/bin/db_failover_switch.sh master 在从属模式下打开本地节点: # /usr/local/bin/db_failover_switch.sh slave 123.45.67.89 大纲很简单明白。 我面临的问题是,我显然需要设置主IP以使从服务器相应地configurationMySQL和Redis服务。 TL; DR 在故障转移的情况下,我想: 资源在节点2上成为master节点 资源在节点1上成为slave节点 为了停止资源(即将其设置为从属模式),我需要知道正在运行资源的节点的IP地址(主机名将执行)。 有没有一种方法可以让我的dynamic参数Pacemaker将传递给我的资源代理? 或者,也许我可以直接从我的资源代理脚本检索群集信息,以知道哪个节点运行特定的资源?

系统如何决定服务是否正常

这个问题涉及到: autossh可靠的systemd服务 我有一个使用type = simple的服务。 这里systemd文档: Type = simple(默认):systemd认为服务立即启动。 该过程不得分叉。 如果需要在此服务上订购其他服务,则不要使用此types,除非它是套接字激活的。 想象一下,服务处于无限循环或挂起状态。 systemd如何知道服务是否正常? 如果系统和服务之间的IPC可能会有某种types的IPC吗? 我想要的是:我想要systemctl status foo-service来告诉我服务是否正常。 这不同于“服务的linux进程仍然存在”。