Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2295924
  • 博文数量: 168
  • 博客积分: 6641
  • 博客等级: 准将
  • 技术积分: 1996
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-02 11:49
文章存档

2020年(4)

2019年(6)

2017年(1)

2016年(3)

2015年(3)

2014年(8)

2013年(2)

2012年(12)

2011年(19)

2010年(10)

2009年(3)

2008年(17)

2007年(80)

分类: LINUX

2011-05-26 01:13:06

 
Keepalived双机热备配置
 
2011.05.24 TsengYia#126.com http://tsengyia.blog.chinaunix.net/

附注:
    keepalived实现了VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),可以提供较好的热备故障恢复机制。除此以外,还可以结合Linux内核的LVS机制作为Load Balancer负载分配器,构建高可用的负载均衡群集。
 
#################################################################
 
系统环境: 
    RHEL 5.5 [2.6.18-194.el5]

平台结构:
    热备虚拟地址VIP: 192.168.7.10
    Host1: 192.168.7.11
    Host2: 192.168.7.12
 
软件环境:
  —— RHEL5光盘自带的RPM软件包
    mutt-1.4.2.2-3.0.2.el5.i386.rpm
    httpd-2.2.3-43.el5.i386.rpm
    vsftpd-2.0.5-16.el5_4.1.i386.rpm
    iputils-20020927-46.el5.i386.rpm
  —— 从下载的软件包
    keepalived-1.2.2.tar.gz
 
#################################################################

一、安装keepalived(Host1、Host2)

1. 编译安装keepalived

[root@localhost ~]# tar zxf keepalived-1.2.2.tar.gz
[root@localhost ~]# cd keepalived-1.2.2/
[root@localhost keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686
……
Keepalived configuration
-------------------
Keepalived version        :1.2.2
Compiler                  :gcc
Compiler flags            :-g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib                 :-lpopt -lssl -lcrypto
Use IPVS Framework        :Yes
IPS sync daemon support   :Yes
IPVS use libnl            :No
Use VRRP Framework        :Yes
Use Debug flags           :No
[root@localhost keepalived-1.2.2]# make && make install

  —— 注意1:make步骤中若出现fd_set、blkcnt_t类型冲突之类的错误,可以修改./keepalived/libipvs-2.6/ip_vs.h文件,将#include linux/types.h行移到#include sys/types.h行之后,然后重新执行make进行编译即可。
[root@localhost keepalived-1.2.2]# vi keepalived/libipvs-2.6/ip_vs.h
……
#include sys/types.h
#include linux/types.h
……
[root@localhost keepalived-1.2.2]# make && make install

2. 确认安装情况
  (1) 添加keepalived服务

[root@localhost ~]# ls /etc/init.d/keepalived
/etc/init.d/keepalived
[root@localhost ~]# chkconfig --add keepalived
[root@localhost ~]# chkconfig keepalived on

  (2) 确认keepalived的配置文件
    在samples/目录下默认提供了很多样例配置文件,实际应用时可以作为参考。
[root@localhost ~]# ls -F /etc/keepalived/
keepalived.conf samples/


二、配置针对VIP地址的双机热备(Host1、Host2)
    实际的应用服务通过虚拟IP地址(VIP)提供。
    配置keepalived,将Host1作为MASTER,Host2、Host3等作为BACKUP,针对VIP地址进行热备。

1. 编写发送状态告警的邮件脚本(Host1、Host2)
    若所用的SMTP服务器要求认证,建议使用mutt、msmtp进行,编写相应的脚本来定制邮件内容。mutt+msmtp的配置过程参见另篇另篇《使用mutt+msmtp通过外部邮箱发送邮件》:http://blogold.chinaunix.net/u1/40349/showart_2543437.html。

[root@localhost ~]# vi /usr/sbin/kalert.sh
#!/bin/bash
HOST=$(/bin/uname -n)
TIME=$(/bin/date +"%F %R")
CONTENT="$TIME $HOST transited to $1 state."
SUBJECT="Keepalived Alert!"
MAILADD="kadmin@tsengyia.com"
echo "$CONTENT" | /usr/bin/mutt -s "$SUBJECT" $MAILADD
[root@localhost ~]# chmod +x /usr/sbin/kalert.sh


2. Host1(MASTER)的配置

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
    router_id LVS_TEST_R1
}
vrrp_instance VI_1 {
    state MASTER                            #//主结点为MASTER,其他作为BACKUP
    interface eth0                          #//承载VIP地址的物理接口
    virtual_router_id 1                     #//虚拟路由器的ID号,每个热备组保持相同
    priority 100                            #//竞选优先级,数字越大优先级越高
    advert_int 3                            #//通告间隔秒数(心跳频率)
    authentication {                        #//本VRRP组的认证信息
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {                     #//热备所针对的虚拟地址(VIP),可以有多行
        192.168.7.10
    }
    notify_master "/usr/sbin/kalert.sh master"    #//状态变为MASTER时的操作
    notify_backup "/usr/sbin/kalert.sh backup"    #//状态变为BACKUP时的操作
    notify_fault "/usr/sbin/kalert.sh fault"      #//状态变为FAULT时的操作
}
[root@localhost ~]# /etc/init.d/keepalived start

3. Host2、Host3、……(BACKUP)的配置
    与Host1中的配置文件基本相同,只需将state改为BACKUP、将priority改为较小的数值(如99)即可。

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
    router_id LVS_TEST_R2
}
vrrp_instance VI_1 {
    state BACKUP                            #//作为备份节点BACKUP
    interface eth0
    virtual_router_id 1
    priority 99                             #//优先级应低于MASTER主机
    advert_int 3
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.7.10
    }
    notify_master "/usr/sbin/kalert.sh master"
    notify_backup "/usr/sbin/kalert.sh backup"
    notify_fault "/usr/sbin/kalert.sh fault"
}
[root@localhost ~]# /etc/init.d/keepalived start


三、热备测试(ping、FTP、HTTP)
    在整个热备组中,接管MASTER的主机将会启用VIP地址,负责响应针对此虚拟地址的访问。
    需通过ip命令才能看到VIP接口地址,用ifconfig命令看不到。

[root@localhost ~]# ip addr show dev eth0
2:eth0 mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:85:e4:49 brd ff:ff:ff:ff:ff:ff
    inet 192.168.7.11/24 brd 192.168.7.255 scope global eth0
    inet 192.168.7.10/32 scope global eth0
         valid_lft forever preferred_lft forever


1. 连通性测试
    在其他主机持续ping虚拟IP地址192.168.7.10。
    --> 禁用Host1的eth0网卡,发现只丢了1、2个包后即恢复正常,表示已有其他主机接管VIP地址。
    --> 跟踪Host1、Host2主机的/var/log/messages日志文件可以看到Host1转为BACKUP、Host2转为MASTER的状态变化。
    --> 重新启用Host1的eth0网卡,由于Host1的优先级高,因此会抢占VIP的控制权,转为MASTER状态,而其他主机退让为BACKUP状态。

2. FTP服务测试
    Host1、Host2均启用匿名FTP服务,各自FTP目录下存放不同的测试文件。
    --> 使用FlashFXP等客户端软件访问ftp://192.168.7.10,可以看到Host1中的FTP文档。
    --> 禁用Host1的eth0网卡,然后刷新FTP客户端的浏览列表,发现看到的FTP文档已变为Host2的。
    --> 重新启用Host1的eth0网卡,再次刷新FTP客户端的浏览列表,看到的FTP文档又变回Host1的。

3. HTTP服务测试
    Host1、Host2均启用HTTP服务,各自网站目录下存放不同的测试网页。
    --> 使用浏览器访问,可以看到Host1中的网页文档。
    --> 禁用Host1的eth0网卡,然后刷新浏览器,发现网页内容已变为Host2的。
    --> 重新启用Host1的eth0网卡,再次刷新浏览器,网页内容又变回Host1的。

#################################################################
 
阅读(2232) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~