LVS+keepalived负载均衡实战

系统 1775 0

  --------------------- 这里非常感谢田逸老师的文档,在我学习 lvs 的时候给了我很大的帮助!

 

一、 为什么要使用负载均衡技术?

1、 系统高可用性

2、     系统可扩展性

3、     负载均衡能力

LVS+keepalived 能很好的实现以上的要求, LVS 提供负载均衡, keepalived 提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少 realserver ,只要更改 lvs 的配置文件,并能实现无缝配置变更!

 

二、 LVS+Keepalived 介绍

1、     LVS

LVS 是一个开源的软件,可以实现 LINUX 平台下的简单负载均衡。 LVS Linux Virtual Server 的缩写,意思是 Linux 虚拟服务器。目前有三种 IP 负载均衡 技术( VS/NAT VS/TUN VS/DR );八种调度算法( rr,wrr,lc,wlc,lblc,lblcr,dh,sh )。

2、     keepalived

Keepalived   是运行在 lvs   之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性

 

三、 LVS+keepalived 负载均衡架构图

   

 

四、 LVS+keepalived 的安装和配置

1.            配置环境

                System OS CentOS release 5.4

                Software ipvsadm-1.24.tar.gz, keepalived-1.1.19.tar.gz

2.            信息列表

名称

IP

  LVS-Master

192.168.1.112

  LVS-BACKUP

192.168.1.113

  LVS-VIP

192.168.1.115

  Realserver1

192.168.1.105

  Realserver2

192.168.1.103

Realserver3

192.168.1.104

3.            安装 lvs

分别在 backup lvs master lvs 上安装

wget   http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux

tar zxvf ipvsadm-1.24.tar.gz

cd ipvsadm-1.24

make && make install

4.            安装 keepalived

分别在 backup lvs master lvs 上安装

wget   http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
tar zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure --prefix=/usr/local/keepalived
make  
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived

5.            配置 keepadlived

LVS-Master 的配置文件如下

[root@linux5 ~]# cat /etc/keepalived/keepalived.conf

global_defs {

notification_email {

                 jimo291@gmail.com       # email   通知

          }

          notification_email_from jimo291@gmail.com

          smtp_server 127.0.0.1

          smtp_connect_timeout 30

          router_id LVS1             #   设置 lvs id ,在一个网络内应该是唯一的

}

vrrp_sync_group test {              # 设置 vrrp

group {

          loadbalance

}

}

 

vrrp_instance loadbalance {

          state MASTER          # 设置 lvs 的状态,报错 MASTER BACKUP 两种,必须大写

          interface eth0        # 设置对外服务的接口

          lvs_sync_daemon_inteface eth0      # 设置 lvs 监听的接口

          virtual_router_id 51                        # 设置虚拟路由表示

          priority 180               # 设置优先级,数值越大,优先级越高

          advert_int 5              # 设置同步时间间隔

authentication {                       # 设置验证类型和密码

          auth_type PASS

          auth_pass 1111

}

virtual_ipaddress {                   # 设置 lvs vip

          192.168.1.115

}

}

 

virtual_server 192.168.1.115 80 {

          delay_loop 6             # 健康检查时间间隔

          lb_algo rr                  # 负载均衡调度算法

          lb_kind DR               # 负载均衡转发规则

          #persistence_timeout 20     # 设置会话保持时间,对 bbs 等很有用

          protocol TCP                   # 协议

          real_server 192.168.1.105 80 {

          weight 3                   # 设置权重

          TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

          connect_port 80

}

}

          real_server 192.168.1.103 80 {

          weight 3

          TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

          connect_port 80

}

}

          real_server 192.168.1.104 80 {

          weight 3

          TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

          connect_port 80

}

}

}

 

LVS-backup 的配置文件如下

global_defs {

notification_email {

                 jimo291@gmail.com

          }

          notification_email_from jimo291@gmail.com

          smtp_server 127.0.0.1

          smtp_connect_timeout 30

          router_id LVS2

}

vrrp_sync_group test {

group {

          loadbalance

}

}

 

vrrp_instance loadbalance {

          state BACKUP

          interface eth0

          lvs_sync_daemon_inteface eth0

          virtual_router_id 51

          priority 150

          advert_int 5

authentication {

          auth_type PASS

           auth_pass 1111

}

virtual_ipaddress {

          192.168.1.115

}

}

 

virtual_server 192.168.1.115 80 {

          delay_loop 6

          lb_algo rr

          lb_kind DR

          #persistence_timeout 20

          protocol TCP

          real_server 192.168.1.105 80 {

           weight 3

          TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

          connect_port 80

}

}

          real_server 192.168.1.103 80 {

          weight 3

          TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

          connect_port 80

}

}

          real_server 192.168.1.104 80 {

          weight 3

          TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

          connect_port 80

}

}

}

      

6.            Realserver 的配置

三台客户端的脚本都一样!

cat /etc/rc.d/init.d/realserver.sh

#!/bin/bash

# description: Config realserver lo and apply noarp

 

SNS_VIP=192.168.1.115

 

/etc/rc.d/init.d/functions

 

case "$1" in

start)

         ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

         /sbin/route add -host $SNS_VIP dev lo:0

         echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

         echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

         echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

         echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

         sysctl -p >/dev/null 2>&1

         echo "RealServer Start OK"

 

         ;;

stop)

         ifconfig lo:0 down

         route del $SNS_VIP >/dev/null 2>&1

         echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

         echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

         echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

         echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

         echo "RealServer Stoped"

         ;;

*)

         echo "Usage: $0 {start|stop}"

         exit 1

esac

 

exit 0

 

7.            测试

1)           首先测试各个 readserver ,确定各个 readserver 都能正常访问,测试 realserver.sh 脚本,看启动后能不能绑定 lvs vip ,停止后能不能去除绑定的 vip

2)           测试 lvs 能否进行负载均衡转发,利用 ipvsadm 命令查看,如果想只当当前的请求转发到哪个服务器去了,可以用 ipvsadm 选项来查看,其完整形式为: ipvsadm –lcn | grep 192.168.1.115

3)           停掉主 lvs lvs backup 是否接管!

4)           更详细信息请查看日志, tail -f /var/log/messages

LVS+keepalived负载均衡实战


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论