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
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
相关文章推荐
- 实现故障恢复自动化:详解Redis哨兵技术 - Redis
- shell实现自动恢复mysql主从错误
- 用MHA实现mysql自动故障转移
- 结合keepalived实现redis群集高可用故障自动切换 推荐
- 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码
- mysql远程访问,主从/主主双机备份,以及使用keeplived实现故障自动切换(二)
- VPS小内存LNMP服务器Nginx 502 Bad Gateway故障自动恢复解决办法
- 结合keepalived实现lvs的高可用群集故障自动转移
- MySQL高可用方案:基于MHA实现的自动故障转移群集
- (2010-06-11)浅谈在Oracle中如何利用REDO实现故障恢复
- 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码
- 通过Keepalived实现Redis Failover自动故障切换功能
- android 代码实现手机自动恢复出厂设置不需要权限
- 检查nginx后端real server脚本,实现发现宕机剔除,恢复服务自动加入功能
- 自动备份和恢复数据库脚本及实现
- keepalived+redis 实现高可用的自动故障转移failover
- SQL非域环境下带自动故障转移数据库镜像的实现方法(包括镜像服务器)
- 利用三台服务器实现不同机房的自动故障转移,SQL SERVER数据库镜像(三)
- 编程实现设置“启动与故障恢复”的“在需要时显示恢复选项的时间”
- 通过Keepalived实现Redis Failover自动故障切换功能