LVS+keepalived 搭建高可用性负载

        首先要用find的命令 find  / -name  ip_vs.h  如果找不到这个文件,你先要先把kernel-devel 安装好,执行yum install kernel-devel.然后再执行find  / -name  ip_vs.h就会出现如下结果

 # find / -name ip_vs.h
/usr/src/kernels/2.6.18-274.12.1.el5-x86_64/include/net/ip_vs.h

再安装openssl组件,执行 yum install openssl*

现在可以开始安装了:

  1. #mkdir /usr/local/src/lvs  
  2. #cd /usr/local/src/lvs  
  3. #wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  
  4. #ln -s/usr/src/kernels/2.6.18-274.12.1.el5-x86_64/ /usr/src/linux  
  5. #tar zxvf ipvsadm-1.24.tar.gz  
  6. #cd ipvsadm-1.24  
  7. #make   
  8. #make install 

  1. Keepalved的安装  
  2. #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz  
  3. #tar zxvf keepalived-1.1.15.tar.gz  
  4. #cd keepalived-1.1.15  
  5. #./configure  
  6. #make  
  7. #make install 

将keepalived做成启动脚务,方便管理:

   
   
  1. #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/  
  2. #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/  
  3. #mkdir /etc/keepalived  
  4. #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/  
  5. #cp /usr/local/sbin/keepalived /usr/sbin/  
  6. #service keepalived start|stop  

Keealived的配置

①分别在主从负载均衡服务器上配置keepalived.conf ,内容分别如下:

主负载配置:
! Configuration File for keepalived  global_defs {    notification_email {          it@ jqwlkj .com            }    notification_email_from vincent.yuan@ jqwlkj .com    smtp_server mail. jqwlkj .com    router_id LVS_DEVEL }   vrrp_instance VI_1 {     state MASTER     interface eth0     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         10.8.100.80     } } virtual_server 10.8.100.80 80 {     delay_loop 6     lb_algo wrr     lb_kind DR     persistence_timeout 60     protocol TCP     real_server 10.8.100.60 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }     }     real_server 10.8.100.61 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }      }     real_server 10.8.100.119 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }
    real_server 10.8.100.222 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }      } }
从负载配置:
     
     
! Configuration File for keepalived  global_defs {    notification_email {          it@ jqwlkj. com            }    notification_email_from vincent.yuan@ jqwlkj. com    smtp_server mail. jqwlkj .com    router_id LVS_DEVEL }   vrrp_instance VI_1 {     state backup     interface eth0     virtual_router_id 51     priority 90     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         10.8.100.80     } } virtual_server 10.8.100.80 80 {     delay_loop 6     lb_algo wrr     lb_kind DR     persistence_timeout 60     protocol TCP     real_server 10.8.100.60 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }     }     real_server 10.8.100.61 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }      }     real_server 10.8.100.119 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }
    real_server 10.8.100.222 80 {         weight 3         TCP_CHECK {         connect_timeout 10         nb_get_retry 3         delay_before_retry 3         connect_port 80         }      } }
在WEB服务器,也就是所谓的实机上配置以下脚本:
#vim /usr/local/sbin/realserver
#!/bin/bash
SNS_VIP=10.8.100.80
. /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
到止前为止配置已完成。启动LVS
如果你是第一次起动的话,
先执行: service ipvsadm save
再执行: service ipvsadm start.(如果是第二次启动LVS,仅执行此语句即可)
最后执行: service keepalived start.
分别再在各WEB服务器上执行: /usr/local/sbin/realserver start
具体要看你的realserver文件在哪个目录,是否具有可执行权限。
起动之后,看是否正常起动可以用watch ipvsadm -l
Every 2.0s: ipvsadm -l                                                                                                                                       Sun Dec 11 10:41:54 2011


IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.8.100.80:http wrr persistent 60
  -> 10.8.100.222:http            Route   3 32         0
  -> 10.8.100.119:http            Route   3 464        0
  -> 10.8.100.61:http             Route   3 38         0
  -> 10.8.100.60:http             Route   3 32         0

看到这样你就成功了。

●     全局定义块

1、  email通知。作用:有故障,发邮件报警。这是可选项目,建议不用,用nagios全面监控代替之。

2、  Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。

3、  花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。

 

●     VRRP定义块

1、  同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?

2、  实例组group.至少包含一个vrrp实例。

3、  Vrrp实例vrrp_instance.实例名出自实例组group所包含的那些名字。

(1)       实例状态state.只有MASTER和BACKUP两种状态,并且需要大写这些单词。其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态有BACKUP变换成MASTER;当失效的MASTER所在的系统恢复时,BACKUP从MASTER恢复到BACKUP状态。

(2)       通信接口interface。对外提供服务的网络接口,如eth0,eth1.当前主流的服务器都有2个或2个以上的接口,在选择服务接口时,一定要核实清楚。

(3)       lvs_sync_daemon_inteface负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。

(4)       虚拟路由标识virtual_router_id.这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。

(5)       优先级priority.这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER的priority值为150,那么BACKUP的priority只能是140或更小的数值。

(6)       同步通知间隔 advert_int .MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。

(7)       验证authentication包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信。

4、  虚拟ip地址virtual_ipaddress . 可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip必须与我们在lvs客户端设定的vip相一致!

 

●     虚拟服务器virtual_server定义块

虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。

1、  虚拟服务器virtual_server. 这个ip来自于vrrp定义块的第“4”步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp端口的负载均衡功能。

(1)       delay_loop。健康检查时间间隔,单位是秒。

(2)       lb_algo. 负载均衡调度算法,互联网应用常使用wlc或rr。

(3)       lb_kind. 负载均衡转发规则。一般包括DR,NAT,TUN3种,在我的方案中,都使用DR的方式。

(4)       persistence_timeout.会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR转发模式,真实服务器有3个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了—登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。

(5)       转发协议protocol.一般有tcp和udp两种。实话说,我还没尝试过udp协议类的转发。

2、  真实服务器real_server.也即服务器池。Real_server的值包括ip地址和端口号。多个连续的真实ip,转发的端口相同,是不是可以以范围表示?需要进一步实验。如写成real_server 61.135.20.1-10 80 .

(1)       权重weight.权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。

(2)       Tcp检查 tcp_check.



   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值