LVS+keepalived负载均衡

Wesley13
• 阅读 759

背景: 
        随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!我们利用 LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。 

LVS+Keepalived 介绍 
LVS 
        LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR); 
八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。 

Keepalvied 
        Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现
二. 网站负载均衡构架图 
LVS+keepalived负载均衡   

IP信息列表: 
名称                    IP 
LVS-DR-Master        61.164.122.6        
LVS-DR-BACKUP        61.164.122.7        
LVS-DR-VIP           61.164.122.8        
WEB1-Realserver      61.164.122.9        
WEB2-Realserver      61.164.122.10        
GateWay              61.164.122.1  
三. 安装LVS和Keepalvied软件包 
1. 下载相关软件包

Java代码   LVS+keepalived负载均衡

  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. #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

2.安装LVS和Keepalived 

Java代码   LVS+keepalived负载均衡

  1. #lsmod |grep ip_vs

  2. #uname -r

  3. 2.6.18-53.el5PAE

  4. #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/  /usr/src/linux

  5. #tar zxvf ipvsadm-1.24.tar.gz

  6. #cd ipvsadm-1.24

  7. #make && make install

  8. #find / -name ipvsadm  # 查看ipvsadm的位置

  9. #tar zxvf keepalived-1.1.15.tar.gz

  10. #cd keepalived-1.1.15

  11. #./configure  && make && make install

  12. #find / -name keepalived  # 查看keepalived位置

  13. #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

  14. #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

  15. #mkdir /etc/keepalived

  16. #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

  17. #cp /usr/local/sbin/keepalived /usr/sbin/

  18. #service keepalived start|stop     #做成系统启动服务方便管理.

四. 配置LVS实现负载均衡 
  1. LVS-DR,配置LVS脚本实现负载均衡 

Java代码   LVS+keepalived负载均衡

  1. #vi /usr/local/sbin/lvs-dr.sh

  2. #!/bin/bash

  3. description: start LVS of DirectorServer

  4. #Written by :NetSeek http://www.linuxtone.org

  5. GW=61.164.122.1

  6. website director vip.

  7. SNS_VIP=61.164.122.8

  8. SNS_RIP1=61.164.122.9

  9. SNS_RIP2=61.164.122.10

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

  11. logger $0 called with $1

  12. case "$1" in

  13. start)

  14. set squid vip

  15. /sbin/ipvsadm --set 30 5 60

  16. /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255

  17. broadcast $SNS_VIP up

  18. /sbin/route add -host $SNS_VIP dev eth0:0

  19. /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3

  20. /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1

  21. /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1

  22. touch /var/lock/subsys/ipvsadm >/dev/null 2>&1

  23. ;;

  24. stop)

  25. /sbin/ipvsadm -C

  26. /sbin/ipvsadm -Z

  27. ifconfig eth0:0 down

  28. ifconfig eth0:1 down

  29. route del $SNS_VIP

  30. route del $SS_VIP

  31. rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1

  32. echo "ipvsadm stoped"

  33. ;;

  34. status)

  35. if [ ! -e /var/lock/subsys/ipvsadm ];then

  36. echo "ipvsadm stoped"

  37. exit 1

  38. else

  39. echo "ipvsadm OK"

  40. fi

  41. ;;

  42. *)

  43. echo "Usage: $0 {start|stop|status}"

  44. exit 1

  45. esac

  46. exit 0

2. 配置Realserver脚本. 

Java代码   LVS+keepalived负载均衡

  1. #vi /usr/local/sbin/realserver.sh

  2. #!/bin/bash

  3. description: Config realserver lo and apply noarp

  4. #Written by :NetSeek http://www.linuxtone.org

  5. SNS_VIP=61.164.122.8

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

  7. case "$1" in

  8. start)

  9. ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

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

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

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

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

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

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

  16. echo "RealServer Start OK"

  17. ;;

  18. stop)

  19. ifconfig lo:0 down

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

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

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

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

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

  25. echo "RealServer Stoped"

  26. ;;

  27. *)

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

  29. exit 1

  30. esac

  31. exit 0

或者采用secondary ip address方式配置 

Java代码   LVS+keepalived负载均衡

  1. vi /etc/sysctl.conf

  2. net.ipv4.conf.lo.arp_ignore = 1

  3. net.ipv4.conf.lo.arp_announce = 2

  4. net.ipv4.conf.all.arp_ignore = 1

  5. net.ipv4.conf.all.arp_announce = 2

  6. #sysctl –p

  7. #ip addr add 61.164.122.8/32 dev lo

  8. #ip add list 查看是否绑定

3. 启动lvs-dr脚本和realserver启本,在DR上可以查看LVS当前状态: 

Java代码   LVS+keepalived负载均衡

  1. #watch ipvsadm –ln

五.利用Keepalvied实现负载均衡和和高可用性 
  1.配置在主负载均衡服务器上配置keepalived.conf 

Java代码   LVS+keepalived负载均衡

  1. #vi /etc/keepalived/keepalived.conf

Java代码   LVS+keepalived负载均衡

  1. ! Configuration File for keepalived

  2. global_defs {

  3. notification_email {

  4. cnseek@gmail .com

  5. }

  6. notification_email_from sns-lvs@gmail .com

  7. smtp_server 127.0.0.1

  8. smtp_connect_timeout 30

  9. router_id LVS_DEVEL

  10. }

  11. 20081013 written by :netseek

  12. VIP1

  13. vrrp_instance VI_1 {

  14. state MASTER             #备份服务器上将MASTER改为BACKUP

  15. interface eth0

  16. virtual_router_id 51

  17. priority 100 # 备份服务上将100改为99

  18. advert_int 1

  19. authentication {

  20. auth_type PASS

  21. auth_pass 1111

  22. }

  23. virtual_ipaddress {

  24. 61.164.122.8

  25. #(如果有多个VIP,继续换行填写.)

  26. }

  27. }

  28. virtual_server 61.164.122.8 80 {

  29. delay_loop 6 #(每隔10秒查询realserver状态)

  30. lb_algo wrr                  #(lvs 算法)

  31. lb_kind DR                  #(Direct Route)

  32. persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)

  33. protocol TCP                #(用TCP协议检查realserver状态)

  34. real_server 61.164.122.9 80 {

  35. weight 3 #(权重)

  36. TCP_CHECK {

  37. connect_timeout 10 #(10秒无响应超时)

  38. nb_get_retry 3

  39. delay_before_retry 3

  40. connect_port 80

  41. }

  42. }

  43. real_server 61.164.122.10 80 {

  44. weight 3

  45. TCP_CHECK {

  46. connect_timeout 10

  47. nb_get_retry 3

  48. delay_before_retry 3

  49. connect_port 80

  50. }

  51. }

  52. }

2. BACKUP服务器同上配置,先安装lvs再按装keepalived,仍后配置/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可. 
3. 

Java代码   LVS+keepalived负载均衡

  1. vi /etc/rc.local
  2. #/usr/local/sbin/lvs-dr.sh  将lvs-dr.sh这个脚本注释掉。步
  3. #/usr/local/sbin/lvs-dr.sh stop 停止lvs-dr脚本
  4. #/etc/init.d/keepalived start  启动keepalived 服务,keepalived就能利用

keepalived.conf 配置文件,实现负载均衡和高可用. 

4. 查看lvs服务是否正常 

Java代码   LVS+keepalived负载均衡

  1. #watch ipvsadm –ln

IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddressort Scheduler Flags 
  -> RemoteAddressort           Forward Weight ActiveConn InActConn 
TCP  61.164.122.8:80 wrr persistent 60 
  -> 61.164.122.10:80            Route   3      0          0 
  -> 61.164.122.9:80             Route   3      0          0 

Java代码   LVS+keepalived负载均衡

  1. #tail –f /var/log/message

  监听日志,查看状态,测试LVS负载均衡及高可用性是否有效。 

5.停Master服务器的keepalived服务,查看BAKCUP服务器是否能正常接管服务。 
四.相关参考 
  1.LVS 基础知识汇总 
LVS的算法介绍                http://www.linuxtone.org/viewthread.php?tid=69 
学习LVS的三种转发模式        http://www.linuxtone.org/viewthread.php?tid=77 
LVS中的IP负载均衡技术        http://www.linuxtone.org/viewthread.php?tid=68 
更多的请到 http://www.linuxtone.org 负载均衡版查看 

Keepalived 相关参考资料。 
    http://www.keepalived.org/documentation.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Nginx keepalive 双机热备 主主主从模式
Nginxkeepalived高可用双机热备(主从模式/双主模式)基础介绍负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。   关于负载均衡介绍,可以参考:linux负载均衡总结性说明(四层负载/七层负载)
Stella981 Stella981
2年前
Keepalived+Nginx实现高可用和双主节点负载均衡
简介Nginx可以实现高并发反向代理,lvs集群可以实现负载均衡,但是他们都有一个共同的弊端,就是Nginx,lvs架构中Director是单点故障,有没有一个好的方案解决这个问题呢?答案是有。通过Keepalived就可以实现,前端Nginx,lvs中Director服务器的高可用和负载均衡,通过shell命令或者脚本可以实现对服务器状态和服务的监控!
Stella981 Stella981
2年前
LVS,HAPROXY,NGINX各自的优缺点
Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件。LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性、可靠性和可管理性,是一款强大实用的开源软件。LVS的优点:1:抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,也保
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这