这两天学习了LVS+Keepalived负载均衡的搭建。网上的教程非常多,可是动起手来遇到不少问题。

如今把自己的搭建过程以及遇到的一些问题给分享下。

硬件环境:

Macbook 8G内存。250G SSD,双核

软件环境:

因为资源有限。搭建了4个虚拟机。

虚拟机

[root@rs-1 work]# uname -a

Linux rs-1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

[root@rs-1 work]# cat /etc/redhat-release

CentOS release 5.6 (Final)

4个虚拟机的ip地址分配例如以下:

Master DR: { ip: 172.16.3.89 hostname: lvs-backup}

Slave DR: { ip:172.16.3.90 hostname:lvs}

Real Server1: {ip: 172.16.3.91 hostname: rs-1}

Real Server2: { ip:172.16.3.92 hostname: rs-2}

VIP: 172.16.3.199

1.在Master DR和Slave DR分别安装ipvsadm(1.24), keepalived(1.2.12)

安装ipvsadm

检查系统是否安装了IPVS模块,下图显示系统已经支持ipvs模块的。

[root@lvs ~]# modprobe -l | grep ipvs

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko

/lib/modules/2.6.18-238.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko

做个软连接

[vagrant@lvs src]$ sudo ln -s /usr/src/kernels/2.6.18-238.el5-x86_64/ /usr/src/linux

编译

[vagrant@lvs ipvsadm-1.24]$ make


安装

[vagrant@lvs ipvsadm-1.24]$ sudo make install


检測是否成功安装

[root@lvs ~]# ipvsadm -v

ipvsadm v1.24 2005/12/10 (compiled with getopt_long and IPVS v1.2.1)

能打印出版本说明已经成功安装了!!

安装keepalived

configure

[vagrant@lvs keepalived-1.2.12]$./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.18-238.el5-x86_64/

编译

[vagrant@lvs keepalived-1.2.12]$ make

安装

[vagrant@lvs keepalived-1.2.12]$ sudo make install

做个软连接

[vagrant@lvs keepalived-1.2.12]$ sudo ln -s /usr/local/sbin/keepalived /sbin/


检測是否成功安装

[root@lvs ~]# keepalived -v

Keepalived v1.2.12 (05/06,2014)

能打印出版本。说明安装已经成功了!!

同理在lvs-backup上安装keepalived

检測是否成功安装

[root@lvsbackup~]# keepalived -v

Keepalived v1.2.12 (05/06,2014)

配置keepalived

! Configuration File for keepalived

#global_defs {

#   notification_email {

#设置报警邮件地址,能够设置多个,每行1个。

#需开启邮件报警及本机的Sendmail服务。

#   }

#notification_email_from Alexandre.Cassen@firewall.loc

#smtp_server 192.168.199.1  #设置SMTP Server地址;

#smtp_connect_timeout 30

#router_id LVS_DEVEL

#}

########VRRP Instance########

vrrp_instance VI_1 {

state MASTER    #指定Keepalived的角色,MASTER为主机server。BACKUP为备用server

interface eth1  #BACKUP为备用server

virtual_router_id 51

priority 100    #定义优先级。数字越大,优先级越高。主DR必须大于备用DR。

advert_int 1

authentication {

auth_type PASS  #设置验证类型。主要有PASS和AH两种

auth_pass 1111  #设置验证password

}

virtual_ipaddress {

172.16.3.199  #设置主DR的虚拟IP地址(virtual IP),可多设。但必须每行1个

}

}

########Virtual Server########

virtual_server 172.16.3.199 80 {  #注意IP地址与port号之间用空格隔开

delay_loop 6        #设置健康检查时间。单位是秒

lb_algo rr          #设置负载调度算法,默觉得rr,即轮询算法,最棒是wlc算法

lb_kind DR          #设置LVS实现LB机制。有NAT、TUNN和DR三个模式可选

nat_mask 255.255.255.0

#persistence_timeout 50  #会话保持时间,单位为秒

protocol TCP        #指定转发协议类型。有TCP和UDP两种

real_server 172.16.3.92 80 {

weight 50          #配置节点权值,数字越大权值越高

TCP_CHECK {

connect_timeout 3     #表示3秒无响应,则超时

nb_get_retry 3        #表示重试次数

delay_before_retry 3  #表示重试间隔

}

}

real_server 172.16.3.91 80 {  #配置服务器节点。即Real Server2的public IP

weight 50           #配置节点权值。数字越大权值越高

TCP_CHECK {

connect_timeout 3       #表示3秒无响应,则超时

nb_get_retry 3          #表示重试次数

delay_before_retry 3    #表示重试间隔

}

}


Slave DR的配置和Master DR的配置基本一样。仅仅有2个不同点:

MASTER改为BACKUP,priority 100改为priority 80

这边说下persistence_timeout 选项,意思就是在这个一定时间内会讲来自同一用户(依据ip来推断的)route到同一个real

server。

我这边给凝视掉了。详细依据业务需求。长连接的话最好是配置上,配置值最好跟lvs的配置的timeout一致。

启动keepalived

编写start.sh(stop.sh,restart.sh)脚本方便启动

#!/bin/sh

/etc/init.d/keepalived start

运行脚本

[root@lvs work]# ./start.sh

Starting keepalived:                                       [  OK ]

编写检測脚本watch.sh

#!/bin/sh

watch 'ipvsadm -l -n'

启动检測

[root@lvs work]# ./watch.sh

Every 2.0s: ipvsadm -l -n                                                                                                                          Tue May  6 12:49:52 2014

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.16.3.199:80 rr persistent 50

-> 172.16.3.91:80               Route   50     0          0

-> 172.16.3.92:80               Route   50     0          0

能够看到已经检測到172.16.3.91, 172.16.3.92两台server。

在Slave DR上做相同配置和脚本。

2.在Real Server1和Real Server2安装nginx

安装nginx过程省略。

安装完nginx之后。须要启动nginx。

配置 realserver.sh脚本

#!/bin/bash

SNS_VIP=172.16.3.199

/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

~

启动脚本

[root@rs-1 work]# ./realserver.sh start

RealServer Start

运行ifconfig,能够看到做往常多了一段下图红框内的内容。

測试

在Slave DR上測试

[vagrant@centos-5 conf]$ for((i=0;i<100;i++));do curl 172.16.3.199;done;

或者用webbench模拟并发请求

[vagrant@centos-5 conf]$ webbench -c 10 -t 10 http://172.16.3.199/


在Master DR上运行watch.sh

Every 2.0s: ipvsadm -l -n                                                                                                                           Wed May  7 11:45:27 2014

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.16.3.199:80 rr

-> 172.16.3.91:80               Route   50     0          1763

-> 172.16.3.92:80               Route   50     0          1762

整个配置过程,记得关闭全部虚拟机的防火墙, 这点非常重要。!!

[root@lvs work]# service iptables stop


例如以下命令可查询是否已经关闭防火墙

[root@lvs work]# chkconfig --list | grep iptables

iptables       0:off1:off2:off3:off4:off5:off6:off

參考链接:

http://beyondhdf.blog.51cto.com/229452/1331874

http://www.it165.net/admin/html/201308/1604.html

搭建LVS+Keepalived负载均衡集群的更多相关文章

  1. Linux平台上搭建apache+tomcat负载均衡集群

    传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...

  2. (转)CentOS7 搭建LVS+keepalived负载均衡(一)

    原文:http://blog.csdn.net/u012852986/article/details/52386306 CentOS7 搭建LVS+keepalived负载均衡(一) CentOS7 ...

  3. 搭建高性能Jboss负载均衡集群

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/a1314517love/article/details/26836357 负载均衡集群是由两台或者两 ...

  4. linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡

    最近希望能够配置一下负载均衡,在虚拟机上面,但是网上找了很多资料很零散,对于不了解的人,很多不够详细,最近终于做好了,把具体的步骤写下来,方便各位网友查阅学习 这个实验需要安装nginx如果没有安装过 ...

  5. Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群

    Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat ...

  6. CentOS7 搭建LVS+keepalived负载均衡

    1.实验环境 4台节点 Keepalived1 + lvs1(Director1):192.168.31.4 Keepalived2 + lvs2(Director2):192.168.31.3 Re ...

  7. Nginx+Keepalived搭建高可用负载均衡集群

    本文的重点是Keepalived的配置,Nginx的配置就简略带过.软件:CentOS 7.2 / Nginx 1.12.2 / Keepalived 1.3.9 ha-01:192.168.1.97 ...

  8. RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群

    本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...

  9. Apache和Nginx负载均衡集群及测试分析

    一.应用场景介绍 本文主要是介绍Apache和Tomcat在Linux环境下的安装讲解以及AJP协议动静分离负载均衡的实现,以及与Nginx负载性能比较.联网安装较为简单,故此处只说脱机的Linux环 ...

随机推荐

  1. sql case when 用法

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.            例如,下面的语句显示中文年月         select  ...

  2. jQuery里$.post请求,后台返回结果为“json”格式,前台解析错误问题记录

    在JSP页面使用$.post请求后台返回json数据时,在最后 必须加上返回数据格式为json的才行.不然JSP页面解析会出错.

  3. URI、URL、请求、响应、常见状态代码

    URI:路径(统一资源标识符,包括本地地址和网络地址) URL是URI的一种子路径, URI范围比URL范围广. URL (Uniform Resource Locator,统一全球资源定位符): 通 ...

  4. Elasticsearch之Hadoop插件的安装(图文详解)

    这个Hadoop插件的安装是非常重要. Hadoop插件安装 在es的安装目录下 bin/plugin install elasticsearch/elasticsearch-repository-h ...

  5. 使用淘宝ip地址库开放接口在网站上显示当前用户所在的城市省份网络(完整代码)

    查看效果:每天进步网  在网站的页脚 <p>欢迎来自 <?php function GetIpCity() {$realip = '';$unknown = 'unknown';if ...

  6. Hibernate中使用子查询

    子查询:   子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一条SQL语句的查询结果,在Hibernate中HQL查询同样对子查询功能提供了支持.   如下面代码所示: List ...

  7. 如何设置“用eclipse开发时自动在顶端产生import”?

    eclipse新版本中的默认设置可能导致自动在生成import时是在代码中,而大多数时间我们需要自动生成import在代码顶端,按照如下设置即可纠正

  8. jboss-eap-6.2修改端口号

    最近要改版一个项目,用来配合日常工作使用,需要在服务器上放多个jboss,那么就需要修改jboss的端口,如果服务器上配置了JBOSS_HOME,需要先删除,否则配置修改不会生效,会依然用老的jbos ...

  9. javascript中 (function(){})();如何理解?

    javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环 ...

  10. Labview学习笔记(三)

    一.数据 1.数值控件 (1)数值控件 根据不同的模拟状态,放置不同控件 (2)显示格式 为了程序显示,需要设置数值型控件的表示法.数值范围.显示格式等属性. 一般来说,长度越长,则可以表示的数值范围 ...