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

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

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。还可以使用nginx来实现,不过nginx只工作在7层网络之上。详细请参考 抚琴煮酒写的“ 软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比”这篇文章,简单很详细,很好。

1.实验环境

系统版本:CentOS release 5.9 (Final) x86 32位

ipvsadm版本:1.24  Keepalived版本:1.1.15

MASTER_IP: 192.168.1.116

BACKUP_IP:192.168.1.111

VIP: 192.168.1.140

WEB_1: 192.168.1.112 80端口

WEB_2: 192.168.1.116 80端口

2.安装lvs软件

安装在192.168.1.116和192.168.1.111

mkdir /usr/local/src/lvs
cd /usr/local/src/lvs   wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
ln -s /usr/src/kernels/-.el5PAE-i686/ /usr/src/linux
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install 

备注:先查看下linux kernel,如果文件不存在的得先安装好,安装kernel-headers和kernel-devel包

yum install kernel-headers

yum install kernel-devel

[root@s4 ipvsadm-1.24]# ll /usr/src/kernels/

total 

drwxr-xr-x.  root root  Aug   : -.el6.x86_64

3.安装keepalived软件

安装在192.168.1.116和192.168.1.111

wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz   tar -zxvf keepalived-1.1.15.tar.gz
cd keepalived-
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/   mkdir -p /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
chmod +x /etc/init.d/keepalived 
配置完毕:

备注:

1.出现这个问题记得先安装ssh:yum install -y openssl openssl-devel

checking for openssl/ssl.h... no

configure: error:

!!! OpenSSL is not properly installed on your system. !!!

!!! Can not include OpenSSL headers files.            !!!

2.出现这个问题,记得先安装Popt libraries

命令:yum install popt-devel -y

checking for poptGetContext in -lpopt... no

configure: error: Popt libraries is required

安装完毕:

写keepalived的配置文件

vi /etc/keepalived/keepalived.conf 

内容如下:

[root@s4 keepalived-]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   notification_email {

         root@localhost.localdomain

   }

   notification_email_from sns-lvs@gmail.com

   smtp_server 127.0.0.1

   router_id LVS_DEVEL

}

vrrp_instance VI_1 {

    state MASTER                   

    interface eth0

    virtual_router_id 

    priority             

    advert_int 

    authentication {

        auth_type PASS

        auth_pass 

    }

    virtual_ipaddress {

        192.168.1.140

    }

}

virtual_server  {

    delay_loop 

    lb_algo wrr

    lb_kind DR

    protocol TCP

    real_server  {

        weight 

        TCP_CHECK {

        connect_timeout 

        nb_get_retry 

        delay_before_retry 

        connect_port 

         }

    }

    real_server   {

        weight 

        TCP_CHECK {

        connect_timeout 

        nb_get_retry 

        delay_before_retry 

        connect_port 

        }

     }

}

全局定义块

1、email通知。作用:有故障,发邮件报警。

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。

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

(2)Tcp检查tcp_check。

4.2web机上设置VIP

在192.168.1.112和192.168.1.116上做

vi /root/VIP.sh
#!/bin/bash 

SNS_VIP=192.168.1.140 

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

case "$1" in 

start) 

       ifconfig lo: $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP 

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

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

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

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

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

       sysctl -p >/dev/>& 

       echo "RealServer Start OK"  

       ;; 

stop) 

       ifconfig lo: down 

       route del $SNS_VIP >/dev/>& 

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

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

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

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

       echo "RealServer Stoped" 

       ;; 

*) 

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

       exit  

esac 

exit 

为什么要做这一步,我思考了一下,因为在这里lvs只做分发数据包使用,不像haproxy工作在七层,所以lvs必须知道要把数据包分发到哪些后台机器上,做了这步后,通过数据链路层的组播功能,直接把包按照lvs的算法分发到后台服务器上。

在两天机器上风别运行这个脚本

bash VIP.sh start

查看VIP

ifconfig

可以看到多了一条记录,这就是VIP

lo:0      Link encap:Local Loopback             inet addr:192.168.207.140  Mask:255.255.255.255           UP LOOPBACK RUNNING  MTU:16436 
Metric:1

5.启动keepalived

在192.168.207.130和192.168.207.131操作

/etc/init.d/keepalived
start

在主keepalived上运行

ip addr

会看到

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
mtu 1500 qdisc pfifo_fast qlen 1000    
link/ether 00:0c:29:ed:4c:08 brd ff:ff:ff:ff:ff:ff     inet 192.168.207.130/24 brd
192.168.207.255 scope global eth0    
inet 192.168.207.140/32 scope global eth0     inet6 fe80::20c:29ff:feed:4c08/64 scope
link         valid_lft forever
preferred_lft forever

这个是keepalived自动在eth0添加了个VIP,这个是根据配置文件

virtual_ipaddress
{         192.168.207.140     }

来定义的,不过呢只有主keepalived的服务器上才会这么做,从keepalived服务器不会设置VIP的,除非从服务器转成了主服务器。

在浏览器查看http://192.168.207.140来查看lvs的调度后台的web服务器的数据

在主keepalived服务器上运行

watch ipvsadm
-ln

来查看lvs的调度情况

IP Virtual
Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.207.140:80 wrr   -> 192.168.207.130:80           Local   3     
0          7   -> 192.168.207.129:80           Route   3     
0          8

6.模拟主服务器down

只要把主keepalived关掉就好了

可以看到从keepalived的/var/log/messages日志

[root@s5 ~]# tailf /var/log/messages

[root@s4 ~]# tailf /var/log/messages

Aug   :: s4 Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.

Aug   :: s4 Keepalived_healthcheckers: Configuration  Bytes

Aug   :: s4 Keepalived_healthcheckers: Activating healtchecker ]

Aug   :: s4 Keepalived_healthcheckers: Activating healtchecker ]

Aug   :: s4 kernel: IPVS: [wrr] scheduler registered.

Aug   :: s4 Keepalived: Terminating on signal

Aug   :: s4 Keepalived_vrrp: Terminating VRRP child process on signal

Aug   :: s4 Keepalived_healthcheckers: Terminating Healthchecker child process on signal

Aug   :: s4 Keepalived: Stopping Keepalived v1./,)

Aug   :: s4 kernel: IPVS: __ip_vs_del_service: enter

立即变成了keepalived,访问url还是依旧正常

在把原主keepalived服务打开,可以在原从keepalived看到日志

[root@s5 ~]# tailf /var/log/messages

Aug  :: s5 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.1.111 added

Aug  :: s5 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.1.140 added

Aug  :: s5 Keepalived_healthcheckers: Registering Kernel netlink reflector

Aug  :: s5 Keepalived_healthcheckers: Registering Kernel netlink command channel

Aug  :: s5 Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.

Aug  :: s5 Keepalived_healthcheckers: Configuration  Bytes

Aug  :: s5 Keepalived_healthcheckers: IPVS: Destination already exists

Aug  :: s5 Keepalived_healthcheckers: Activating healtchecker ]

Aug  :: s5 Keepalived_healthcheckers: Activating healtchecker ]

Aug  :: s5 kernel: IPVS: [wrr] scheduler registered.

ok,到此配置成功了,OK!

Web服务器访问在:

可以看到负载是均衡的

参考:

http://itindex.net/detail/43718-lvs-keepalived-%E8%B4%9F%E8%BD%BD

http://www.uml.org.cn/zjjs/201306144.asp

http://blog.jobbole.com/87503/

lvs+keepalived 负载均衡的更多相关文章

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

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

  2. 搭建LVS+Keepalived负载均衡集群

    这两天学习了LVS+Keepalived负载均衡的搭建.网上的教程非常多,可是动起手来遇到不少问题. 如今把自己的搭建过程以及遇到的一些问题给分享下. 硬件环境: Macbook 8G内存.250G ...

  3. LVS+keepalived负载均衡

    背景:         随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高 ...

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

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

  5. LVS+keepalived负载均衡实战

    1 首先安装虚拟机 安装系统 这里 配置两台虚拟机 1:192.168.137.102   2:192.168.137.103 分别安装tomcat 默认80端口,同时都是开启状态 配置192.168 ...

  6. LVS+Keepalived负载均衡配置

    简介 lvs一般是和keepalived一起组合使用的,虽然也可以单独使用lvs,但配置比较繁琐,且可用性也没有前者高. lvs和keepalived组合使用后,配置lvs的VIP和负载均衡就都在ke ...

  7. Linux CentOs集群LVS+Keepalived负载均衡的实现

    准备工作 环境:Win10下Centos6.4虚拟机. 负载均衡:两台(一主一备)  LVS + Keepalived. HTTP服务器:3台. 给每台服务器配置IP 1.VIP(virtual ip ...

  8. MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移

    系统信息: mysql主库 mysql从库 VIP 192.168.1.150 mysql 主主同步都设置 auto-increment-offset,auto-increment-increment ...

  9. [转]LVS+Keepalived负载均衡配置

    简介 来源:https://www.cnblogs.com/MacoLee/p/5858995.html lvs一般是和keepalived一起组合使用的,虽然也可以单独使用lvs,但配置比较繁琐,且 ...

随机推荐

  1. Python自动化之IO多路复用

    单线程.多线程和异步对比图 灰色的是阻塞 IO多路复用 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心 ...

  2. 取得DIV的ID还是CLASS

    无论你想取得DIV的ID还是CLASS 最重要的是找到你想取值的DIV对象.要取得DIV对象的方法有很多.常用的有2个,一个是根据ID,用var div=document.getElementById ...

  3. 【架构】MQTT/XMPP/GCM 等参考资料

    https://www.zhihu.com/question/29138530 https://segmentfault.com/q/1010000002598843/a-10200000026014 ...

  4. Sparse Matrix Multiplication

    Given two sparse matrices A and B, return the result of AB. You may assume that A's column number is ...

  5. 【leetcode】Maximum Subarray

    Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...

  6. (转)利用eclipse external tool 执行mvn jetty:run

    一.如果这个工程是标准的maven-webapp那么基本上不用修改,直接运行jetty:run就可以执行. 但是有时候会报错说 [ERROR] No plugin found for prefix ' ...

  7. ABAP 承运路单

    *&---------------------------------------------------------------------* *& Report  ZSDR010 ...

  8. centos搭建svn服务器并在windows实验

    安装步骤如下: 1.yum install subversion   2.输入rpm -ql subversion查看安装位置,如下图:   我们知道svn在bin目录下生成了几个二进制文件. 输入 ...

  9. div+css进度条

    效果图: 进度条代码: <style type="text/css"> 红色:background-color:f05153:border:1px solid #f05 ...

  10. 【python】类中的super().__init__()

    来源:百度知道 python中的super( test, self).__init__()是什么意思? 首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后&qu ...