Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2270361
  • 博文数量: 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-25 23:24:25

 
LVS_DR+Keepalived负载均衡配置
 
2011.05.24 TsengYia#126.com http://tsengyia.blog.chinaunix.net/
 
#################################################################
 
系统环境: 
    RHEL 5.5 [2.6.18-194.el5]

平台结构:
    2台负载均衡器 ——
        LVS01: 192.168.7.11
        LVS02: 192.168.7.12
    群集地址(VIP,漂移地址)——
        192.168.7.10
    群集节点(RIP,真实服务器)——
        RIP01: 192.168.7.21
        RIP02: 192.168.7.22
        ……
        RIPn: ……
    群集类型: DR(直接路由)
 
软件环境:
  —— RHEL5光盘自带的RPM软件包
    ./Cluster/ipvsadm-1.24-10.i386.rpm
    ./Server/kernel-devel-2.6.18-194.el5.i386.rpm
    ./Server/openssl-devel-0.9.8e-12.el5_4.6.i386.rpm
    ./Server/popt-1.10.2.3-18.el5.i386.rpm

  —— 从下载的软件包
    keepalived-1.2.2.tar.gz
 
#################################################################
 
一、安装并配置ipvsadm(LVS01、LVS02)
    ipvsadm是一个用户态的工具,主要用来手动创建和管理LVS负载均衡群集,包括创建负载分配器、指定群集节点,查看并调度节点状态、连接情况等。安装ipvsadm工具,可以用来手动管理群集节点、察看群集状态等。

[root@localhost ~]# rpm -ivh /media/cdrom/Cluster/ipvsadm-1.24-10.i386.rpm
[root@localhost ~]# man ipvsadm


二、安装keepalived(LVS01、LVS02)

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的配置文件
[root@localhost ~]# ls -F /etc/keepalived/
keepalived.conf samples/


三、配置keepalived(LVS01、LVS02)
    LVS01作为MASTER、LVS02作为BACKUP,基于DR方式实现HTTP服务的负载均衡分配。

1. LVS01的keepalived配置

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
    router_id LVS_TEST
}
vrrp_instance VI_1 {
    state MASTER                            #//负载均衡器的角色
    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
    }
}
virtual_server 192.168.7.10 80 {            #//虚拟服务器的IP地址、端口
    delay_loop 15                           #//健康检查的间隔时间
    lb_algo rr                              #//负载调度算法(rr为轮询,其他参见ipvsadm手册)
    lb_kind DR                              #//负载均衡类型,常用的为DR、NAT方式
!    persistence 60                         #//连接保持时间,适用于动态Web站点、FTP站点等情况
    protocol TCP                            #//协议类型
    real_server 192.168.7.21 80 {           #//真实服务器的IP地址、端口
        weight 1                            #//节点权重
        TCP_CHECK {
            connect_port 80                 #//检查的目标端口
            connect_timeout 3               #//连接超时
            nb_get_retry 3                  #//重试次数
            delay_before_retry 2            #//重试间隔
        }
    }
    real_server 192.168.7.22 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 2
        }
    }
}

[root@localhost ~]# /etc/init.d/keepalived start

2. LVS02的keepalived配置
    与LVS01中的配置文件基本相同,只需将state改为BACKUP、将priority改为较小的数值(如99)即可。

3. keepalived的邮件发送设置(可选)
  (1) 使用无认证的SMTP服务器
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
    notification_email {                          #//收件人地址
        kadmin@tsengyia.com
        alert@tsengyia.com
    }
    notification_email_from kadmin@tsengyia.com   #//发件人地址
    smtp_server 192.168.7.254                     #//SMTP服务器地址
    smtp_connect_timeout 30                       #//连接超时
    ……
}
vrrp_instance VI_1 {
    smtp_alert                                    #//允许发送告警邮件
    ……
}
……
[root@localhost ~]# /etc/init.d/keepalived restart

  (2) 使用有认证的SMTP服务器
    使用mutt、msmtp,编写Shell脚本来外发邮件,参见另篇《使用mutt+msmtp通过外部邮箱发送邮件》:http://blogold.chinaunix.net/u1/40349/showart_2543437.html。

[root@localhost ~]# vi /etc/keepalived/keepalived.conf
……
vrrp_instance VI_1 {
    ……
    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 restart


四、Web节点的配置

1. 启用httpd服务,并添加用于测试的网页文件
    测试期间,为了便于观看效果,建议为不同节点准备不同的网页文件。

2. 设置VIP接口、调整ARP响应参数等

[root@localhost ~]# vi /etc/init.d/lvsreal
#!/bin/bash
# chkconfig: 35 99 10
# description: tune lo:0 interface and arp response for lvs-real servers.
VIP="192.168.7.10"
VIP_MASK="255.255.255.255"
VIF="lo:0"
case "$1" in
start)
  echo "Start lvsreal server for $VIP"
  /sbin/ifconfig $VIF $VIP netmask $VIP_MASK up
  /sbin/route add -host $VIP dev $VIF
  /sbin/sysctl -w net.ipv4.conf.lo.arp_ignore=1 &> /dev/null
  /sbin/sysctl -w net.ipv4.conf.lo.arp_announce=2 &> /dev/null
  /sbin/sysctl -w net.ipv4.conf.all.arp_ignore=1 &> /dev/null
  /sbin/sysctl -w net.ipv4.conf.all.arp_announce=2 &> /dev/null
  ;;
stop)
  echo "Stop lvsreal server for $VIP"
  /sbin/ifconfig $VIF down
  /sbin/route del -host $VIP
  /sbin/sysctl -w net.ipv4.conf.lo.arp_ignore=0 &> /dev/null
  /sbin/sysctl -w net.ipv4.conf.lo.arp_announce=0 &> /dev/null
  /sbin/sysctl -w net.ipv4.conf.all.arp_ignore=0 &> /dev/null
  /sbin/sysctl -w net.ipv4.conf.all.arp_announce=0 &> /dev/null
  ;;
*)
  echo "Usage: $0 {start|stop}"
  exit 1
esac

[root@localhost ~]# chmod +x /etc/init.d/lvsreal
[root@localhost ~]# chkconfig --add lvsreal
[root@localhost ~]# /etc/init.d/lvsreal start


五、功能测试

1. 测试群集节点的负载分配
    使用浏览器访问虚拟地址VIP(192.168.7.10),多次刷新页面,可轮流看到RIP01、RIP02等节点的网页文档。
    -->关闭RIP01主机的httpd服务,稍后刷新网页,可以看到RIP02等其他主机的网页文档。

2. 测试LVS01、LVS02的故障切换
    使用浏览器访问虚拟地址VIP(192.168.7.10),可以正常查看网页文档。
    -->禁用LVS01的eth0网卡,数秒后刷新页面,仍能够正常查看网页。
    -->重新启用LVS01的eth0网卡。
    -->查看LVS01、LVS02的/var/log/messages日志文件,跟踪keepalived的状态变化。

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