利用Piranha+LVS方案实现WEB负载均衡

背景:最近公司上了一个项目,项目主要是实现手机终端访问WEB页面,但是用户量较大,需要实现负载均衡,经过方案选型,最终选择了用Piranha+LVS+nginx来实现。

环境:

操作系统  Centos 6.6 _X64

WEB         nginx

结构:

          LVS-ACTIVE:10.6.1.210
          LVS-BACKUP: 10.6.1.211
          LVS-VIP: 192.168.1.214
          Realsever: 10.6.1.212,10.6.1.213

一.Piranha方案基本简绍.
1.Piranha方案优点:
1.1.1配置简洁高效:
配置简便一个lvs.conf配置文件即可搞定(类keepalived方案.)

1.1.2WEB配置界面.
WEB配置对于那些不懂LVS配置的人员来说非常吸引力,你几乎只要花15分钟就可以配置好一个完美的负载均衡及高可用性方案.

1.1.3完整的功能:

主备LVS (Load Balancer)的Heartbeat和HA (pulse,send_arp)
LoadBalancer和Real Server间进程服务的Heartbeat (nanny)
IPVS功能 (lvsd)
IPVS的管理 (ipvsadm)

2.Piranha方案原理结构描述:
Piranha方案是基于LVS基础上设计的一套负载均衡高可用解决方案.
LVS运行在一对有相似配置的计算机上:
一个作为活动LVS Router(Active LVS Router),
一个作为备份LVS Router(Backup LVS Router)。

活动LVS Router服务有两个角色:
* 均衡负载到真实服务器上。
* 检查真实服务器提供的服务是否正常。
备份LVS Router用来监控活动的LVS Router,以备活动的LVS Router失败时由备份LVS Router接管。

Pulse:
Pulse进程运行在活动LVS Router和备份LVS Router上。
在备份LVS Router上,pulse发送一个心跳(heartbeat)到活动LVS Router的公网接口上以检查活动LVS Router是否正常。
在活动LVS Router上,pulse启动lvs进程并响应来自于备份LVS Router的心跳。

lvsd:
lvs进程调用ipvsadm工具去配置和维护IPVS路由表,并为每一个在真实服务器上的虚拟服务启动一个nanny进程。

nanny:
每一个nanny进程去检查真实服务器上的虚拟服务状态,并将故障情况通知lvs进程。假如一个故障被发现,lvs进程通知ipvsadm在IPVS路由表中将此节点删除。

send_arp:
如果备份LVS Router未收到来自于活动LVS Router的响应,
它将调用send_arp将虚拟IP地址再分配到备份LVS Router的公网接口上。
并在公网接口和局域网接口上分别发送一个命令去关掉活动LVS Router上的lvs进程。同时启动自己的lvs进程来调度客户端请求。

3.Piranha方案基本套件安装:

3.1 #yum install ipvsadm modcluster piranha system-config-cluster php php-cli   php-common

3.2  # piranha-passwd    输入一个密码,要记住,后面登录WEB管理页面要用到。

 

         3.3     #  /etc/init.d/piranha-gui start     启动piranha页面服务。

 

         3.4   在浏览器里输入http://10.6.1.210:3636 , 点击login .  用户名:piranha  密码:redhat (就是刚才设置的密码)

    

4.配置文件介绍及常用命令:
/etc/sysconfig/ha/lvs.cf     //由http://ip:3636 web界面配置的配置文件写入此文件.
/etc/init.d/piranha-gui start  //启动piranha服务的WEB配置界面.
/etc/init.d/pulse  start         //启动piranha服务读取的就是/etc/sysconfig/ha/lvs.cf.

/etc/init.d/pulse   stop         //停止LVS服务

二。 Piranha配置

配置主备LVS服务器(主备Server都要提前按3步骤安装Piranha).
# vi /etc/sysctl.conf找到下面行 //启用数据转发.
net.ipv4.ip_forward = 0将0 改成1,net.ipv4.ip_forward = 1
执行如下命令来应用:sysctl -p

通过WEB界面配置Piranha服务.

http://10.6.1.210:3636, 用户名:piranha  密码:redhat

登陆后,选择Global Settings 这是对LVS的配置
Primary server public IP 输入公网IP:10.6.1.210,应用后按ACCEPT按钮保存设置。

通过WEB配置主LVS的信息
1. 配置主LVS

2.配置备份LVS

3. 配置添加LVS( VIP信息)

4.配置Realserver

点击”编辑”添加具体的Realsever信息.

5.启动LVS服务pulse

# /etc/init.d/pulse start

如果不报错,表示启动成功!到此LVS的服务器已经配置完成了启动两个程序
1、piranha-gui  是用来配置LVS的
2、pulse       是用来启动LVS的

6.备份LVS安装与配置

备份LVS安装同主LVS安装方法同样.直接将lvs.conf拷贝到相应的目录下:
#scp  lvs.cf [email protected]:/etc/sysconfig/ha/

注: 主备服务器上lvs.cf配置文件内容是一样的。

在LVS-BACKUP 10.6.1.211上启动LVS服务.

# /etc/init.d/pulse start 启动服务即可.

7.安装配置Realserver, 主要在realserver上安装nginx服务和配置nginx文件等,此处省略。

1)

通过iptables实现Real Server的目标地址重定向:

[[email protected] ~]# iptables -t nat -A PREROUTING -d 10.6.1.214/32 -p tcp -m tcp --dport 80 -j REDIRECT

[[email protected] ~]# /etc/init.d/iptables save 

[[email protected] ~]# chkconfig iptables on

要求在所有Real Server中通过iptables在防火墙的nat链中加入规则,将所有通过80端口外发数据包的目标地址模拟成虚拟IP的地址 10.6.1.214,然后发送给用户端,以便用户端可以正常接收此返回信息。因此请确保没有其他iptables规则与此规则冲突,并保证所有 通过80端口外发的包都经过了此规则的处理。

2)  把下面的写成脚本,加入/etc/rc.local中开机执行

##################################################################

#!/bin/bash

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"

####################################################################

或者把下面命令写入/etc/sysctl.conf文件中,然后执行sysctl -p命令,使生效。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

+++++++++++++++++++++++++++++++++++++++++++++

到此配置完成。

三。 测试。

说明: 可以通过停止主LVS,看备LVS能否接管服务; 可以停止其中一台realserver,看连接状态里是否还能看到停止的服务器,多注意日志的变化并分析。

ipvsadm –ln    //查看LVS连接状态.

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.6.1.214:80 wlc persistent 600
  -> 10.6.1.212:80                Route   1      0          0         
  -> 10.6.1.213:80                Route   1      0          0

查看日志。tail -f /var/log/messages

Sep 28 16:03:03 localhost kernel: IPVS: stopping backup sync thread 7242 ...
Sep 28 16:03:04 localhost nanny[7302]: [ active ] making 10.6.1.213:80 available
Sep 28 16:03:04 localhost kernel: IPVS: sync thread started: state = MASTER, mcast_ifn = eth0, syncid = 0
Sep 28 16:03:04 localhost kernel: send_arp uses obsolete (PF_INET,SOCK_PACKET)
Sep 28 16:03:04 localhost nanny[7301]: [ active ] making 10.6.1.212:80 available
Sep 28 16:03:05 localhost ntpd[1546]: Listen normally on 21 eth0:1 10.6.1.214 UDP 123
Sep 28 16:03:05 localhost ntpd[1546]: peers refreshed
Sep 28 16:03:09 localhost pulse[7309]: gratuitous lvs arps finished
Sep 28 16:32:11 localhost nanny[7301]: [inactive] shutting down 10.6.1.212:80 due to connection failure
Sep 28 16:33:11 localhost nanny[7301]: [ active ] making 10.6.1.212:80 available

分析:

如日志中出现: gratuitous lvs arps finished, 表示LVS启动成功。

如日志中出现:[inactive] shutting down 10.6.1.212:80 due to connection failure,我把一台realserver停止了。

如日志中出现:ocalhost nanny[7301]: [ active ] making 10.6.1.212:80 available ,我把realserver又启动了。

——————————————————————————————————————

备机LVS处于监听状态,主LVS关闭后,备机在设定的时间内接替主服务,如下日志显示。

Sep 29 11:59:20 localhost kernel: IPVS: sync thread started: state = BACKUP, mcast_ifn = eth0, syncid = 0
Sep 29 12:00:08 localhost pulse[16199]: partner dead: activating lvs
Sep 29 12:00:08 localhost lvsd[16212]: starting virtual service WEB_LVS active: 80
Sep 29 12:00:08 localhost lvsd[16212]: create_monitor for WEB_LVS/WEB_A running as pid 16216
Sep 29 12:00:08 localhost lvsd[16212]: create_monitor for WEB_LVS/WEB_B running as pid 16217
Sep 29 12:00:08 localhost nanny[16216]: starting LVS client monitor for 10.6.1.214:80 -> 10.6.1.212:80
Sep 29 12:00:08 localhost nanny[16217]: starting LVS client monitor for 10.6.1.214:80 -> 10.6.1.213:80
Sep 29 12:00:08 localhost kernel: IPVS: stopping backup sync thread 16204 ...
Sep 29 12:00:08 localhost kernel: IPVS: sync thread started: state = MASTER, mcast_ifn = eth0, syncid = 0
Sep 29 12:00:09 localhost nanny[16217]: [ active ] making 10.6.1.213:80 available
Sep 29 12:00:09 localhost nanny[16216]: [ active ] making 10.6.1.212:80 available
Sep 29 12:00:10 localhost ntpd[1672]: Listen normally on 9 eth0:1 10.6.1.214 UDP 123
Sep 29 12:00:10 localhost ntpd[1672]: peers refreshed
Sep 29 12:00:13 localhost pulse[16223]: gratuitous lvs arps finished

—————————————————————————————————————————

【注】服务切换测试:
测试过程中多注意分析日志.在Linuxtone网站编写heartbeat+lvs方案的时候还需要自己送一个arping命令告诉网关我的MAC发生变化了.但是Piranha方案能自动送一个arp命令.

在测试的过程中,我本机访问VIP http://10.6.1.214 时,总是访问到realserver10.6.1.212 上,换浏览器也是一样,我以为配置有问题,后来才发现:原来同一个IP访问的请求会分配到同一台服务器上。 你换个IP访问就OK了。


时间: 2024-11-06 17:42:43

利用Piranha+LVS方案实现WEB负载均衡的相关文章

NFS共享关系型数据库利用DNS轮询提供Web负载均衡

前言: 用NFS.LAMP.BIND结合的方法,应对网络中访问量增大而导致服务器负载运行的情况.以实现Web服务器之间使用同一个MYSQL和相同的网页配置文件. 实验环境: HostName IP 规划 nfs.preferred.com 192.168.1.6 NFS ns.preferred.com 192.168.1.5 DNS mysql.preferred.com 192.168.1.4 MYSQL www.preferred.com 192.168.1.3 WEB www.prefe

高可用集群技术之keepalived实现lvs高可用并负载均衡web服务

Keepalived概述: Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器. keepalived实现lvs高可用并负载均衡web服务: 准备工作: 2台keepalived节点为: node1.samlee.com

web负载均衡整理

参考:http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166350.html http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166349.html http://news.cnblogs.com/n/208124/ http://network.51cto.com/art/201108/281452.htm 负载均衡的概念 Web集群是由多个同时运行同一个web应用的

企业级web负载均衡完美架构

转载:揭秘企业级web负载均衡完美架构(图) 2010-07-06 15:16 抚琴煮酒 51CTO.com 字号:T | T 相信很多朋友对企业级的负载均衡高可用实例非常感兴趣,此篇文章根据成熟的线上环境而写,旨在帮助大家迅速架构一个企业级的负载均衡高可用的web环境. AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 [51CTO.com独家特稿]相信很多朋友对企业级的负载均衡高可用实例非常感兴趣,此篇文章根据成熟的线上环境而写,旨在帮助大家迅速架构一个企业级的负载均衡高可

(2)LVS+Keepalived高可用负载均衡架构原理及配置

1.keepalived 介绍2.keepalived 优缺点3.keepalived 应用场景4.keepalived 安装配置5.keepalived+lvs 高可用6.keepalived+nginx 高可用7.keepalived 切换原理8.性能优化9.常见故障 一.keepalived 介绍 1.keepalived 定义keepalived是一个基于VRRP(virtual route redundent protocol)协议来实现的LVS服务高可用方案,可以利用其来避免单点故障

Web负载均衡实现方式(转)

Reference [1] https://www.cnblogs.com/eric-qin/p/7238278.html 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询.IP负载均衡和CDN.其中IP负载均衡可以使用硬件设备或软件方式来实现. 什么是web负载均衡 服务器集群(Cluster)使得多个

Heartbeat+LVS+Ldirectord高可用&负载均衡

集群技术主要分为三大类: 高可用性(High Available Cluster),例:Linux-HA 负载均衡(Load balancing Cluster),例:LVS.MOSIX 高性能计算(High Performance Computing),例:Beowulf 我们这里使用 RHEL5.2,LVS,Linux-HA,Ldirectord,构造一个高可用的负载均 衡集群系统.如图: Load Balancer 是整个集群系统的前端,负责把客户请求转发到 Real Server 上.

DNS+keepalived+lvs实现高可用负载均衡集群

1.目的: 部署两台lvs调度器并利用keepalived实现主主模型,DNS添加两条A记录指向lvs调度器实现轮询,最终实现高可用负载均衡集群效果 2.拓扑规划: 3.配置实践 (1)同步所有机器时间 在每台机器实行ntp同步: [[email protected] ~]# ntpdate 10.1.0.1 26 Oct 20:10:57 ntpdate[5533]: step time server 10.1.0.1 offset -32408.643564 sec (2)先配置RS,在RS

Web负载均衡的几种方式

Web负载均衡的几种实现方式 摘要:负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询.IP负载均衡和CDN.其中IP负载均衡可以使用硬件设备或软件方式来实现. 什么是web负载均衡服务器集群(Cluster)使得多个服务器节点能够协同工作,根据目的的不同,服务器集群可以分为: 高性能集群:将单个重负载的请