Trustix 3.0.5 boot on software raid1故障恢复实验 用cacti监视squid的运行信息
八月 09

这两天调试了一下squid 2.6的wccp透明代理,颇走了些弯路,先把调试的几个关键点纪录下来,至于详细的笔记,希望最近我不会再那么懒了,争取这两个礼拜能写出来吧。

推荐的软硬件环境:

  • cisco 6509交换机的IOS版本高于12.2(18)SXD4
  • 采用2.6.10以上的linux kernel+squid 2.6的最新STABLE发行

以下是对这个推荐软硬环境的详细解释:

  • 首先,cisco 6509交换机上的super 720引擎是支持wccp的

    这个可以参看cisco的Catalyst 6500 Series Software Configuration Guide, 8.6中wccp的相关章节

    Release 12.2(17d)SXB1 and later releases support WCCP on Supervisor Engine 2.

    Release 12.2(18)SXD1 and later releases support WCCP on Supervisor Engine 720.

    不过还需要注意的是这段文字:

    Configuring WCCPv2 on a Supervisor Engine 720 causes high CPU utilization. This problem is resolved in Release 12.2(18)SXD4.

    所以,只要确认你的6509上的super 720引擎用的IOS版本高于12.2(18)SXD4,你就可以放心大胆的使用6509上的wccp的功能。

    之所以在IOS支持的这个问题上唠唠叨叨了这么多,是因为之前给我们公司作系统集成的SI拿了本《Catalyst 6500 Series Switch Cisco IOS Software Configuration Guide:Release 12.2(17d)SXB1》跟我信誓旦旦的说没法在super 720上开启wccp.........

  • linux 2.6.9-rc3 之后的kernel的ip_gre模块就已经加入对wccp的支持了,而且squid 2.6在kernel 2.6上开启epoll不需再对kernel打patch了。

    所以,如果要使用linux作为squid运作的系统平台的话,建议采用2.6.10以上的kernel+squid 2.6的最新STABLE发行(当前是STABLE 14)----这样,比较不麻烦。

调试过程中的注意点:

  • squid 2.6的透明代理配置与squid 2.5有很大的简化,请大家注意一下。以下这么一句就搞定了透明代理:
    1. http_port 3128 transparent
  • 其实单就squid而言,与wccp的配合除了透明代理的设置之外,就是wccp开头几个相关选项了。就如今的硬件环境,大部分用的都是wccp v2了,所以有可能用到的就是wccp2开头的这几个选项了:
    1. wccp2_router
    2. wccp2_rebuild_wait
    3. wccp2_forwarding_method
    4. wccp2_return_method
    5. wccp2_assignment_method
    6. wccp2_service
    7. wccp2_service_info
    8. wccp2_weight
    9. wccp2_address

    简单的说,真正需要配置的就这么两个:

    1. wccp2_router
    2. wccp2_service

    而最棘手的配置就是wccp2_router需要配置的是三层交换上的哪个router地址了:很不幸的,大部分的三层交换机上都配置N多的网关地址......
    在这个问题上我耗了不少的时间,有很多参考资料都是告诉我们在交换机上用 show ip wccp看到的Router Identifier:显示的那个地址,就我的实践来看,是不一定的。

    最方便的方法还是使用tcpdump在cache服务器上监听2048端口的通讯状况,在启动了配置了wccp2的squid之后,使用tcpdump监听:

    1. tcpdump -i eth0 port 2048

    看到的往cache服务器的udp 2048端口发送信息的网关地址就是我们要配置的wccp2_router地址了

  • 在IOS上监视wccp2的 Cache Engines注册状态不要太心急,需要小等个半分钟左右,当然了,如果你实在是心急的话,开wccp的events debug直接看log输出信息吧:
    在IOS的特权模式输入

    1. debug ip wccp events
    2. term mon

    看到如下的信息就说明squid在交换机上注册成功了:

    1. Aug  9 04:39:54: WCCP-EVNT:wccp_update_assignment_status: enter
    2. Aug  9 04:39:54: WCCP-EVNT:wccp_update_assignment_status: exit
    3. Aug  9 04:39:54: WCCP-EVNT:wccp_validate_wc_assignments: enter
    4. Aug  9 04:39:54: WCCP-EVNT:wccp_validate_wc_assignments: not mask assignment, exit
    5. Aug  9 04:39:54: WCCP-EVNT: GRE adjacency added for 你的squid服务器地址
    6. Aug  9 04:39:54: %WCCP-5-SERVICEFOUND: Service web-cache acquired on Web Cache 10.18.150.104
    7. Aug  9 04:39:54: WCCP-EVNT:wccp_change_router_view: S00
    8. Aug  9 04:39:54: WCCP-EVNT:wccp_change_router_view: deallocate rtr_view (24 bytes)
    9. Aug  9 04:39:54: WCCP-EVNT:wccp_change_router_view: allocate hash rtr_view (1560 bytes)
    10. Aug  9 04:39:54: WCCP-EVNT:wccp_change_router_view: rtr_view_size set to 72 bytes
    11. Aug  9 04:39:54: WCCP-EVNT:S00: Built new router view: 1 routers, 1 usable web caches, change # 00000008
  • 记得在cache服务器上关闭rp_filter
  • 记得在cache服务器上把到你建立的到wccp2_router的gre通道上的80端口的数据用iptables转发到squid端口上。

    1. iptables -t nat -A PREROUTING -i 到wccp2_router的gre通道 -p tcp --dport 80 -j REDIRECT --to-port 3128

如此而已,我之前把这东西看得太神秘了。

Leave a Reply