通过LVS(直接路由方式)+Keepalived实现高可用负载均衡方案

本文详细介绍了一种基于LVS的直接路由方式(DR)负载均衡的部署过程,包括环境搭建、nginx安装、IP别名及ARP广播处理、keepalived配置等关键步骤,并提供了测试方法验证负载均衡与高可用性。

【伍哥原创】

环境和网络拓扑图:
用户机 192.168.1.30 windows系统
服务器 192.168.1.34 LVS(直接路由方式)的master机器,负载均衡
服务器 192.168.1.27 LVS(直接路由方式)的backup机器,但master挂机时接管负载均衡
服务器 192.168.1.101 real web server A,通过nginx提供http服务
服务器 192.168.1.102 real web server B,通过nginx提供http服务
虚拟IP 192.168.1.200,面向用户的服务IP

PS,如果没有这么多测试机器,可以把lvs-master和web-server-a合并,lvs-backup和web-server-b合并,配置稍微改一下,这样也是完全可以的。

1,LVS直接路由方式负载均衡的原理

LVS直接路由方式工作在数据链路层(第二层),它通过把数据包的MAC地址修改成后端实际服务器的MAC地址来实现负载的调度;实际服务器的响应 数据包直接返回到用户机,而不须经过负载调度服务器。这样做了以后,马上面临的一个问题是数据包的目标IP地址和后端实际服务器自己的IP地址不一致。这 时候就需要通过添加IP别名来处理,就是说把面向用户的服务IP作为别名添加到本地回环接口lo,这样做就可以让数据包认为自己来对了地方。另外,还必须 防止后端实际服务器响应针对IP别名的ARP广播。关于ARP详情大家可以自己google一下,简单来说就是为了获得某个IP对应的MAC地址而做广 播,而对应的那个IP的机器就会做出响应。

2,安装real web server
nginx的安装就不说了,可以参考伍哥前面的文章。接着跑一个shell脚本处理IP别名和ARP广播。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
 
# 命名为realserver.sh
LVS_VIP=192.168.1.200   
. /etc/rc .d /init .d /functions   
case "$1" in 
start) 
         ifconfig lo:0 $LVS_VIP netmask 255.255.255.255 broadcast $LVS_VIP 
         /sbin/route add -host $LVS_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 "Real Server Start OK"         
         ;; 
stop) 
         ifconfig lo:0 down 
         route del $LVS_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 
         echo "Real Server Stoped"
         ;; 
         *) 
         echo "Usage: $0 {start|stop}"
         exit 1  
esac   
exit 0

接着启动nginx和realserver

1
2
/usr/local/nginx/sbin/nginx #伍哥的nginx是编译安装的,监听80端口
sh realserver.sh start

3,安装负载调度服务器
分两步来,先安装好ipvsadm,再安装keepalived。

安装好ipvsadm

1
2
3
4
5
6
7
8
ntpdate 210.72.145.44 #校对一下时间
yum -y install libnl* popt*
ln -s /usr/src/kernels/2 .6.32-220.23.1.el6.i686/ /usr/src/linux
cd /usr/src
wget http: //www .linuxvirtualserver.org /software/kernel-2 .6 /ipvsadm-1 .26. tar .gz
tar zxf ipvsadm-1.26. tar .gz
cd ipvsadm-1.26
make && make install

安装keepalived (这时候keepalived可以包含lvs的功能了)

1
2
3
4
5
6
7
8
9
10
11
cd /usr/local/src
wget http: //www .keepalived.org /software/keepalived-1 .2.2. tar .gz
tar zxf keepalived-1.2.2. tar .gz
cd keepalived-1.2.2
. /configure --prefix= /usr/local/keepalived
make && make install
cd /usr/local/keepalived
cp sbin /keepalived /usr/sbin/
cp etc /sysconfig/keepalived /etc/sysconfig/
cp etc /rc .d /init .d /keepalived /etc/init .d/
mkdir /etc/keepalived #配置文件的目录

配置LVS-DR-MASTER服务器的keepalived:/ete/keepalived/keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
! Configuration File for keepalived
global_defs {
     router_id LVS_MASTER
}
vrrp_instance VI_1 {
     state MASTER #备机器改为BACKUP
     interface eth0
     virtual_router_id 51
     priority 100 #备机器改为小于100,比如80
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }  
     virtual_ipaddress {
         192.168.1.200
     }  
}
virtual_server 192.168.1.200 80 {
     delay_loop 6
     lb_algo wrr
     lb_kind DR
     nat_mask 255.255.255.0
     persistence_timeout 50
     protocol TCP
     real_server 192.168.1.101 80 {  
         weight 3  
         TCP_CHECK {  
         connect_timeout 1  
         nb_get_retry 3  
         connect_port 80 
         }  
     }  
     real_server 192.168.1.102 80 {  
         weight 1  
         TCP_CHECK {  
         connect_timeout 1
         nb_get_retry 3
         connect_port 80
         }
     }
}

接着配置LVS-DR-BACKUP服务器的keepalived:/ete/keepalived/keepalived.conf:

1
2
3
4
...
state MASTER #备机器改为BACKUP
...
priority 100 #备机器改为小于100,比如80

4,测试

4.1 测试负载均衡,通过192.168.1.200访问

4.2 测试高可用,把服务器 192.168.1.34 LVS(直接路由方式)的master机器上的keepalived停掉

4.3 测试高可用,把服务器 192.168.1.101 real web server A的nginx停掉

转载于:https://my.oschina.net/alexwu/blog/71171

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值