Browse Source

[3979] Added new chapter about lease reclamation to the User Guide.

Marcin Siodelski 9 years ago
parent
commit
74e140a3a8
3 changed files with 343 additions and 2 deletions
  1. 2 2
      doc/guide/Makefile.am
  2. 2 0
      doc/guide/kea-guide.xml
  3. 339 0
      doc/guide/lease-expiration.xml

+ 2 - 2
doc/guide/Makefile.am

@@ -6,8 +6,8 @@ dist_doc_DATA = $(DOCS)
 dist_html_DATA = $(HTMLDOCS) kea-guide.css
 
 DOCBOOK = kea-guide.xml intro.xml quickstart.xml install.xml admin.xml config.xml
-DOCBOOK += keactrl.xml dhcp4-srv.xml dhcp6-srv.xml logging.xml ddns.xml hooks.xml
-DOCBOOK += libdhcp.xml lfc.xml stats.xml ctrl-channel.xml faq.xml
+DOCBOOK += keactrl.xml dhcp4-srv.xml dhcp6-srv.xml lease-expiration.xml logging.xml
+DOCBOOK += ddns.xml hooks.xml libdhcp.xml lfc.xml stats.xml ctrl-channel.xml faq.xml
 
 EXTRA_DIST = $(DOCBOOK)
 DISTCLEANFILES = $(HTMLDOCS) $(DOCS) kea-messages.xml

+ 2 - 0
doc/guide/kea-guide.xml

@@ -67,6 +67,8 @@
 
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dhcp6-srv.xml" />
 
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="lease-expiration.xml" />
+
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ddns.xml" />
 
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="lfc.xml" />

+ 339 - 0
doc/guide/lease-expiration.xml

@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+<!ENTITY mdash  "&#x2014;" >
+]>
+<chapter id="lease-expiration">
+  <title>Lease Expiration in DHCPv4 and DHCPv6</title>
+
+  <para>The major role of the DHCP server is to assign addresses or/and
+  delegate prefixes to the DHCP clients. These addresses and delegated
+  prefixes are often referred to as 'leases'. The leases are typically
+  assigned to the clients for a finite amount of time, known as
+  'valid lifetime'. The DHCP client willing to continue using the assigned
+  leases, will periodically renew them by sending appropriate message
+  to the DHCP server. The DHCP server records the time when the lease
+  is renewed and calculates a new expiration time for it.
+  </para>
+
+  <para>If the client does not renew a lease and its valid lifetime
+  elapses, the lease is considered expired. There are many situations
+  when the client may cease lease renewals.
+  The most obvious one is the shutdown of the machine running the
+  client.</para>
+
+  <para>The DHCP server makes expired leases available for assignment.
+  This process is referred to as 'lease reclamation', and consequently
+  each expired lease made available for assignment is called 'reclaimed'.
+  The DHCP server should reclaim an expired lease as soon as it detects
+  that it has expired. One possible way in which the server may detect
+  expiration is when it is trying to allocate a lease to a client and
+  it finds this lease is already present in the database. If this lease
+  is expired, it may be allocated to the same or another client, but it
+  must be first reclaimed. Another way the server detects
+  expired leases is by periodically quering the lease database. The
+  further sections of this chapter explain how to configure the server
+  to periodically query for the expired leases and how to minimize the
+  impact of the periodic leases reclamation process on the server's
+  responsiveness. Finally, the 'lease affinity' is explained, which
+  provides means to assign the same lease to the returning client
+  after its lease has expired.
+  </para>
+
+  <para>Although, all configuration examples in this section are provided
+  for the DHCPv4 server, the same parameters may be used for the
+  DHCPv6 server configuration.
+  </para>
+
+  <section id="lease-reclamation">
+    <title>Lease Reclamation</title>
+    <para>The lease reclamation is a process in which an expired lease
+    becomes available for assignment to the same or a different client.
+    This process involves the following steps for each reclaimed lease:
+    </para>
+
+    <itemizedlist>
+      <listitem>
+        <simpara>Invoke callouts for the <command>lease4_expire</command> or
+        <command>lease6_expire</command> hook points, if hook libraries
+        supporting those callouts are currently loaded.</simpara>
+      </listitem>
+      <listitem>
+        <simpara>Update DNS, i.e. remove any DNS entries associated with
+        the expired lease.</simpara>
+      </listitem>
+      <listitem>
+        <simpara>Update lease information in the lease database to
+        indicate that the lease is now available for re-assignment.</simpara>
+      </listitem>
+      <listitem>
+        <simpara>Update statistics of the server, which includes
+        increasing the number of reclaimed leases and decreasing the
+        number of assigned addresses or delegated prefixes etc.</simpara>
+      </listitem>
+    </itemizedlist>
+
+    <para>Please refer to the <xref linkend="dhcp-ddns-server"/> to see
+    how to configure the DNS updates in Kea, and to the
+    <xref linkend="hooks-libraries"/> for information about using
+    hooks libraries.</para>
+  </section>
+
+  <section id="lease-reclaim-config">
+    <title>Configuring Leases Reclamation</title>
+    <para>Kea can be configured to periodically detect and process expired
+    leases. During this process the lease entries in the database are
+    modified or removed, therefore the server will not process incoming DHCP
+    messages to avoid issues with concurrent access to database information.
+    As a result, the server will be unresponsive when the leases reclamation
+    is performed, the DHCP queries will accumulate and responses will be
+    sent once the leases reclamation cycle is complete.</para>
+
+    <para>In the deployments where the response time is critical, the
+    administrators want to minimize the interruptions in the service
+    caused by the processing of expired leases. Kea provides a set of
+    configuration parameters to control the frequency of leases reclamation,
+    the maximum number of leases processed in a single cycle and the
+    timeout after which the reclamation should be interrupted. The
+    following configuration examples demonstrate how these parameters
+    can be used:
+
+<screen>
+"Dhcp4": {
+    ...
+
+    "expired-leases-processing": {
+        "reclaim-timer-wait-time": 5,
+        "max-reclaim-leases": 0,
+        "max-reclaim-time": 0,
+        "flush-reclaimed-timer-wait-time": 0,
+    },
+
+    ...
+}
+</screen>
+    </para>
+
+    <para>The first parameter is expressed in seconds and specifies an
+    interval between the two consecutive lease reclamation cycles. This
+    is explained on the following diagram.
+
+<screen>
+
+|  c1  |            | c2 |            |c3|            | c4 |                         
+|&#x3c;----&#x3e;|&#x3c;----------&#x3e;|&#x3c;--&#x3e;|&#x3c;----------&#x3e;|&#x3c;&#x3e;|&#x3c;----------&#x3e;|&#x3c;--&#x3e;|
+---------------------------------------------------------------->
+|      |     5s     |    |     5s     |  |     5s     |    | time
+
+</screen>
+
+    </para>
+    <para>This diagram shows 4 leases reclamation cycles of variable duration.
+    Note that the duration of the reclamation cycle depends on the number
+    of expired leases detected and processed in the particular cycle. This
+    duration is also usually significantly shorter than the interval between
+    the cycles.
+    </para>
+
+    <para>According to the <command>reclamim-timer-wait-time</command> the
+    server keeps fixed intervals of 5 seconds between the end of one cycle
+    and the start of the next cycle. This guarantees the presence of
+    5s long periods during which the server remains responsive to DHCP
+    queries and does not perform leases reclamation. The
+    <command>max-reclaim-leases</command> and
+    <command>max-reclaim-time</command> are set to 0, which implies that
+    there is no restriction on the maximum number of reclaimed leases
+    in the particular cycle, and the maximum duration of each cycle.
+    </para>
+
+    <para>In the deployments with high lease pool utilization, relatively
+    short valid lifetimes and clients often disconnecting allowing the
+    leases to expire, the number of expired leases requiring reclamation
+    at the given time may rise significantly. In this case it is often
+    desired to apply restrictions on the maximum duration of the leases
+    reclamation cycle or the number of leases that can be reclaimed in
+    this cycle. The following configuration demonstrates how this
+    can be done:
+
+<screen>
+"Dhcp4": {
+    ...
+
+    "expired-leases-processing": {
+        "reclaim-timer-wait-time": 3,
+        "max-reclaim-leases": 100,
+        "max-reclaim-time": 50,
+        "unwarned-reclaim-cycles": 10,
+        "flush-reclaimed-timer-wait-time": 0,
+    },
+
+    ...
+}
+
+</screen>
+
+    </para>
+
+    <para>The <command>max-reclaim-leases</command> parameter limits the number
+    of leases reclaimed in the single cycle to 100. The
+    <command>max-reclaim-time</command> limits the maximum duration of each
+    cycle to 50ms. The lease reclamation cycle will be interrupted when
+    first of these limitations is hit. The reclamation of all unreclaimed
+    leases will be attempted in subsequent cycles.</para>
+
+    <para>The following diagram illustrates the behavior of the system in the
+    presence of many expired leases, when the limits are applied for the
+    reclamation cycles.
+
+<screen>
+
+| c1 |                | c2 |                | c3 |                | c4 |
+|&#x3c;--&#x3e;|&#x3c;--------------&#x3e;|&#x3c;--&#x3e;|&#x3c;--------------&#x3e;|&#x3c;--&#x3e;|&#x3c;--------------&#x3e;|&#x3c;--&#x3e;|&#x3c;--
+------------------------------------------------------------------------------>
+|50ms|       3s       |50ms|       3s       |50ms|       3s       |50ms|  time
+
+</screen>
+
+    </para>
+
+    <para>The diagram demonstrates the case when each reclamation cycle would take
+    more than 50ms, and thus is interrupted according to the value of the
+    <command>max-reclaim-time</command>. This results in equal durations of
+    all reclamation cycles over time. Note that in this example the limitation
+    of maximum 100 leases is not hit. This may be the case when the database
+    transactions are slow or the callouts in the hook libraries attached to
+    the server are slow. In any case, the choice between the selecting the
+    specific number of leases or the maximum time for the lease reclamation
+    strongly depends on the particular deployment, used lease database
+    backend, hooks libraries etc.</para>
+
+    <para>If the limits are applied on the maximum number of reclaimed leases
+    or the maximum time for a single reclamation cycle, there is a risk
+    that the server will not be able to catch up the number of expired
+    leases to reclaim. This should not be the problem if the server is
+    dealing with a temporary burst of expirations, because it should be
+    able to eventually deal with them over time. However, if leases
+    expire at the high rate for a longer period of time, the unreclaimed
+    leases will pile up in the database. In order to notify the administrator
+    that the current configuration does not satisfy the needs for
+    reclamation of expired leases, the server issues a warning message
+    in the log, if it was unable to reclaim all leases within the last
+    couple of reclamation cycles. The number of cycles after which such
+    warning is issued is specified with the
+    <command>unwarned-reclaim-cycles</command> configuration parameter.
+    </para>
+
+    <para>Setting the <command>reclaim-timer-wait-time</command> to 0 disables
+    periodic reclamation of the expired leases.</para>
+
+  </section>
+
+  <section id="lease-affinity">
+    <title>Configuring Lease Affinity</title>
+    <para>Suppose that the laptop goes to a sleep mode after a period of user's
+    inactivity. While the laptop is in the sleep mode, the DHCP client
+    running on it will not renew leases obtained from the server and the
+    leases will eventually expire. When the laptop wakes up from the
+    sleep mode, it is often desired that it can continue using previous
+    IP addresses. In order to facilitate it, the server needs to correlate
+    returning clients with the expired leases they were using in the past.
+    When the client returns, the server will first check for those
+    leases and re-assign them if they are still available (not assigned
+    to another client). The ability of the server to re-assign the same
+    lease to the returning client is referred to as 'lease affinity'.
+    </para>
+
+    <para>When the lease affinity is enabled, the server would still
+    reclaim leases according to the parameters described in
+    <xref linkend="lease-reclaim-config"/>, but the reclaimed leases
+    will be held in the database (rather than removed) for the specified
+    amount of time. When the client returns, the server will first check
+    if there are any reclaimed leases associated with this client and
+    re-assign them if possible. However, it is important to note that
+    any reclaimed lease may be assigned to another client if that client
+    asks for it. Therefore, the lease affinity provides no guarantee that
+    the reclaimed lease will be available for the client who used it
+    before. It merely increases the chances for the client to be assigned
+    the same lease. If the lease pool is small (mostly applies to DHCPv4
+    for which address space is small), there is an increased likelihood
+    that the expired lease will be hijacked by another client.
+    </para>
+
+    <para>Consider the following configuration:
+
+<screen>
+"Dhcp4": {
+    ...
+
+    "expired-leases-processing": {
+        "reclaim-timer-wait-time": 3,
+        "hold-reclaimed-time": 1800,
+        "flush-reclaimed-timer-wait-time": 5
+    },
+
+    ...
+}
+</screen>
+
+    </para>
+
+    <para>The <command>hold-reclaim-time</command> specifies how many seconds
+    after an expiration a reclaimed lease should be held in the database
+    for re-assignment to the same client. In the example given above, the
+    reclaimed leases will be held for 30 minutes (1800s) after their
+    expiration. During this time, the server will likely be able to
+    re-assign the same lease to the returning client, unless another client
+    requests this lease and the server assigns it.</para>
+
+    <para>The server must occasionally remove reclaimed leases for which the
+    time indicated by <command>hold-reclaim-time</command> elapsed. The
+    <command>flush-reclaimed-timer-wait-time</command> controls how
+    often the server removes such leases. In the example provided
+    above, the server will initiate removal of leases 5 seconds after
+    the previous removal attempt was completed. Setting this value to 0
+    disables lease affinity, in which case leases will be removed from the
+    lease database when they are reclaimed. If the lease affinity is
+    enabled, it is recommended that this parameter is set to significantly
+    higher value than the <command>reclaim-timer-wait-time</command>
+    because timely removal of expired-reclaimed leases is not critical,
+    while this removal impacts the server's responsiveness, because the
+    server doesn't process DHCP messages while it removes leases from
+    the database.</para>
+
+  </section>
+
+  <section id="lease-reclamation-defaults">
+    <title>Default Configuration Values for Leases Reclamation</title>
+    <para>The following list presents all configuration parameters
+    pertaining to processing expired leases with their default values:</para>
+
+    <itemizedlist>
+      <listitem>
+        <simpara><command>reclaim-timer-wait-time</command> = 10 [seconds]</simpara>
+      </listitem>
+      <listitem>
+        <simpara><command>flush-reclaimed-timer-wait-time</command> = 25 [seconds]</simpara>
+      </listitem>
+      <listitem>
+        <simpara><command>hold-reclaimed-time</command> = 3600 [seconds]</simpara>
+      </listitem>
+      <listitem>
+        <simpara><command>max-reclaim-leases</command> = 100 </simpara>
+      </listitem>
+      <listitem>
+        <simpara><command>max-reclaim-time</command> = 250 [milliseconds]</simpara>
+      </listitem>
+      <listitem>
+        <simpara><command>unwarned-reclaim-cycles</command> = 5</simpara>
+      </listitem>
+    </itemizedlist>
+
+    <para>The default value for any parameter is used when this parameter not
+    explicitly specified in the configuration. Also, the
+    <command>expired-leases-processing</command> map may be omitted entirely
+    in the configuration, in which case the default values are used for all
+    parameters listed above.</para>
+
+  </section>
+
+</chapter>