@HUST张友东 work@taobao zyd_com@126.com
分类: 服务器与存储
2010-04-29 10:29:43
UCARP允许多个主机共享一个虚拟的ip地址,以提供自动的故障恢复功能,当其中某个主机宕机时,其它的主机会自动接管服务。UCARP是CARP协议(通用地址冗余协议,最早在OpenBSD上实现)的linux实现版本,同时也能移植到其它多个unix平台,UCARP的官方网站: 。
CARP协议的特点在于其非常低的开销,主机间使用加密数据传递信息,并且在冗余主机之间不需要任何额外的网络链接。
下载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