123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- <?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 "—" >
- ]>
- <chapter id="lease-expiration">
- <title>Lease Expiration in DHCPv4 and DHCPv6</title>
- <para>The primary role of the DHCP server is to assign addresses and/or
- delegate prefixes to DHCP clients. These addresses and prefixes are
- often referred to as "leases". Leases are typically assigned to clients
- for a finite amount of time, known as the "valid lifetime". DHCP clients who
- wish to continue using their assigned leases, will periodically renew them
- by sending the appropriate message to the DHCP server. The DHCP server records
- the time when these leases are renewed and calculates new expiration times
- for them.
- </para>
- <para>If the client does not renew a lease before its valid lifetime
- elapses, the lease is considered expired. There are many situations
- when the client may cease lease renewals. A common scenario is when
- the machine running the client shuts down for an extended period of
- time.</para>
- <para> The process through which the DHCP server makes expired leases
- available for reassignment is referred to as "lease reclamation" and expired
- leases returned to availability through this process are referred to as
- "reclaimed".
- The DHCP server attempts to reclaim an expired lease as soon as it detects
- that it has expired. One way in which the server detects expiration occurs
- when it is trying to allocate a lease to a client and finds this
- lease already present in the database but expired. Another way
- is by periodically querying the lease
- database for them. Regardless of how an expired lease is detected, before
- it may assigned to a client, it must be reclaimed.
- </para>
- <para>
- This chapter explains how to configure the server to periodically query
- for the expired leases and how to minimize the impact of the periodic lease
- reclamation process on the server's responsiveness. Finally, it explains
- "lease affinity", which provides the means to assign the same lease to a
- 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>Lease reclamation is the process through which an expired lease
- becomes available for assignment to the same or 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 counters on the server, which includes
- increasing the number of reclaimed leases and decreasing the
- number of assigned addresses or delegated prefixes.</simpara>
- </listitem>
- </itemizedlist>
- <para>Please refer to <xref linkend="dhcp-ddns-server"/> to see
- how to configure DNS updates in Kea, and to
- <xref linkend="hooks-libraries"/> for information about using
- hooks libraries.</para>
- </section>
- <section id="lease-reclaim-config">
- <title>Configuring Lease Reclamation</title>
- <para>Kea can be configured to periodically detect and reclaim expired
- leases. During this process the lease entries in the database are
- modified or removed. While this is happening 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 while lease reclamation
- is performed and DHCP queries will accumulate; responses will be
- sent once the leases reclamation cycle is complete.</para>
- <para>In deployments where response time is critical, administrators may
- wish to minimize the interruptions in service caused by lease reclamation.
- Toward this end, Kea provides configuration parameters to control: the
- frequency of lease reclamation cycles, the maximum number of leases
- processed in a single reclamation cycle, and the maximum amount of time a
- single reclamation cycle is allowed to run before being interrupted. The
- following 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 by the following diagram.
- <screen>
- | c1 | | c2 | |c3| | c4 |
- |<---->|<---------->|<-->|<---------->|<>|<---------->|<-->|
- ---------------------------------------------------------------->
- | | 5s | | 5s | | 5s | | time
- </screen>
- </para>
- <para>This diagram shows four lease reclamation cycles (c1 through c4) 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>reclaim-timer-wait-time</command> the
- server keeps fixed intervals of five 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 lease reclamation. The
- <command>max-reclaim-leases</command> and
- <command>max-reclaim-time</command> are set to 0, which sets
- no restriction on the maximum number of leases reclaimed
- in the particular cycle, or on the maximum duration of each cycle.
- </para>
- <para>In deployments with high lease pool utilization, relatively
- short valid lifetimes, and frequently disconnecting clients which
- allow leases to expire, the number of expired leases requiring reclamation
- at any given time may rise significantly. In this case it is often
- desirable to apply restrictions on the maximum duration of a reclamation
- cycle or the maximum number of leases reclaimed in a 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,
- },
- ...
- }
- </screen>
- </para>
- <para>The <command>max-reclaim-leases</command> parameter limits the number
- of leases reclaimed in a 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 if either
- of these limitations is reached. 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 |
- |<-->|<-------------->|<-->|<-------------->|<-->|<-------------->|<-->|<--
- ------------------------------------------------------------------------------>
- |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 reached. This may be the case when database
- transactions are slow or callouts in the hook libraries attached to
- the server are slow. Regardless, the choosing values for either the
- maximum number of leases or a maximum cycle time strongly depends on the
- particular deployment, lease database backend being used, and any hooks
- libraries etc. Administrators may need to experiment to tune the system
- to suit the dynamics of their deployment.</para>
- <para>It is important to realize that with the use of these limits, there
- is a risk that expired leases will accumulate faster than the server can
- reclaim them. 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 a 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 a laptop goes to a sleep mode after a period of user
- inactivity. While the laptop is in sleep mode, its DHCP client will not
- renew leases obtained from the server and these leases will eventually
- expire. When the laptop wakes up, it is often desirable for it to continue
- using its previous assigned IP addresses. In order to facilitate this,
- the server needs to correlate returning clients with their expired leases
- When the client returns, the server will first check for those leases and
- re-assign them if they have not been assigned to another client. The ability
- of the server to re-assign the same lease to a returning client is
- referred to as "lease affinity".
- </para>
- <para>When lease affinity is enabled, the server will 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
- specifically asks for it. Therefore, the lease affinity does not
- 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 (this mostly applies
- to DHCPv4 for which address space is small), there is an increased
- likelihood that the expired lease will be assigned to 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,
- 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 periodically remove reclaimed leases for which the
- time indicated by <command>hold-reclaim-time</command> has 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 such 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 lease affinity is enabled, it
- is recommended that <command>hold-reclaim-time</command> be set to a value significantly
- higher than the <command>reclaim-timer-wait-time</command>, as timely
- removal of expired-reclaimed leases is less critical while the removal
- process may impact server responsiveness.</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>
- <section id="leases-reclamation-using-command">
- <title>Reclaiming Expired Leases with Command</title>
- <para>The <emphasis>leases-reclaim</emphasis> command can be used to trigger
- leases reclamation at any time. Please consult the
- <xref linkend="command-leases-reclaim"/> for the details about using this
- command.</para>
- </section>
- </chapter>
|