注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

使用ucarp实现应用负载均衡的思路  

2014-07-03 16:23:56|  分类: 负载均衡haproxy |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

什么是CARP?

CARP(Common Address Redundancy Protocol) 是一个实现系统冗余的协议, 它主要的功能有以下两个方面:

(1)通过用多台计算机组成一个虚拟网络接口来实现系统冗余;即让一组主机(冗余组)共享一个IP地址, 在其中某台主机出现故障时,冗余组内的另一台主机可以马上接替它的工作;

(2)在系统间实现负载均衡,提高系统对网络数据的处理能力。


原理实施分析:

    CARP配置可以通过 sysctlifconfig命令完成。

    有三个sysctl相关的变量:即影响ucarp实现网络负载均衡的控制参数。

(1)net.inet.carp.allow

值为01(默认)。是否允许该主机处理CARP数据包。置1允许处理CARP数据包;


(2)net.inet.carp.log

定义了是否记录CARP错误。有效范围是07, syslog的优先权一致, 默认值是2 (也就是只记录CARP状态变化);


(3)net.inet.carp.preempt

值为0(默认)1或。

0时 , 当接收到其它主力机的广告后,这台主机不会尝试成为主力机。

1时, 如果它的广告频率高于目前的主力机,它会尝试成为主力机;则会在一个接口出现故障时由其它接口接替其工作。


CARP仍使用ifconfig命令配置,其主要参数有:

(1)carpNcarp虚拟接口的名称;

(2)vhid,虚拟主机编号,用来分辨冗余组和网络上的其它节点。

   根据CARP包头定义和源码文件/src/sbin/ifconfig/ifconfig.c3573vhid = strtonum(val, 1, 255, &errmsg)分析,vhid为整数且1≤vhid≤255

(3)carpdev,指定属于此冗余组的物理接口。默认情况下, CARP使用处于同一子网的物理接口作为虚拟接口;

(4)pass,与冗余组内其它启用了CARP的主机通讯时使用的密码。在所有成员的设置里这个密码必须是一致的;

(5)advbaseadvskew,这些值决定两个CARP广播之间的时间间隔。

   说明:间隔(以秒计)由公式(advbase + (advskew / 256)) 计算出来; 加大advbase 会减少网络通信,但是会推迟选举出新的主力机。更小的advskew值使主机广告的更频繁, 增加了其成为主力机的可能性。


       : 源码分析:

分析源码文件/sys/netinet/ip_carp.h88行:

#define CARP_DFLTINTV 1

定义advbase默认值为1,即1≤advbase≤255

根据carp包头定义, 0≤advskew≤255


    (6)balancing,设置负载均衡模式;

    ucarp负载均衡的几种负载分发算法:有效的模式有 arp, ip, ip-stealth ip-unicast

    1)ARP balancing的工作原理是将一个哈希函数应用到发送ARP请求的源MAC地址来来验证哪个vhid应该处理这个请求。这个ARP请求将由该VHIDca接口是主力的那台主机来回应。

    2)IP负载均衡的工作原理和ARP负载均衡很类似, 但是,它是使用IP数据包的源地址和目标地址的哈希来验证哪个vhid应该接受这个数据包。

    两种负载均衡方式的选择和取舍取决于系统网络环境: ARP均衡只能为本地网络的客户端工作,并不能跨越路由器实现通讯均衡, 因为路由的通讯总是将路由器的MAC地址作为其源地址。因此, 如果客户端在远程网络上, IP均衡是唯一的选择。

(7)carpnodes,用逗号分隔的vhid:advskew列表,实际上定义了在配置的CARP节点上如何均衡负载;

:源码分析:

分析源码文件/src/sbin/ifconfig.c中第3777行:

if (vhid >= 255)

errx(1, "vhid %u: value too large", vhid);

if (advskew >= 255)

errx(1, "advskew %u: value too large", advskew);

因此:两参数的范围:1≤vhid≤254, 1≤advskew≤254


(8)carppeer,允许你指定其它的CARP对的IP地址, 而不是使用默认的组播组;

(9)state,强制一个 carp接口进入一个指定的状态 (init, backup or master);


基于bsd系统的主要配置

(1)fw1(fw2相似)的主要配置,编辑/etc/rc.local

#启用网卡em0em1em2

ifconfig em0 up

ifconfig em1 up

ifconfig em2 up

注:linux系统下也实用。

#允许内核对ip包转发

sysctl net.inet.ip.forwarding=1

     注:linux系统下也实用。

#配置em1ip地址为10.10.10.1,子网掩码为255.255.255.252

ifconfig em1 10.10.10.1 netmask 255.255.255.252

      注:linux系统下可以使用ip addr ...命令修改。

#建立pfsync0伪接口,利用网卡em1ip10.10.10.2的主机同步pf状态表,

其测试状态如图2。


#fw2中,ip地址应改为10.10.10.1

ifconfig pfsync0 syncpeer 10.10.10.2 syncdev em1

ifconfig pfsync0 up

#CARP

sysctl net.inet.carp.allow=1

sysctl net.inet.carp.preempt=1

#创建carp1伪接口

ifconfig carp1 create

ifconfig carp1 up

#carp1指定物理接口em0,并配置ip地址192.168.254.100

ifconfig carp1 carpdev em0 192.168.254.100 netmask 255.255.255.0

#carp1上建两个虚拟主机,vhid12,并指定advskew分别为0128,负载均衡采用balancing ip方式。在fw2上应advskew分别为1280

其测试状态如图3

   
ifconfig carp1 pass lanpass carpnodes 1:0,2:128 balancing ip

#创建carp2伪接口

ifconfig carp2 create

ifconfig carp2 up

#carp2指定物理接口em0,并配置ip地址172.16.0.100

ifconfig carp2 carpdev em2 172.16.0.100 netmask 255.255.255.0

#carp2上建两个虚拟主机,vhid34,并指定advskew分别为0128,负载均衡采用balancing ip方式。在fw2上应advskew分别为1280

其测试状态如图4


ifconfig carp2 pass wanpass carpnodes 3:0,4:128 balancing ip

#配置相关路由,即指定外网网关和内网网关地址

route add default 192.168.254.100

route add 172.16.0.0/24 172.16.0.100

pf.conf的配置中允许以上新建各接口数据包通过。


使用ucarp实现应用负载均衡的思路 - itoedr - itoedr的it学苑

2pfsync0接口工作状态图


使用ucarp实现应用负载均衡的思路 - itoedr - itoedr的it学苑

3carp1接口工作状态图

使用ucarp实现应用负载均衡的思路 - itoedr - itoedr的it学苑
 

4carp2接口工作状态图


结束语

将高可用、高性能的负载均衡技术和网络防火墙技术有机结合设计实现防火墙集群, 能有效地解决网络带宽的瓶颈和传统防火墙检测效率低下的问题. 本文利用CARP协议实现了防火墙之间的负载均衡,提高了防火墙的可用性有效性和高效性. 该防火墙集群基于bsd系统实现,如何在linux系统上实现,正在测试之中。

  评论这张
 
阅读(229)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017