LVS/DR模式实战

线上服务器清理的差不多了,准备做一下服务器分层架构,就是将LNMP环境分离开,用到了LB集群,先来点理论吧。

负载均衡LB集群主要关注的是并发处理能力,常用的有:LVS、nginx、haproxy。

LVS是基于四层的负载均衡,不支持复杂特性的负载均衡,转发效率比7层略高

nginx、haproxy都是七层的负载均衡,可以根据特性进行负载均衡,比较灵活。

这里主要说说LVS的原理与配置方法,

LVS原理其实就是利用iptables的INPUT链,侦听在INPUT链,拦截访问集群服务的数据包,将进入数据包的包头进行更改,不同类型更改包头的方式也不一样,转发给后端的RS,最后RS处理请求后在转发给用户。

LVS:linux virtual server,lvs与iptable不能同时使用

LVS类型:

NAT: 地址转换  跟DNAT原理相同,多目标

DR: 直接路由

TUN: 隧道

LVS的调度方法:

有10种,分别如下:

固定调度,也叫静态调度,有四种:

rr: 轮叫,轮询

wrr: Weight, 加权

sh: source hash, 源地址hash

dh:目标地址hash

动态调度方法,有六种:

lc: 最少连接

active*256+inactive

谁的小,挑谁

wlc: 加权最少连接

(active*256+inactive)/weight

sed: 最短期望延迟

(active+1)*256/weight

nq: never queue

LBLC: 基于本地的最少连接

LBLCR: 基于本地的带复制功能的最少连接

默认的调度方法是wlc

好了,具体LVS工作流程可以Google,有非常详细的文档,选用最常用的DR模式配置,简单的架构图如下:案例用于BBS论坛

Director配置脚本如下:

#!/bin/bash
#
# LVS script for VS/DR
# chkconfig: - 90 10
. /etc/rc.d/init.d/functions
#

VIP=192.168.8.230
DIP=192.168.8.226
RIP1=192.168.8.224
RIP2=192.168.8.225
PORT=80
RSWEIGHT1=2
RSWEIGHT2=5

#
case "$1" in
start)
	/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
	/sbin/route add -host $VIP dev eth0:0

# Since this is the Director we must be able to forward packets
	echo 1 > /proc/sys/net/ipv4/ip_forward

# Clear all iptables rules.
	/sbin/iptables -F

# Reset iptables counters.
	/sbin/iptables -Z

# Clear all ipvsadm rules/services.
	/sbin/ipvsadm -C

# Add an IP virtual service for VIP 192.168.8.230 port 80
# In this recipe, we will use the round_robin scheduling method.
# In production, however, you should use a weighted, dynamic scheduling method.
	/sbin/ipvsadm -A -t $VIP:80 -s wlc

# Now direct packets for this VIP to
# The real server IP(RIP) inside the cluster
	/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w $RSWEIGHT1
	/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w $RSWEIGHT2

	/bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;;

stop)

# Stop forwarding Packets
	echo 0 > /proc/sys/net/ipv4/ip_forward

# Reset ipvsadm
	/sbin/ipvsadm -C

# Bring down the VIP interface
	/sbin/route del $VIP
	/sbin/ifconfig eth0:0 down

	/bin/rm -f /var/lock/subsys/ipvsadm

	echo "ipvs is stopped..."
;;

status)
	if [ ! -e /var/lock/subsys/ipvsadm ];then
		echo "ipvsadm is stooppd ..."
	else
		echo "ipvsadm is running ...."
		ipvsadm -L -n
	fi
;;

*)
	echo "Usage: $0 {start|stop|status]"
;;
esac

后端RS的配置脚本如下:

#!/bin/bash
#
# Scrip to start LVS DR real server.
# chkconfig: - 90 10
# description: LVS DR real server

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

VIP=192.168.8.230

host=`/bin/hostname`

case "$1" in
start)
	# Start LVS-DR real server on this machine.
	/sbin/ifconfig lo down
	/sbin/ifconfig lo up
	echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
	echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
	echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

	/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
	/sbin/route add -host $VIP dev lo:0
;;

stop)
	# Stop LVS-DR real server loopback devuce(s).
	/sbin/ifconfig lo:0 down
	echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;

status)

	# Status of LVS-DR real server.
	islothere=`/sbin/ifconfig "lo:0" | grep -i $VIP`
	isrothere=`netstat -rn | grep -i "lo" | grep -i $VIP`
	if [ ! "$islothere" -o ! "$isrothere" ];then
		# Either the route or the lo:0 device
		# not found.
		echo "LVS-DR real server Stopped."
	else
		echo "LVS-DR real server running."
	fi
;;
*)
		# Invalid entry.
		echo "$0: Usage: $0 {start|status|stop}"
		exit 1

;;
esac

分别启动Director和RS上面的ipvsadm服务,然后需要写LVS的后端健康监测脚本,在Director上面运行脚本如下:

#!/bin/bash
# Userd by LVS service Status Check.

VIP=192.168.8.230
CPORT=80
FAIL_BACK=127.0.0.1
RS=("192.168.8.224" "192.168.8.225")
declare -a RSSTATUS
RW=("2" "1")
RPORT=80
TYPE=g
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log

addrs(){
	ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
	[ $? -eq 0 ] && return 0 || return 1

}

delrs(){
	ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
	[ $? -eq 0 ] && return 0 || return 1

}

checkrs(){
	local I=1
	while [ $I -le $CHKLOOP ]; do
	if curl --connect-timeout 1 http://$1 &> /dev/null; then
		return 0
	fi
	let I++
	done
	return 1
}

initstatus(){
	local I
	local COUNT=0;
	for I in ${RS[*]}; do
		if ipvsadm -L -n | grep "$I:$RPORT" &> /dev/null ; then
			RSSTATUS[$COUNT]=1
		else
			RSSTATUS[$COUNT]=0
		fi
	let COUNT++
	done

}

initstatus
while :; do
	let COUNT=0
	for I in ${RS[*]}; do
		if checkrs $I; then
			if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
				addrs $I ${RW[$COUNT]}
				[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +‘%F %H:%M:%S‘`, $I is back." >> $LOG
			fi
		else
			if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
				delrs $I
				[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +‘%F %H:%M:%S‘`, $I is gone." >> $LOG
			fi
		fi
		let COUNT++
	done
	sleep 5
done

这样LVS基本就配置完成了,BBS存在用户session的问题,虽然有很多种解决方法,这里如果只用lvs来解决的话,就要用到LVS的持久连接了,配置如下:

ipvsadm -E -t 192.168.8.230:80 -s wlc -p 3600

这样用户访问后端一台RS在3600s内都只会访问这一台RS,可以发现这样做会破坏LB的效果,不过可以解决用户session的问题。

简单说说rsync+inotify的配置方法,用于同步BBS的网页文件

rsync就不多说了,在每台RS上面安装rsync然后配置rsync,并开启rsync服务,Director上安装inotify后,侦听脚本如下:

#!/bin/bash
# lixiang by created, 2014/12/31
# used rsync web data

src=/home/www/
des1=web
des2=web
host1=192.168.8.224
host2=192.168.8.225
user1=root
user2=root
/usr/local/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -emodify,delete,create,attrib $src | while read file
do
/usr/bin/rsync -avrP --delete --ignore-errors --progress $src [email protected]$host1::$des1
/usr/bin/rsync -avrP --delete --ignore-errors --progress $src [email protected]$host2::$des2
echo "${file} was rsynced" >> /var/log/rsync.log 2>&1
done

写了个monitor脚本,监控inotify进程,写在crontab中5分钟运行一次,如下:

#!/bin/bash
# used by monitor inotify Process.

ps -lef |pgrep inotify &> /dev/null
if [ $? -eq 0 ]; then
echo "inotify is running...."
else
/bin/sh /root/inotify.sh &> /dev/null &
echo "inotify already running..."
fi

NFS配置就不多说了,注意Director上面要关闭iptables,后端RS挂载用户上传目录即可,记得要写入fstab中。

共享mysql将BBS应用的mysql指向一台mysql服务器即可

双线的配置方法:

目前很多服务器都是双线的,为了更好的提供用户体验,对应lvs的配置也很简单,只需要配置2个实例即可:联通配置一个VIP、电信配置一个VIP,对应用2个RS状态健康监测脚本。

这样简单的LB集群就搭建完毕了,其实还存在一个问题:Director存在单点问题,下次在补充。。

时间: 2024-08-02 09:19:07

LVS/DR模式实战的相关文章

lVS DR模式对于后端真实服务器禁止arp广播回应设置

部署LVS-DR模式的时候,我们需要对后端realserver设置的vip禁止ARP广播回应,后端realserver服务器可能是linux或者windows (一).对于realserver 是linux的系统 ,给后端服务器配置vip的方法 真实服务器(real server)配置 ip配置 1)ip:10.0.0.11/16 gw:10.0.0.139 vip:172.16.10.100 # ifconfig lo:0 172.16.10.100/32 broadcast 172.16.1

LVS DR模式 负载均衡服务搭建

LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层,且由内核实现负载转发,效率要比nginx高.     LVS负载均衡包含三种模式: 1. NAT模式(类似路由器,实现外网内网地址映射,负载均衡服务器修改请求包的源以及目的MAC地址和IP地址,发送给实际服务器:负载均衡服务器,修改响应包的源以及目的MAC地址和IP地址,发送给客户端.请求和响应报

CentOS下LVS DR模式负载均衡配置详解

一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Master Director) 对外提供服务的VIP为192.168.1.180 192.168.1.114 LVS从调度器(Backup Director) 平时可以作为RS(真实服务器使用) 192.168.1.104 RS1(真实服务器)   192.168.1.103 RS2(真实服务器)  

LVS集群的基本原理、LVS/NAT模式的配置、LVS/DR模式的配置、编写自动脚本检查LVS上realserver健康性

Linux 虚拟服务器(LVS)由章文嵩在国防科技大学就读博士期间创建利用LVS可以实现高可用的.可伸缩的Web.Mail.Cache和Media等网络服务,已经被集成到linux内核里了. 1.什么是集群? 使用一组服务器提供相同的服务2.使用集群的目的? 增强可靠性   降低成本   提高可扩展性   提高性能3.集群分类? HPC 高性能计算集群    (气象   航天   航空)    LB    负载均衡集群 (平均地分摊处理)    * LVS    hproxy HA    高可用

负载均衡之LVS/DR模式

和NAT模式不同,DR的负载均衡调度器工作在网络七层协议中的数据链路层,也就是第二层.它通过修改数据包的目标MAC地址,将数据包转发到实际应用服务器上,最重要的是,实际服务器的响应数据包将直接返回给用户端,而不需要经过负载调度器 1.LVS.DR简介 LVS 是Linux Virtual Server的简称,在实际环境中经常作为B/S结构的网络应用中的负载均衡器来使用,工作在7层网络模型中的,网络层,也就是通常说的IP层,由于数据的处理是在Linux内核态完成的,所以相对反向代理服务器来说,性能

一个公网地址部署LVS/DR模式

http://blog.chinaunix.net/uid-7411781-id-3436142.html 网上看了很多关于LVS的文章,在选取2种模式LVS/DR和LVS/NAT,看到很多人的观点都认为DR模型中必须要使用多个公网地址,既DIP,VIP,RIP必须在同一网段内 刚开始我的想法也是如此,所知道的唯一的解决方案就是在LVS集群之前再加一台路由器,用路由器做静态NAT转换,后端的LVS集群则使用DR 模式.不过这样一来就比较耗成本,要有一台路由器专门负责NAT的转换工作,而且压力都转

LVS DR模式 RealServer 为 Windows客户端配置

LVS   DR模式  Windows 2000,Windows2003客户端配置 控制面板-添加硬件-选"是,我已经连接了此设备"点击下一步-在列表中选择添加新的硬件设备-选"安 装我充从手动..." -接下来的列表中选择"Microsoft loopback adapter " 添加完成后在"网上邻居"右键 设置Microsoft loopback adapter IP地址,子网掩码要设置成VIP所对应的子网掩码  (不能

LVS DR模式搭建,keepalived + lvs

笔记内容: 18.11 LVS DR模式搭建 18.12 keepalived lvs 笔记日期:2017-11-13 18.11 LVS DR模式搭建 在实际生产环境中DR模式是用得最多的,NAT模式都用得比较少,因为NAT有一个瓶颈,服务器少还行,一旦服务器多的话,就不行了.所以DR模式才是重点,这一章节介绍如何搭建DR模式. 准备工作: 准备三台机器,一台作为分发器(dir),其他两台作为Real Server.三台机器都可以使用同一网段的IP,与NAT模式不同的是,三台机器都需要绑定一个

配置LVS/DR模式的LB集群

集群与存储 Day2 配置LVS/DR模式的LB集群1 配置网站服务器 51/521.1 配置VIP地址[[email protected] ~]# ifconfig lo:1 192.168.4.252/32[[email protected] ~]# ifconfig lo:1 1.2 修改网络接口运行参数/proc/sys/net/ipv4/conf[[email protected] conf]# echo 1 > lo/arp_ignore [[email protected] con