简介:

LVS 是 Linux Virtual Server 的简写,Linux 虚拟服务器的意思,是一个虚拟的服务器集群系统,此项目由章文嵩博士于 1998 年 5 月成立,是中国最早出现的自由软件项目之一。

LVS 负载均衡集群系统的优点:

1、提高吞吐量

想获得更高的吞吐量,在 LVS 中只需增加 Real-server 即可,其开销只是线性增长。如选择更换一台更高性能的服务器来获得相当的吞吐量,开销要大很多。

2、冗余

如果 LVS 中某台 Real-server 由于需要升级或其它原因不能对外提供服务,其退出及恢复工作并不会对用户造成服务中断。

3、适应性

不管是需要吞吐量逐渐变化、还是快速变化,服务器的增减对客户都是透明的。

LVS 负载均衡集群系统的三种转发机制:

1、Virtual Server via NAT ( VS/NAT )

VS/NAT 网络地址转换模式,服务器可以运行任何支持 TCP/IP 协议的操作系统,它只需要一个公网 IP 地址配置在 LVS 主机上,后端真实服务器都可以使用私有地址。
它的缺点是扩充能力有限,当后端真实服务器达到一定数量时,LVS 本机有可能成为集群瓶颈,因为整个集群中的客户端请求和响应封包都要通过 LVS 负载均衡主机。

2、Virtual Server via IP Tunneling ( VS/TUN )

VS/TUN IP 隧道模式,负载均衡 LVS 主机只将请求分配到不同的真实服务器,真实服务器将结果直接返回给客户端。这样 LVS 可以处理海量的请求,而不会成为集群系统瓶颈。
并且 IP 隧道模式不限制真实服务器位置,只要系统支持 IP 隧道协议并且网络可达就可以。多了一层 IP 隧道的开销,且并不是所有系统都支持此协议。

3、Virtual Server via Direct Routing ( VS/DR )

VS/DR 直接路由模式,同样 LVS 主机只处理客户端到服务器端的连接,响应信息由真实服务器直接返回给客户端。
DR 模式要求所有真实服务器必须至少有一块网卡与 LVS 主机在同一物理网段中,且真实服务器网络设备或设备别名不作 ARP 响应。

Keepalived 起初是 LVS 设计的,专门用来监控集群系统中各个服务节点的状态,后来又加入了 VRRP( 虚拟路由冗余协议 )解决静态路由出现的单点故障问题,
通过 VRRP 协议可以实现网络不间断稳定运行。因此,Keepalived 不仅具有服务器状态检测和故障隔离功能,还具有 HA Cluster 功能。

Keepalived 作为 LVS 的扩展项目,因此。Keepalived 可以与 LVS 无缝整合,轻松构建一套高性能的负载均衡集群系统。

环境描述:( CentOS 6.6_x86_64 minimal )

LVS VIP 192.168.214.50

LVS Master 192.168.214.20
LVS Backup 192.168.214.30

Real-Server-1 192.168.214.10
Real-Server-1 192.168.214.40

软件包下载地址:

Ipvsadm http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
Keepalived http://www.keepalived.org/software/keepalived-1.2.10.tar.gz

一、安装环境依赖包

shell > yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt-devel popt-static

二、下载、安装 ipvsadm 、keepalived

shell > wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

shell > tar zxf ipvsadm-1.26.tar.gz

shell > cd ipvsadm-1.26

shell > make ; make install

shell > ipvsadm -v
ipvsadm v1. // (compiled with popt and IPVS v1.2.1)

## 安装还是很简单的

shell > wget http://www.keepalived.org/software/keepalived-1.2.10.tar.gz

shell > tar zxf keepalived-1.2..tar.gz

shell > cd keepalived-1.2.

shell > ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.-504.23..el6.x86_64

## --sysconf 指定 keepalived.conf 的存放位置 --with-kernel-dir 指定使用内核源码中的头文件,即 include 目录

shell > make ; make install

shell > ln -s /usr/local/sbin/keepalived /sbin/

shell > keepalived -v
Keepalived v1.2.10 (/,)

## 安装也是蛮简单的

三、配置 keepalived.conf

shell > vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
router_id MASTER ## keepalived 服务器标识符,可以随意设定( 貌似也是全局唯一 )
} vrrp_instance VI_1 { ## 定义一个名为 VI_1 的 VRRP 实例
state MASTER ## Keepalived 服务器角色,MASTER 为主、BACKUP 为备
interface eth0 ## 指定 HA 监测网络接口
virtual_router_id ## 虚拟路由标识,同一个 VRRP 实例使用唯一的标识,主备必须一样
priority ## 节点优先级,同一 VRRP 实例中 MASTER 的优先级必须大于 BACKUP
advert_int ## MASTER / BACKUP 之间同步检查间隔时间,单位 秒
authentication { ## 节点之间通信验证类型、密码 ,同一 VRRP 实例中,MASTER / BACKUP 必须使用相同的密码才可以通信
auth_type PASS
auth_pass
}
virtual_ipaddress { ## 虚拟 IP 地址,又称漂移 IP 。可以通过 ip add 在 MASTER 上查看是否绑定
192.168.214.50
}
} virtual_server 192.168.214.50 { ## 定义虚拟服务器
delay_loop ## 定义健康检查时间间隔,单位 秒
lb_algo rr ## 负载均衡调度算法,支持 rr 、wrr 、lc 、wlc 、lblc 、sh 、dh 等
lb_kind DR ## LVS 负载均衡机制,支持 NAT 、TUN 、DR
nat_mask 255.255.255.0 ## 子网掩码
persistence_timeout ## 会话保持时间,单位 秒。提供动态页面 session 保持功能,同一 IP 该值时间内被持续分配到同一台节点服务器上
protocol TCP ## 转发协议类型,支持 TCP 、UDP real_server 192.168.214.10 { ## 定义节点服务器
weight ## 节点权重值,数字越大权重越高,分配到的连接越多。主要用于后端节点服务器性能不统一
notify_down /etc/keepalived/real_down.sh ## 该节点服务器处于 DOWN 状态后执行的脚本
TCP_CHECK { ## 健康检测方式,支持 HTTP_GET 、SSL_GET 、TCP_CHECK 、SMTP_CHECK 、MISC_CHECK
connect_port ## 检测端口,不指定时默认为 real_server 指定的端口
connect_timeout ## 无响应超时时间,单位 秒
nb_get_retry ## 重试次数
delay_before_retry ## 重试间隔,单位 秒
}
}
real_server 192.168.214.40 { ## 第二台节点服务器
weight
notify_down /etc/keepalived/real_down.sh
TCP_CHECK {
connect_port
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
shell > vim /etc/keepalived/real_down.sh

#!/bin/bash

Mail='admin@mail.com'

echo "Real Server State is DOWN" | mail -s "Keepalived Mail" $Mail

## 当 real server 处于 DOWN 状态时执行的脚本,LVS 要启动 Sendmail 、Postfix 或其它邮件服务

四、启动 Keepalived 并加入开机启动、配置防火墙规则

shell > /etc/init.d/keepalived start

shell > chkconfig --add keepalived

shell > chkconfig --level  keepalived on

shell > iptables -I INPUT  -p tcp --dport  -j ACCEPT

shell > service iptables save

## 现在使用 ip add 可以看到绑定了 VIP ,并且 /var/log/messages 日志文件中也有关于 VIP 绑定、real server 的检测结果

五、以上都是在 MASTER 主机的操作,下面配置 BACKUP 主机

## 步骤一、二、四完全一样,主要将步骤三的 keepalived.conf 中 router_id 、state 、priority 修改为 BACKUP 、BACKUP 、80 即可

## 同样可以使用 ip add 查看 VIP 信息,不过它现在是 BACKUP 状态,没有绑定 VIP 为正常,通过 /var/log/messages 日志文件可以看到处于 BACKUP 状态。

六、配置 Real-server ,后端节点服务器

Real-Server-1

shell > yum -y install httpd

shell > echo "welcome to Real-Server-1" > /var/www/html/index.html

shell > /etc/init.d/httpd start

shell > iptables -I INPUT -p tcp --dport  -j ACCEPT

Real-Server-2

shell > yum -y install httpd

shell > echo "welcome to Real-Server-2" > /var/www/html/index.html

shell > /etc/init.d/httpd start

shell > iptables -I INPUT -p tcp --dport  -j ACCEPT
shell > vim /etc/init.d/realserver.sh  ## Real-Server- / Real-Server- 都要建立此脚本,并设为开机启动

#!/bin/bash

VIP='192.168.214.50'

. /etc/init.d/functions

case "$1" in
start)
/sbin/ifconfig lo: $VIP broadcast $VIP netmask 255.255.255.255 up
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 " LVS Real-Server Start Success"
;;
stop)
/sbin/ifconfig lo: down
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 " LVS Real-Server Stop Success"
;;
*)
echo "Usage: $0 ( start | stop )"
exit
esac shell > chmod a+x /etc/init.d/realserver.sh shell > /etc/init.d/realserver.sh start shell > echo "/etc/init.d/realserver.sh start" >> /etc/rc.local ## 加入开机启动

## 此脚本用于节点服务器绑定 VIP ,并抑制响应 VIP 的 ARP 请求。
## 这样做的目的是为了不让关于 VIP 的 ARP 广播时,节点服务器应答( 因为节点服务器都绑定了 VIP ,如果不做设置它们会应答,就会乱套 )

七、测试

1、首先单独测试节点服务器能不能访问

## 单独访问 192.168.214.10 192.168.214.40 ,如果可以看到页面显示 Welcome to Real-Server-1 和 Welcome to Real-Server-2 则节点服务器正常

2、分别查看节点服务器是否都绑定了 VIP

## 分别在节点服务器上使用 ifconfig lo:0 ,如果可以看到 lo:0 虚拟网卡被绑定了 VIP 192.168.214.50 则节点服务器正常

3、首先查看 MASTER 服务器有没有绑定 VIP ,状态是不是 MASTER ,检测后端节点服务器是不是成功

## 使用 ip add 查看是否绑定 VIP ,tail /var/log/messages 查看服务器状态是不是 MASTER ,检测节点服务器有没有连接成功信息:

Jul  :: localhost Keepalived_healthcheckers[]: TCP connection to [192.168.214.10]: success.
Jul :: localhost Keepalived_healthcheckers[]: Adding service [192.168.214.10]: to VS [192.168.214.50]: Jul :: localhost Keepalived_healthcheckers[]: TCP connection to [192.168.214.40]: success.
Jul :: localhost Keepalived_healthcheckers[]: Adding service [192.168.214.40]: to VS [192.168.214.50]:

## 服务器状态信息:

Jul  :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jul :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_1) Entering MASTER STATE
Jul :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_1) setting protocol VIPs.
Jul :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.214.50
Jul :: localhost Keepalived_healthcheckers[]: Netlink reflector reports IP 192.168.214.50 added

4、同样查看 BACKUP 服务器有没有绑定 VIP ,状态是不是 BACKUP ,检测后端节点服务器是不是成功

## 发现没有绑定 VIP 为正常,状态为 BACKUP 为正常,同样能够检测到后端节点服务器为正常,相关信息如下:

Jul  :: localhost Keepalived_vrrp[]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jul :: localhost Keepalived_vrrp[]: VRRP sockpool: [ifindex(), proto(), unicast(), fd(,)]
Jul :: localhost Keepalived_healthcheckers[]: Using LinkWatch kernel netlink reflector... Jul :: localhost Keepalived_healthcheckers[]: TCP connection to [192.168.214.10]: success.
Jul :: localhost Keepalived_healthcheckers[]: Adding service [192.168.214.10]: to VS [192.168.214.50]: Jul :: localhost Keepalived_healthcheckers[]: TCP connection to [192.168.214.40]: success.
Jul :: localhost Keepalived_healthcheckers[]: Adding service [192.168.214.40]: to VS [192.168.214.50]:

5、客户端访问 VIP 测试负载均衡

## 直接访问 192.168.214.50 ,如果可以访问到页面证明成功。
## 当多次访问后发现,页面并没有发生变化,也就是说并没有负载均衡。
## 在 MASTER 上使用 ipvsadm -Ln 命令看到的信息如下:

shell > ipvsadm -Ln

IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.214.50: rr persistent
-> 192.168.214.10: Route
-> 192.168.214.40: Route

## 发现有 87 次访问都被分配到了 192.168.214.40 这台节点服务器上,这正常吗 ?
## 不要着急,这是正常的!还记得大明湖畔的夏雨荷吗?哦不,还记得 persistence_timeout 120 这个参数吗?
## 正因为设置了 session 保持时间,所以持续的访问被分配到了某一台节点服务器。
## 现在把此参数注释掉,测试一次( 记得重启 keepalived )。

shell > ipvsadm -Ln

IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.214.50: rr
-> 192.168.214.10: Route
-> 192.168.214.40: Route

## 可以看到请求被均衡的分配到了现台节点服务器上( rr 轮询调度算法 ),并且页面也在两台节点服务器上切换。

## 当节点服务器宕机后会发生什么 ?

shell > tail /var/log/messages

Jul  :: localhost Keepalived_healthcheckers[]: TCP connection to [192.168.214.40]: failed !!!
Jul :: localhost Keepalived_healthcheckers[]: Removing service [192.168.214.40]: from VS [192.168.214.50]:

## 检测失败,节点服务器 192.168.214.40 被从 IPVS 中移除

shell > ipvsadm -Ln

IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.214.50: rr
-> 192.168.214.10: Route

## 宕机的节点服务器被移除了

Jul  :: localhost Keepalived_healthcheckers[]: TCP connection to [192.168.214.40]: success.
Jul :: localhost Keepalived_healthcheckers[]: Adding service [192.168.214.40]: to VS [192.168.214.50]:

## 当节点服务器修复后,会自动将节点服务器加入集群中。

6、客户端访问 VIP 测试高可用

## 当 MASTER 服务器无法提供服务时,VIP 会在 MASTER 上自动移除,BACKUP 服务器会提升为 MASTER 状态,绑定 VIP 、接管服务。
## 当 MASTER 修复加入网络后,会自动抢回 VIP ,成为 MASTER 身份。这再繁忙的网络环境中是不理想的。
## 可以通过 nopreempt 参数来设置不抢占功能,设置此参数时需要注意,必须将之前修复的 MASTER 机器状态设为 BACKUP ,优先级还保持最高。

LVS + Keepalived 实现高可用、负载均衡 Web 集群的更多相关文章

  1. LVS+Keepalived实现高可用负载均衡(转)

    LVS+Keepalived实现高可用负载均衡   一.原理         1.概要介绍         如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具 ...

  2. 【架构师之路】 LVS+Keepalived实现高可用负载均衡

    一.原理        1.概要介绍        如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态, ...

  3. LVS+Keepalived 实现高可用负载均衡集群

    LVS+Keepalived  实现高可用负载均衡集群     随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...

  4. LVS+Keepalived 实现高可用负载均衡

    前言 在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的.此时最常见的方式就是通过负载均衡来进行横向扩展.其中我们最常用的软件就是 Nginx.通过其反向代理的能力能够轻松实现负载均衡,当有服务出 ...

  5. LVS+Keepalived搭建高可用负载均衡

    应用环境: LVS负责多台WEB端的负载均衡(LB):Keepalived负责LVS的高可用(HA),这里介绍主备模型. 测试环境: 配置步骤: 1. 安装软件 在LVS-1和LVS-2两台主机上安装 ...

  6. Linux 系统中部署 LNMP 高可用负载均衡架构集群实现动态博客

    (一)设计思路 高可用:keepalived 解决方案 负载均衡:(lvs)DR做轮询,需要一个调度器,后端节点两个(部署nginx动态博客),通过一个vip去访问动态博客 后端节点需要部署动态博客作 ...

  7. 【线上测试之后的应用】基于MySQL+MHA+Haproxy构建高可用负载均衡数据库集群(详解)

    这里我们先介绍一下MHA是什么,其次就是它的应用与测试,同时为了大家呈现了数据备份案例,最后总结了使用情况以及注意事项和解决办法 一.MHA 概述 MHA(Master High Availabili ...

  8. Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群

    ------------------------------------- 一.前言 二.MySQL Cluster基本概念 三.环境 四.配置 1.LB-Master及LB-Backup配置 2.M ...

  9. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  10. haproxy+keepalived实现高可用负载均衡(转)

      软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...

随机推荐

  1. GitHub----初学习(一)

    刚开始学习GitHub,在这借鉴一下别人的总结,http://youngxhui.github.io/2016/05/03/GitHub-for-Windows%E4%BD%BF%E7%94%A8%E ...

  2. canvas练习 - 七巧板绘制

    用到的方法: 注意点: stokeStyle等样式要在stroke前边 如果最后只有一个stroke或者fill,那么只填充最后一次路径的,之前的也会画出来但是没有填充看不到.所以每次begin+cl ...

  3. LeetCode-494. Target Sum(DFS&DP)

    You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...

  4. 阅读代码工具:Visual Studio Code

    打开一个文件夹,直接阅读,体验还不错 版本: 1.25.1提交: 1dfc5e557209371715f655691b1235b6b26a06be日期: 2018-07-11T15:43:11.471 ...

  5. sencha touch + Cordova 3.x下载文件

    今天实现了一个文件下载功能,在网上找了下资料发现有些问题. 我用的是小米1s,安卓 4.1.2,cordova 3.5,打包测试运行正常 首先在控制层launch方法中加入以下代码: // 等待加载P ...

  6. [原]openstack-kilo--issue(一) httpd汇总

    /** 系统环境:redhat7.2 repo:163 openstack version : kilo author: lihaibo **/ 问题1:Invalid command 'group= ...

  7. 2018 青岛ICPC区域赛E ZOJ 4062 Plants vs. Zombie(二分答案)

    Plants vs. Zombies Time Limit: 2 Seconds      Memory Limit: 65536 KB BaoBao and DreamGrid are playin ...

  8. 应急响应--记录一次漏洞紧急处理中意外发现的挖矿木马(Shiro反序列化漏洞和ddg挖矿木马)

    背景 某公司线上服务器意外发现一个Apache Shiro 反序列化漏洞,可以直接GetShell.出于做安全的谨慎,马上出现场应急,确认漏洞.该漏洞存在在cookie字段中的rememberMe字段 ...

  9. .sh 的运行

    cat *.sh 看一下你的那个sh文件 看第一行是#!/bin/bash 还果 #!/bin/sh 如果是/bin/bash就执行 bash your.sh 如果是/bin/sh 就执行 sh yo ...

  10. thinkphp开启事物的简单方法

    使用thinkphp开启事务,ThinkPHP 3.2.2实现事务操作的方法: 开启事务: $User->startTrans() 提交事务: $User->commit() 事务回滚: ...