Heartbeat是Linux下最常用的HA方案之一,主要为了解决集群前置服务器的单点失效问题。Heartbeat顾名思义可以在两台电脑间通过心跳信号来互相探测对方是否正常工作,因此,这两台电脑间需要有相应的物理介质连接起来。在这里,我并没有使用额外的网线(CAT-5双绞线)和网卡来实现,而是采用了串口线来建立心跳连接。
这样,在VirtualBox虚拟环境中,虚拟机间还需要使用一个虚拟的串口互相连接,这还需要一个软件的配合:Named Pipe TCP Proxy。如图 1,在本机上通过Named Pipe TCP Proxy可以新建一个命名管道,这样运行于本机上的虚拟机就可以将虚拟机串口的I/O重定向到这个管道上,如果两个虚拟机都定向到这个管道的时候,就相当于两个虚拟机通过一根串口线连接到了一起。
图 1 在Named Pipe TCP Proxy中新建管道连接
这样,在创建Linux虚拟机的时候,两个虚拟机就都使用“//./pipe/vbox”作为虚拟串口,唯一的区别是首先启动的虚拟机需要勾选“创建通道”选项,如图 2。
图 2 Linux虚拟机的串口设置
分别启动两个Linux虚拟机,首先验证一下两台虚拟机是否虚拟地通过串口连接到了一起。为了便于区分,我这里用这两台虚拟机的机器名分别代表它们:(IP:192.168.2.101)和(IP:192.168.2.102)。我们可以分别在两台虚拟机上打开终端,在上执行命令:
[root@ ~]# cat < /dev/ttyS0
这样,输入到这个虚拟机COM1串口的数据都会在控制台中打印出来,如果我们在虚拟机上执行echo命令:
[root@ ~]# echo 'test serial connection' > /dev/ttyS0
在上可以看到这段文本:
[root@ ~]# cat < /dev/ttyS0
test serial connection
这样表明,从串口发送的数据可以被串口接收到,两台虚拟机相当于通过串口线连接在了一起。