Centos5.4 UCARP 热备
1         Ucarp简介 
UCARP允许多个主机共享一个虚拟的ip地址,以提供自动的故障恢复功能,当其中某个主机宕机时,其它的主机会自动接管服务。UCARPCARP协议(通用地址冗余协议,最早在OpenBSD上实现)的linux实现版本,同时也能移植到其它多个unix平台,UCARP的官方网站:http://www.ucarp.org/project/ucarp 
 
CARP协议的特点在于其非常低的开销,主机间使用加密数据传递信息,并且在冗余主机之间不需要任何额外的网络链接。
 
 
2         设置UCARP基本信息:
1. 多个主机以构成冗余主机组;
2. 一个共享的虚拟ip地址,用以对外提供可靠的服务,冗余主机组中的某个主机会对会对这个ip上的服务进行应答;
3. 对于每个主机,需要配置一个真实的ip地址;
4. 一个1-255之间的共享标识符;
5. 一个共享的密码(使得网络间传输的消息都为密文);
6. 当冗余组中某个主机成为MASTER时执行的脚本程序;
7. 当冗余组中某个主机不再是MASTER是执行的脚本程序
3         Ucap具体参数详解
--inter (-i <if>: bind interface <if> (网络接口绑定网络接口)
--srcip=<ip> (-s <ip>: source (real) IP address of that host (源地址真实ip)
--vhid=<id> (-v <id>: virtual IP identifier (1-255) (虚拟ip标识 (1-255))
--pass=<pass> (-p <pass>: password (密码)
--preempt (-P): becomes a master as soon as possible (以最快的速度成为主服务器的角色)
--neutral (-n): don't run downscript at start if backup (如果是备份主机,启动的时候不运行downscript.)
--addr=<ip> (-a <ip>: virtual shared IP address( 虚拟共享ip地址)
--help (-h): summary of command-line options (命令行帮助)
--advbase=<seconds> (-b <seconds>: advertisement frequency (广播的频率())
--advskew=<skew> (-k <skew>: advertisement skew (0-255) (不广播)
用来设置公告间隔时间, 公式(以秒计)advskew/256+advbaseadvbase可以减少网络流量或设置更长的主力机"轮循"时间(直至备份机来顶替它);advskew设置哪台热备份计算机在故障转移时优先成为主力机(这是必需的)
--upscript=<file> (-u <file>: run <file> to become a master (运行一个脚本文件,使本服务器成为主服务器)
--downscript=<file> (-d <file>: run <file> to become a backup (运行一个脚本文件,使本服务器成为从服务器)
--deadratio=<ratio> (-r <ratio>: ratio to consider a host as dead (认定主机已经死掉的比率(阀值))
--shutdown (-z): call shutdown script at exit (在退出的时候,执行关闭的脚本)
--daemonize (-B): run in background (运行在后台)
--facility=<facility> (-f): set syslog facility (default=daemon) (设置syslog工具,默认在后台) 
 
Ucarp参数简述:
-v vip标识 –p密码 –a vip地址 –u 当机器为升为master时运行的脚本 –d 当机器降为slave时运行的脚本 –s心跳ip地址 –P与-k结合最小的为master机器 –B以daemon方式运行
 
4         配置示例
4.1      centos 5.4
在/etc/yum.repos.d/目录下建ucarp.repo文件内容如下
[ucarp]
name=ucarp RPM Repository for Red Hat Enterprise Linux
enabled=1
gpgcheck=1
然后yum 方式安装即可 -à yum install ucarp
 
主:192.168.2.24此ip为心跳检测ip
      
[root@THS-LEVEL2 ~]# cat /etc/master-up.sh
#!/bin/sh
/sbin/ip addr add 211.138.113.105/24 dev eth1
/sbin/route add default gw 211.138.113.1
[root@THS-LEVEL2 ~]# cat /etc/master-down.sh
#!/bin/sh
/sbin/ip addr del 211.138.113.105/24 dev eth1
/sbin/route del default gw 211.138.113.1
[root@THS-LEVEL2 ~]# cat /etc/master.sh
#!/bin/sh
/usr/sbin/ucarp -v 40 -p gw105 -a 211.138.113.105 -u /etc/master-up.sh -d /etc/master-down.sh -s 192.168.2.24 -P -B
备:192.168.2.22此ip为心跳检测ip
      
[root@localhost ~]# cat /etc/slave-up.sh
#!/bin/sh
/sbin/ip addr add 211.138.113.105/24 dev eth1
/sbin/route add default gw 211.138.113.1
/bin/sh /root/mobile/mobi.sh
[root@localhost ~]# cat /etc/slave-down.sh
#!/bin/sh
/sbin/ip addr del 211.138.113.105/24 dev eth1
/sbin/route del default gw 211.138.113.1
/bin/sh /root/mobile/stop.sh
#/bin/ps -ef|grep mobi|awk '{print $2}'|xargs kill -9
[root@localhost ~]# cat /etc/slave.sh
#!/bin/sh
/usr/sbin/ucarp -v 40 -p gw105 -a 211.138.113.105 -u /etc/slave-up.sh -d /etc/slave-down.sh -s 192.168.2.22 -P -k 15 –B
 
4.2      freebsd
 
安装 ./configure && make && make install
 
192.168.2.254
mobigw2# cat /etc/master.sh
/usr/local/sbin/ucarp -v 96 -p 196bile -a 211.138.113.196 -u /etc/master-up.sh -d /etc/master-down.sh -s 192.168.2.254 -P -B
mobigw2# cat /etc/master-up.sh
#!/bin/sh
ifconfig em0 add 211.138.113.196 netmask 255.255.255.0
ifconfig em1 192.168.2.1/24 alias
route add default 211.138.113.1
 
mobigw2# cat /etc/master-down.sh
#!/bin/sh
ifconfig em0 -alias 211.138.113.196
ifconfig em1 -alias 192.168.2.1
route del default 211.138.113.1
 
192.168.2.3
zjyd_181# cat /etc/slave.sh
/usr/local/sbin/ucarp -v 96 -p 196bile -a 211.138.113.196 -u /etc/slave-up.sh -d /etc/slave-down.sh -s 192.168.2.3 -P -k 25 -B
zjyd_181# cat /etc/slave-up.sh
#!/bin/sh
ifconfig em1 add 211.138.113.196 netmask 255.255.255.0
ifconfig em0 192.168.2.1/24 alias
#route add default 211.138.113.1
zjyd_181# cat /etc/slave-down.sh
#!/bin/sh
ifconfig em1 -alias 211.138.113.196
ifconfig em0 -alias 192.168.2.1
 
5         启动服务
主机器上执行/etc/master.sh
备机器上执行/etc/slave.sh
并将主被两台机器服务添加到开机启动项:
cp /etc/master.sh /etc/rc.d/rc.local
cp /etc/slave.sh   /etc/rc.d/rc.local
 
6         功能实现
当主机器掉之后,从机器会接管主机器ip及相关服务;之后主机器重新起来后,主机器会把从的机器ip抢过来,并且备机器会从“主”降为从