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发送报文,给分析解决问题加了个”窗户纸“,其实这是后端服务器健康检测的报文,分析问题的时候不要被误导了。