虚拟ip地址服务器切换,利用ucarp实现虚拟IP故障转移

一、概述

UCARP简介

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

CARP协议的特点在于其非常低的开销,主机间使用加密数据传递信息,并且在冗余主机之间不需要任何额外的网络链接(在README中有ucarp的简单部署实例)。

2.配置需求

两个或多个主机以构成冗余主机组;

一个共享的虚拟ip地址,用以对外提供可靠的服务,冗余主机组中的某个主机会对会对这个ip上的服务进行应答;

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

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

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

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

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

3 Ucap具体参数详解

--inter (-i : bind interface (网络接口绑定网络接口)

--srcip= (-s : source (real) IP address of that host (源地址真实ip)

--vhid= (-v : virtual IP identifier (1-255) (虚拟ip标识 (1-255))

--pass= (-p : password (密码)

--preempt (-P): becomes a master as soon as possible (以最快的速度成为主服务器的角色)

--neutral (-n): don't run downscript at start if backup (如果是备份主机,启动的时候不运行downscript.)

--addr= (-a : virtual shared IP address( 共享虚拟ip地址)

--help (-h): summary of command-line options (帮助)

--advbase= (-b : advertisement frequency (广播的频率(秒))

--advskew= (-k : advertisement skew (0-255) (不广播)用来设置公告间隔时间, 公式(以秒计)为advskew/256+advbase。advbase可以减少网络流量或设置更长的主力机"轮循"时间(直至备份机来顶替它);advskew设置哪台热备份计算机在故障转移时优先成为主力机(这是必需的)

--upscript= (-u : run to become a master (运行一个脚本文件,使本服务器成为主服务器)

--downscript= (-d : run to become a backup (运行一个脚本文件,使本服务器成为从服务器)

--deadratio= (-r : ratio to consider a host as dead (认定主机已经死掉的比率(阀值))

--shutdown (-z): call shutdown script at exit (在退出的时候,执行关闭的脚本)

--daemonize (-B): run in background (运行在后台)

--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.实验环境

Role hostname real_ip vip gateway OS

master node2 192.168.32.32/24 192.168.32.22/24 192.168.32.254 rhel5.5

slave node3 192.168.32.33/24 192.168.32.22/24 192.168.32.254 rhel5.5

二、安装配置

1、安装

[root@node2 ~]# tar -zxf ucarp-1.5.tar.gz #ucarp最好选择1.2以上版本,1.1以下含有bug

[root@node2 ~]# cd ucarp-1.5

[root@node2 ucarp-1.5]# which gcc #确定gcc

/usr/bin/gcc

[root@node2 ucarp-1.5]# ./configure CC=/usr/bin/gcc --prefix=/usr/local/ucarp

[root@node2 ucarp-1.5]# make && make install

2、配置主服务器(node2)

2.1 编写机器升为master时运行的脚本

[root@node2 ~]# vim /etc/master-up.sh

#!/bin/bash

GATEWAY=192.168.32.254

/sbin/ip addr add 192.168.32.22/24 dev eth0

/bin/hostname nodevir2

/sbin/route add default gw $GATEWAY

service httpd start

2.2 编写机器降为slave时运行的脚本

[root@node2 ~]# vim /etc/master-down.sh

#!/bin/bash

GATEWAY=192.168.32.254

/sbin/ip addr del 192.168.32.22/24 dev eth0

/bin/hostname node2

/sbin/route add default gw $GATEWAY

service httpd stop

2.3 编写ucarp运行脚本

[root@node2 ~]# vim /etc/master.sh

#!/bin/bash

/usr/local/ucarp/sbin/ucarp -i eth0 -v 40 -p gw22 -a 192.168.32.22 -u /etc/master-up.sh -d /etc/master-down.sh -s 192.168.32.32 -P -B

2.4 启动服务

[root@node2 ~]# . /etc/master.sh

[root@node2 ~]# ps -ef | grep ucarp

root 11695 1 0 11:33 ? 00:00:00 /usr/local/ucarp/sbin/ucarp -i eth0 -v 40 -p gw22 -a 192.168.32.22 -u /root/master-up.sh -d /root/master-down.sh -s 192.168.32.32 -P -B

[root@node2 ~]# hostname #hostname切换成功

nodevir2

[root@node2 ~]# ip addr show | grep 22 #master-up.sh脚本生效

inet 192.168.32.22/24 scope global secondary eth0

[root@nodevir2 ~]# ps -ef | grep httpd #httpd服务启动

root 11726 1 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11727 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11729 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11730 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11731 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11732 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11733 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11734 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

apache 11735 11726 0 11:33 ? 00:00:00 /usr/sbin/httpd

root 11897 6167 0 11:44 pts/1 00:00:00 grep httpd

3.配置备服务器(node3)

3.1 编写机器升为master时运行的脚本

[root@node3 ~]# vim /etc/master-up.sh

#!/bin/bash

GATEWAY=192.168.32.254

/sbin/ip addr add 192.168.32.22/24 dev eth0

/bin/hostname nodevir2

/sbin/route add default gw $GATEWAY

service httpd start

3.2 编写机器降为slave时运行的脚本

[root@node2 ~]# vim /etc/master-down.sh

#!/bin/bash

GATEWAY=192.168.32.254

/sbin/ip addr del 192.168.32.22/24 dev eth0

/bin/hostname node3

/sbin/route add default gw $GATEWAY

service httpd stop

3.3 编写ucarp运行脚本

[root@node2 ~]# vim /etc/master.sh

#!/bin/bash

/usr/local/ucarp/sbin/ucarp -i eth0 -v 40 -p gw22 -a 192.168.32.22 -u /etc/master-up.sh -d /etc/master-down.sh -s 192.168.32.33 -P -k 15 -B

3.4 启动服务

[root@node2 ~]# . /etc/master.sh

root 5678 1 0 11:40 ? 00:00:00 /usr/local/ucarp/sbin/ucarp -v 40 -i eth0 -p gw22 -a 192.168.32.22 -u /root/master-up.sh -d /root/master-down.sh -s 192.168.32.33 -k 15 -B

[root@node3 ~]# ps -ef | grep httpd #httpd服务为启动

root 5788 32767 0 11:46 pts/1 00:00:00 grep httpd

三. 故障切换

主故障

[root@nodevir2 ~]# kill 5678 #down掉ucarp服务,或重启服务器

[root@node3 ~]# hostname #hostname切换成功

nodevir2

[root@node3 ~]# ip addr show | grep 22 #虚拟IP切换成功

inet 192.168.32.22/24 scope global secondary eth0

[root@node3 ~]# ps -ef | grep httpd #服务切换成功

root 5824 1 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5826 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5827 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5828 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5829 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5830 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5831 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5832 5824 0 11:47 ? 00:00:00 /usr/sbin/httpd

apache 5833 5824 0 11:47 ? 00:00:00 /

2.主恢复

[root@node2 ~]# . /etc/master.sh

[root@nodevir2 ~]# hostname

nodevir2

[root@node2 ~]# ps -ef | grep httpd

root 11969 1 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11970 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11972 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11973 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11974 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11975 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11976 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11977 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

apache 11978 11969 0 11:46 ? 00:00:00 /usr/sbin/httpd

[root@node2 ~]# ip addr show | grep 22

inet 192.168.32.22/24 scope global secondary eth0

[root@node3 ~]# hostname

node3

[root@node3 ~]# ps -ef | grep httpd

root 6148 32767 0 12:02 pts/1 00:00:00 grep httpd

[root@node3 ~]# ip addr show | grep 22 #成功切换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值