CDN架构实践:LVS 和keepalived 配置实例

0x01 初衷

最近在研究分布式的东西,就拿CDN来练手了(基于《CDN技术详解》),所以就萌生了自己建个CDN集群的想法,当然都是开源的内容,只是个人实践,高手请指教。后续还会增加GSLB、分布式文件系统和网络存储。 下面是我实践的一些记录及过程。


0x02 配置

实际中,我同时开了4个虚拟机运行,其中两个是LVS+Keepalived,两个是server,下面是借鉴的拓扑图

至于如何安装LVS和keepalivde,此文就略过了。

下面是LVS master的 keepalived配置

!Configuration File for keepalived
global_defs {
	notification_email {
		xxxxxx@qq.com
	}
	notification_email_from xxxxxx@qq.com
	smtp_server smtp.qq.com
	#smtp_connect_timeout 30
	#router_id LVS_DEVEL
	router_id LVS_DEVEL_MASTER
}

#VIP1
vrrp_instance VI_1 {
	state MASTER
	interface eth0
	lvs_sync_daemon_interface eth0
	virtual_router_id 51
	priority 200
	advert_int 5
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	
	virtual_ipaddress {
		10.10.10.200
	}
}
virtual_server 10.10.10.200 80 {
	delay_loop 6
	lb_algo wlc
	lb_kind DR
	persistence_timeout 60
	protocol TCP
	
	real_server 10.10.10.103 80 {
		weight 100
		TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	}

	real_server 10.10.10.104 80 {
		weight 100
		TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	}
}

这是相关的启动脚本

#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward

IPVSADM='/sbin/ipvsadm'

VIP=10.10.10.200
RS1=10.10.10.103
RS2=10.10.10.104

ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev eth0:1

$IPVSADM -C
$IPVSADM -A -t $VIP:80 -s rr
$IPVSADM -a -t $VIP:80 -r $RS1:80 -g -w 1
$IPVSADM -a -t $VIP:80 -r $RS2:80 -g -w 1
$IPVSADM -L -n
它们都是开机启动的。

LVS backup的配置文件就不写了,主要它们的不同点就是router_id 和 priority 一定要不同。

对于RS的配置如下:

#!/bin/bash 
#description: Config realserver

SNS_VIP=10.10.10.200

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

case "$1" in
start)
	/sbin/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)
	/sbin/ifconfig lo:0 down
	/sbin/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
	sysctl -p > /dev/null 2>&1
	echo "RealServer Start OK"

	;;
*)
	echo "Usage: $0 {start|stop}"
	exit 1
esac

exit 0


0x03 问题

在这个解决的过程中,遇到了一个问题就是脑裂, LVS backup进入master状态后,不能切回backup(master起来之后),后来才发现是centos默认启用了iptables规则,导致master和backup"心跳“检测失败。其余的小问题,略过......

另外,抓包解决的过程中,发现master和backup一直都在给后端服务器端口80发送报文,给分析解决问题加了个”窗户纸“,其实这是后端服务器健康检测的报文,分析问题的时候不要被误导了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值