Global Server Load Balancing: Part 1
In this two-part blog post, I will talk about the Global Server Load Balancing (GSLB) feature provided by the NetScaler.
In Part 1, let’s examine DNS name resolution process, as GSLB is DNS based load balancing. In Part 2, we will take a look at implementation details on the NetScaler.
Name Resolution Process
Recursive DNS Query
Let’s assume that a MAC is connected to a network and subsequently obtains an IP address and DNS server information via DHCP, as shown below.
Open up Chrome and browse to ‘http://www.google.com’.
The browser firstly looks up its built-in DNS cache, looking for an existing entry for hostname ‘www.google.com’.
Chrome’s built-in DNS cache can be viewed by entering ‘chrome://net-internals/#dns’ at the address bar.
If an existing entry exists and is not expired.
DNS ends. Whatever happened afterwards, is DNS irrelevant.
For demonstration purposes, assuming that an entry for ‘www.google.com’ didn’t exist in cache.
Chrome’s built-in DNS client (a separate DNS client to the one built into the OS), shown below, enabled by default, makes a recursive DNS query to the Upstream DNS server, resolving ‘www.google.com’
The following trace captures that DNS traffic.
The first packet sourced from 192.168.1.3 (Mac) and destined to 18.104.22.168 (Upstream DNS), is a recursive query, asking for associating IP for Address (A) Record ‘www.google.com’.
The second packet in the reverse direction, is a DNS response, containing associating IP addresses.
For a recursive query, the DNS server MUST either return the associating IP(s) for the A Record, or informing that the A Record does not exist.
There MUST NOT be any other forms of responses. E.g. I don’t know, ask someone else.
The above response is a valid DNS response, however, not valid in the context of answering a recursive DNS query.
The above concludes DNS resolution process between the Mac and its Upstream DNS server.
Iterative DNS Query
What happens at the Upstream DNS server upon receiving a recursive query from the Mac?