您的位置:首页 > 其它

UCARP实现自动故障恢复

2013-04-19 14:06 260 查看
UCARP允许多个主机共享一个虚拟的ip地址,以提供自动的故障恢复功能,当其中某个主机宕机时,其它的主机会自动接管服务。UCARP是CARP协议(通用地址冗余协议,最早在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.83,192.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机器上启动分布式文件系统的服务器程序,在客户端上挂载使用,指定元数据服务器ip为192.168.0.200。

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

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

Shell脚本执行问题

在windows中用UltraEdit写了CARP需要的Shell脚本,在Linux中执行.sh脚本,提示错误bad interpreter: No suchorfiledirectory。
分析:这是不同系统编码格式引起的,在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决方案:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: