NetScaler Active-Active模式

NetScaler Active-Active模式

(此文档基于版本:NS9.3: Build 55.6 nc)

By ShingTan

Active-Active部署,除了减少downtime,最重要的是可以使所有NetScaler都发挥最大作用。在Active-Active部署模式中,所有的NetScaler设备上配置有相同的VIP与不同的权重值,因此一个特定的VIP在某一时刻只能有效活跃在一台设备上。

(注意:Active-Active这个特性只在NetScaler nCore版本中支持。)

这个有效的活跃VIP叫做master VIP,而相应的在其它NetScaler设备上的VIP叫做backup VIP。如果master VIP失效,拥有最高权重的backup VIP将接管并成为master VIP。所有在Active-Active部署模式中的NetScaler设备使用虚拟路由冗余协议(VRRP)定期广播它们的VIP与相应的权重值。

NetScaler设备在Active-Active模式下是可以独立配置的,因此没有NetScaler是空闲的。在这个模式下,不同的VIP集分别活跃在一台NetScaler上。例如,下图中,VIP1、VIP2、VIP3和VIP4都配置在设备NS1、NS2和NS3上。基于它们的权重,VIP1和VIP2活跃在NS1上,VIP3活跃在NS2上,而VIP4活跃在NS3上。如果,NS1失效,VIP1在NS3而VIP2在NS2上变为活跃的。

Active-Active拓扑图

上图中的NetScaler设备处理流量的过程如下:

  1. Client C1发送一个请求到VIP1。请求到达R1。
  2. R1没有关于VIP1的ARP条目,因此它针对VIP1广播一个ARP解析请求。
  3. VIP1在NS1上是活跃的,因此NS1回应有关VIP1的ARP解析请求,以VMAC1作为源MAC地址,VIP1作为源IP地址。
  4. SW1从ARP的响应包里学习到与VIP1相连的端口,并更新它的bridge table。
  5. R1更新有关VMAC1与VIP1的ARP条目。
  6. R1转发数据包到NS1上的VIP1。
  7. NS1上的负载均衡算法选择了S2,NS1使用它的SNIP或MIP与S2建立连接。
  8. S2响应NetScaler的SNIP或者MIP。
  9. NS1发送S2的响应到client。在这个响应包里,NS1插入VMAC地址作为源MAC地址,VIP1作为源IP地址。
  10. 若NS1失效,NetScaler设备使用VRRP协议选择具有最高权重值的VIP1。在这种情况下,VIP1在NS3上被激活,而以下2步将更新active-active配置。
  11. NS3广播VIP1的GARP信息。在这个信息里,VMAC1作为源MAC地址而VIP1作为源IP地址。
  12. SW1从GARP广播里学到VMAC1的新连接端口,更新它的bridge table,并发送后续的client请求到NS3上的VIP1。R1更新它的ARP表。

VIP的权重可以被health tracking修改。如果你启用health tracking,你必须确保preemption也被启用,因此,如果一个VIP的权重值较低,将被另一个VIP抢占成功。

在某些情况下,流量可能到达backup VIP。为了避免丢弃这类流量,在你创建一个active-active结构时可在每节点上启用sharing。或者你可以在全局中启用send to master选项。在一个节点中,如果sharing被启用,它将优先于send to master。

Health Tracking

基础权重值BP(范围1~255)通常决定了哪个VIP是master VIP,有效权重值EP也可以影响这个决策。

例如,如果在NS1上的一个VIP拥有一个101的权重值,而在NS2上相同的VIP拥有一个99的权重值,在NS1上的VIP是活跃的。然而,如果在NS1上有2个VS使用这个VIP,而它们中某一个VS变为DOWN,health tracking将减小NS1上VIP的EP。然后,VRRP将选择NS2上的VIP为有效VIP。

以下是health tracking修改EP的选项:

l  NONE. No tracking. EP = BP

l  ALL. If all virtual servers are UP, then EP = BP. Otherwise, EP = 0.

l  ONE. If at least one virtual server is UP, then EP = BP. Otherwise, EP = 0.

l  PROGRESSIVE. If ALL virtual servers are UP, then EP = BP. If ALL virtual servers are DOWN then EP = 0. Otherwise EP = BP (1 - K/N), where N is the total number of virtual servers associated with the VIP and K is the number of virtual servers that are down.

注意:如果你指定了除NONE以外的值,preemption一定要启用,由此,在master VIP降级期间,具有最高权重值的backup VIP才能抢占为活跃的。

Preemption

抢占模式默认是启用的,而通常情况下也应该启用。当然,在某些情况下,你也可能想disable它。Preemption是每VIP每节点设置的。

Preemption可能在以下情况下发生:

l  An active VIP goes down and a VIP with a lower priority takes its place. If the VIP with the higher priority comes back online, it preempts the currently active VIP.

l  Health tracking causes the priority of a backup VIP to become higher than that of the active VIP. The backup VIP then preempts the active VIP.

Sharing

如果流量到达backup VIP,流量将被丢弃,除非sharing选项在backup VIP上被启用。这个动作是每VIP每节点配置的,缺省是disabled。

在Active-Active拓扑图中,VIP1在NS1上活跃,VIP1在NS2和NS3上是backup的。在某些特定情况下,流量可能到达NS2的VIP1。如果在NS2上启用sharing,流量将被处理而不是被丢弃。

Configuring Active-Active Mode

部署active-active模式,在每台NetScaler设备上,你必须添加一个VMAC并且绑定VMAC到某个VIP。每台设备上给定的VIP都有相同的VMAC。例如,如果在设备上创建一个VIP 192.168.0.79,则一个virtual router ID也必须在每台NetScaler上创建并绑定到VIP 192.168.0.79上。当你把VMAC绑定到VIP,NetScaler将发送VRRP广播到每个绑定VIP的VLAN。VMAC可以被一台NetScaler上的不同VIP共享。

现在我们简单的搭建一个测试环境,参考下图:

添加VMAC

在active-active结构中添加VMAC,先要创建一个virtual router ID。再绑定VMAC到VIP,你需要把VMAC的vrID与VIP关联。

NS命令行下添加VMAC

在NetScaler命令行模式下,输入:

add vrID <value> -priority <value> -preemption (ENABLED|DISABLED) -sharing (ENABLED |DISABLED) -tracking (NONE|ONE|ALL|PROGRESSIVE)

例如:

add vrID 71 -priority 73 -sharing ENABLED -tracking ONE

注:命令行下,preemption缺省是启用的,但GUI界面缺省是未选中。

VMAC参数

vrID

The VRID that identifies the VMAC. Possible values: 1 - 255.

priority

The base priority of the VMAC. Range: 1 - 255. Default: 255.

tracking

The health tracking options for this VMAC. Possible values: NONE, ONE, ALL, PROGRESSIVE Default: NONE.

preemption

Make a backup VIP the master if its priority becomes higher than that of a master VIP that is bound to this VMAC. Possible values: ENABLED, DISABLED. Default: ENABLED.

sharing

Enable or disable sharing for this VMAC. Default: Disabled.

GUI下添加VMAC

在NS1上添加VMAC,

在NS2上添加VMAC,

NS命令行下绑定VMAC

在NS命令行下,输入:

set ns ip VIP <address> -vrid <value>

例如:

set ns ip 192.168.0.79 -vrid 71

GUI下绑定VMACVIP

在NS1上把vrID 71绑定到VIP 192.168.0.79,

在NS2上同样的把vrID 71绑定到VIP 192.168.0.79,

在关联vrID与VIP后,重新回到VMAC配置界面,我们可以看到:

在NS1上,

vrID 71为master,vrID 73为backup,与拓扑相符。

在NS2上,

vrID 71为backup,vrID 73为master,与拓扑相符。

配置Send to Master

通常,目的IP为VIP的流量到达有效VIP所在的NetScaler设备,因为VIP回应ARP解析请求,同时该设备的VMAC返回到上行的路由器。但是在某些情况下,如在上行路由器上配置了针对VIP子网的静态路由,而某个拓扑结构阻断了这个路由,流量可能会到达backup VIP所在的NetScaler设备。如果你想这台backup VIP设备转发数据包到master VIP设备,你需要启用send to master选项。这是单节点配置,缺省是disabled。

例如,在下图中,VIP1在NS1、NS2和NS3都有配置,在NS1上是活跃的。在某些情况下,VIP1的流量(NS1上有效)可能到达NS3上的VIP1。当NS3上的send to master选项被启用,NS3使用到NS1的路由条目通过NS2转发流量到NS1上(此为原文翻译,为何是通过NS2转发流量,而不是通过下行交换网络转发流量?)。

Active-Active模式下启用send to master

NS命令行下启用send to master

在NS命令行下,输入:

set vrIDParam -sendToMaster (ENABLED|DISABLED)

例如:

set vrIDParam -sendToMaster ENABLED

send to master参数

sendToMaster

Forward the packet to the master node if the VIP bound to the VMAC is in backup state and sharing is disabled.

Possible values: ENABLED, DISABLED. Default: DISABLED.

GUI下启用send to master

NetScaler Active-Active模式的更多相关文章

  1. 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式

    COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...

  2. Android开源库--ActiveAndroid(active record模式的ORM数据库框架)

    Github地址:https://github.com/pardom/ActiveAndroid 前言 我一般在Android开发中,几乎用不到SQLlite,因为一些小数据就直接使用Preferen ...

  3. Java多线程编程模式实战指南:Active Object模式(下)

    Active Object模式的评价与实现考量 Active Object模式通过将方法的调用与执行分离,实现了异步编程.有利于提高并发性,从而提高系统的吞吐率. Active Object模式还有个 ...

  4. Java多线程编程模式实战指南:Active Object模式(上)

    Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它 ...

  5. java Active Object模式(下)

    Active Object模式的评价与实现考量 Active Object模式通过将方法的调用与执行分离,实现了异步编程.有利于提高并发性,从而提高系统的吞吐率. Active Object模式还有个 ...

  6. java Active Object模式(上)

    Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它 ...

  7. Java多线程编程模式实战指南一:Active Object模式(下)

    Active Object模式的评价与实现考量 Active Object模式通过将方法的调用与执行分离,实现了异步编程.有利于提高并发性,从而提高系统的吞吐率. Active Object模式还有个 ...

  8. Java多线程编程模式实战指南一:Active Object模式(上)

    Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它 ...

  9. Java多线程编程模式实战指南(一):Active Object模式--转载

    本文由黄文海首次发布在infoq中文站上:http://www.infoq.com/cn/articles/Java-multithreaded-programming-mode-active-obj ...

  10. Zabbix Agent active主动模式监控

    zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下: 1.当被监控端到达一个量级的时候,Web操作很卡,容易出现502 2.图 ...

随机推荐

  1. Informatica 简单使用

    1. Informatica简介 ① Repository manager 主要用来维护资料库的目录,对象,建完对象可以创建demo的folder. ② Administration Console是 ...

  2. JSON格式自动解析遇到的调用方法问题.fromJson() ..readValue()

    所使用的API Store是 聚合数据 使用 手机归属地查询 功能 因百度的apistore.baidu.com 2016年12月开始至今天不接受新用户调取.聚合数据一个接口免费. 一.通过谷歌的go ...

  3. What is EJB

    What is EJB 0.什么是EJB? 答:EJB是用于构建企业应用程序模块托管的.服务器端组件架构.EJB技术加速并简化了开发基于Java技术的分布式.事务性.安全和便携的应用程序. 先看一下E ...

  4. Go HTTP模块处理流程简析

    Go语言提供完善的net/http包,用户使用起来非常方便简单,只需几行代码就可以搭建一个简易的Web服务,可以对Web路由.静态文件.cookie等数据进行操作. 一个使用http包建立的Web服务 ...

  5. LeetCode969. 煎饼排序

    问题:969. 煎饼排序 给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序.我们要执行零次或多次煎饼翻转(按顺序一次接 ...

  6. Laravel Nginx 除 `/` 外所有路由 404

    解决方法 在nginx配置添加以下设置: location / { try_files $uri $uri/ /index.php?$query_string; } 详见Laravel官方文档:htt ...

  7. 在intellij idea 里来回跳转查询方法

    在intellij idea 里来回跳转查询方法,在不知道快捷键的时候真是抓狂. 看到key map中的快捷键 后退back  ctrl +alt + ← 或者button4 click 前进forw ...

  8. 队列--数据结构与算法JavaScript描述(5)

    队列 Queue 概念 队列是一种列表,但队列只能在队尾插入元,在队首删除元素. 队列是一种先进先出的数据结构,用于存储按顺序排列的数据,被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等 ...

  9. 树&二叉树&哈夫曼树

    1.树 需要注意的两点:n(n>=0)表示结点的个数,m表示子树的个数 (1)n>0时,树的根节点是唯一的. (2)m>0时,子树的个数没有限制. 结点的度和树的度 (1)结点的度是 ...

  10. webstorm git提交不成功的

    git pull git pull origin master git pull origin master --allow-unrelated-histories