UCARP实现自动故障恢复

UCARP允许多个主机共享一个虚拟的ip地址,以提供自动的故障恢复功能,当其中某个主机宕机时,其它的主机会自动接管服务。UCARPCARP协议(通用地址冗余协议,最早在OpenBSD上实现)的linux实现版本,同时也能移植到其它多个unix平台,UCARP的官方网站:http://www.ucarp.org/project/ucarp

   

CARP协议的特点在于其非常低的开销,主机间使用加密数据传递信息,并且在冗余主机之间不需要任何额外的网络链接。

 

下载ucarp源代码包http://download.pureftpd.org/pub/ucarp/,在README中有ucarp的简单部署实例。

 

使用UCARP的需要设置的基本信息:

1.多个主机以构成冗余主机组;

2.一个共享的虚拟ip地址,用以对外提供可靠的服务。

冗余主机组中的某个主机会对会对这个ip上的服务进行应答;

3.对于每个主机,需要配置一个真实的ip地址;

4.一个1-255之间的共享标识符;

5.一个共享的密码(使得网络间传输的消息都为密文);

6.当冗余组中某个主机成为MASTER时执行的脚本程序;

7.当冗余组中某个主机不再是MASTER是执行的脚本程序;

 

使用实例:

 

1.需求分析

对于单元数据服务器(MDS)的分布式文件系统,会存在MDS的单点失效问题,可通过UCARP解决该问题。

两台用作MDS的主机地址分别为192.168.0.83192.168.0.84,通过地址192.168.0.200对外提供服务。

   

2.启用和禁用虚拟ip的脚本

/etc/vip-up.sh

#!/bin/sh

/sbin/ip addr add 192.168.0.200/24 dev eth0

 

/etc/vip-up.sh

#!/bin/sh

/sbin/ip addr del 192.168.0.200/24 dev eth0

 

由于UCARP在执行脚本时,传递的参数格式为:ip地址,接口名,其它附加参数:

在脚本中可用$1代替192.168.0.200,用$2代替eth0

 

在执行脚本的时遇到bad interpreter: No suchorfiledirectory错误,参照本文结尾部分Shell脚本执行问题。

 

 

3. 在冗余主机上启动UCARP服务

 

#192.168.0.83上启动UCARP服务

ucarp -v 42 -p love -a 192.168.0.200 -s 192.168.0.84 -u /etc/vip-up.sh -d /etc/vip-down.sh  &

 

#192.168.0.83上启动UCARP服务

ucarp -v 42 -p love -a 192.168.0.200 -s 192.168.0.84 -u /etc/vip-up.sh -d /etc/vip-down.sh  &

 

说明:-v指定共享标识符

  -p 指定共享密码

      -a 指定虚拟ip地址

      -s 指定主机的真实ip地址

  -u 指定启用虚拟ip的脚本

      -d 指定禁用虚拟ip的脚本

更加详细的说明可参考:ucarp -h

 

4. 测试

 

192.168.0.83, 192.168.0.84机器上启动分布式文件系统的服务器程序,在客户端上挂载使用,指定元数据服务器ip192.168.0.200

UCARP先后在83,84主机上启动,83MASTER, 84BACKUP

客户端挂载文件系统时,首先是由83主机提供服务,当关掉83主机的元数据服务器程序时,84主机马上接替了83主机的工作,为客户端提供服务。

 

Shell脚本执行问题

 

windows中用UltraEdit写了CARP需要的Shell脚本,在Linux中执行.sh脚本,提示错误bad interpreter: No suchorfiledirectory
分析:这是不同系统编码格式引起的,在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决方案:
1
)在windows下转换:
利用一些编辑器如UltraEditEditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。

2
)也可在Linux中转换:
vi filename.sh
利用如下命令查看文件格式
:set ff
:set fileformat
可以看到如下信息
fileformat=dos
fileformat=unix
利用如下命令修改文件格式
:set ff=unix
:set fileformat=unix
:wq (
存盘退出)

3
)用dos2unix命令转换:
Ubuntu中安装tofrodos软件包(dos2unix/unix2dos命令就在其中)
sudo atp-get install tofrodos
安装好后,用如下命令即可将dos格式到文本文件转化为unix通用格式。
dos2unix filename.sh

最后再运行文件
sh filename.sh

 
 

 

 
posted @ 2013-04-19 14:06  ydzhang  阅读(478)  评论(0编辑  收藏  举报