去年看见淘宝章博士的PPT里面讲过淘宝的CDN架构,觉得简单使用。
我也一直觉得haproxy比较简洁的,另外画了一个图,可以给应用做好负载均衡。不过我这个图里两个LVS只是一主一倍,也可以作为相互备份,这样更能提高利用率。
这个基本是照着淘宝的这个架构搞的。但是其实里面有些细节地方可以仔细说一下。这个实现过程是
最最外面做LVS的机器上绑定一堆公网的IP。假如是10.10.114.2 .....10.10.114.254 (这个只是作为解说)。
做LVS负载均衡的机器上另外一个网卡绑定一个内部的IP,假如分别为192.168.1.2和192.168.1.3.
那么配置 haproxy的几个机器上每个机器有一个192.168.1.X的IP外,还需要在每个机器的回环地址上绑定所有VIP(10.10.114.x)的。这样可以直接使用DR模式来对haproxy做第一级的负载均衡,而且对于安装haproxy的服务器上,因为在回环地址上绑定了这么多的ip(设置好arp抑制后其实只有这些机器自己知道自己有这些VIP),所以在配置haproxy时也非常方便了。
当外部请求进来时,LVS把请求转发给Haproxy。由于haproxy上监听的是绑在lo上的VIP,所以可以根据对方的目标IP来选择后端的机器。
这样的话所有的haproxy都可以同时工作,lvs对他们也可以做好健康检测。对于后端应用,我们也可以充分利用haproxy来做好健康检测。
我也一直觉得haproxy比较简洁的,另外画了一个图,可以给应用做好负载均衡。不过我这个图里两个LVS只是一主一倍,也可以作为相互备份,这样更能提高利用率。
这个基本是照着淘宝的这个架构搞的。但是其实里面有些细节地方可以仔细说一下。这个实现过程是
最最外面做LVS的机器上绑定一堆公网的IP。假如是10.10.114.2 .....10.10.114.254 (这个只是作为解说)。
做LVS负载均衡的机器上另外一个网卡绑定一个内部的IP,假如分别为192.168.1.2和192.168.1.3.
- virtual_server 10.10.114.2 80 {
- delay_loop 3
- lb_algo wlc
- lb_kind DR
- nat_mask 255.255.255.0
- persistence_timeout 50
- protocol TCP
- real_server 192.168.1.4 80 {
- weight 100
- TCP_CHECK {
- connect_port 80
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 10
- }
- }
- real_server 192.168.1.5 80 {
- weight 100
- TCP_CHECK {
- connect_port 80
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 10
- }
- }
- virtual_server 10.10.114.3 80 {
- delay_loop 3
- lb_algo wlc
- lb_kind DR
- nat_mask 255.255.255.0
- persistence_timeout 50
- protocol TCP
- real_server 192.168.1.4 80 {
- weight 100
- TCP_CHECK {
- connect_port 80
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 10
- }
- }
- real_server 192.168.1.5 80 {
- weight 100
- TCP_CHECK {
- connect_port 80
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 10
- }
- }
那么配置 haproxy的几个机器上每个机器有一个192.168.1.X的IP外,还需要在每个机器的回环地址上绑定所有VIP(10.10.114.x)的。这样可以直接使用DR模式来对haproxy做第一级的负载均衡,而且对于安装haproxy的服务器上,因为在回环地址上绑定了这么多的ip(设置好arp抑制后其实只有这些机器自己知道自己有这些VIP),所以在配置haproxy时也非常方便了。
当外部请求进来时,LVS把请求转发给Haproxy。由于haproxy上监听的是绑在lo上的VIP,所以可以根据对方的目标IP来选择后端的机器。
- frontend server1
- mode tcp
- bind 10.10.114.2:80
- default_backend real_server1
- backend real_server1
- mode tcp
- balance roundrobin
- server A 192.168.x.2:80 weight 1
- server B 192.168.x.3:80 weight 1
- frontend server2
mode http
bind 10.10.114.3:80
default_backend real_server2
backend real_server2
mode http
balance roundrobin
server A 192.168.x.4:80 weight 1
server B 192.168.x.5:80 weight 1 - frontend server3
mode http
bind 10.10.114.4:80
default_backend real_server3
backend real_server3
mode http
balance roundrobin
server A 192.168.x.6:80 weight 1
server B 192.168.x.7:80 weight 1