]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5478] Added example for the load balancing in DHCPv4.
authorMarcin Siodelski <marcin@isc.org>
Thu, 10 May 2018 14:22:16 +0000 (16:22 +0200)
committerMarcin Siodelski <marcin@isc.org>
Thu, 10 May 2018 16:05:39 +0000 (18:05 +0200)
doc/Makefile.am
doc/examples/kea4/ha-load-balancing-primary.json [new file with mode: 0644]

index 6a64c6c21b231af082de8dd089d2ccab61b20bcf..346a3fdf36ea01da915745d5d63961bf97043ce6 100644 (file)
@@ -23,6 +23,7 @@ nobase_dist_doc_DATA += examples/kea4/classify.json
 nobase_dist_doc_DATA += examples/kea4/classify2.json
 nobase_dist_doc_DATA += examples/kea4/comments.json
 nobase_dist_doc_DATA += examples/kea4/dhcpv4-over-dhcpv6.json
+nobase_dist_doc_DATA += examples/kea4/ha-load-balancing-primary.json
 nobase_dist_doc_DATA += examples/kea4/hooks.json
 nobase_dist_doc_DATA += examples/kea4/hooks-radius.json
 nobase_dist_doc_DATA += examples/kea4/leases-expiration.json
diff --git a/doc/examples/kea4/ha-load-balancing-primary.json b/doc/examples/kea4/ha-load-balancing-primary.json
new file mode 100644 (file)
index 0000000..4430c5b
--- /dev/null
@@ -0,0 +1,233 @@
+// This is an example configuration of the Kea DHCPv4 server. It uses High
+// Availability hooks library and Lease Commands hooks library to enable
+// High Availibility function for the DHCP server. Note that almost exactly
+// the same configuration must be used on the second server (partner).
+// The only difference is that "this-server-name" must be set to "server2"
+// on this other server. Also, the interface configuration depends on the
+// network settings of the particular machine.
+//
+// The servers using this configuration work in load balancing mode.
+{
+
+// DHCPv4 configuration starts here.
+"Dhcp4": {
+    // Add names of your network interfaces to listen on.
+    "interfaces-config": {
+        // The DHCPv4 server listens on this interface.
+        "interfaces": [ "ethX" ]
+    },
+
+    // Control socket is required for communication between the Control
+    // Agent and the DHCP server. High Availability requires Control Agent
+    // to be running because lease updates are sent over the RESTful
+    // API between the HA peers.
+    "control-socket": {
+        "socket-type": "unix",
+        "socket-name": "/tmp/kea-dhcp4-ctrl.sock"
+    },
+
+    // Use Memfile lease database backend to store leases in a CSV file.
+    // Depending on how Kea was compiled, it may also support SQL databases
+    // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends
+    // require more parameters, like name, host and possibly user and password.
+    // There are dedicated examples for each backend. See Section 7.2.2 "Lease
+    // Storage" for details.
+    "lease-database": {
+        // Memfile is the simplest and easiest backend to use. It's a in-memory
+        "type": "memfile"
+    },
+
+    // Client classes will associate address pools with certain servers taking
+    // part in providing High Availability.
+    "client-classes": [
+        // This class corresponds with a scope of the server1.
+        // It must be always declared.
+        {
+            "name": "ha_server1"
+        },
+        // This class corresponds with a scope of the server2.
+        // It must be always declared.
+        {
+            "name": "ha_server2"
+        },
+        // phones class
+        {
+            "name": "phones",
+            "test": "substring(option[60].hex,0,6) == 'Aastra'",
+        },
+        // laptops are everything but phones.
+        {
+            "name": "laptops",
+            "test": "not member('phones')"
+        },
+        // Some phones will be handled by server1. Whether the ha_server1
+        // or ha_server2 is assigned for the client is a matter of load
+        // balancing performed by the HA hooks library.
+        {
+            "name": "phones_server1",
+            "test": "member('phones') and member('ha_server1')"
+        },
+        // Some phones will be handled by server2.
+        {
+            "name": "phones_server2",
+            "test": "member('phones') and member('ha_server2')"
+        },
+        // Some laptops will be handled by server1.
+        {
+            "name": "laptops_server1",
+            "test": "member('laptops') and member('ha_server1')"
+        },
+        // Some laptops will be handled by server2.
+        {
+            "name": "laptops_server2",
+            "test": "member('laptops') and member('ha_server2')"
+        }
+    ],
+
+
+    // HA requires two hooks libraries to be loaded: libdhcp_lease_cmds.so and
+    // libdhcp_ha.so. The former handles incoming lease updates from the HA peers.
+    // The latter implements high availability feature for Kea.
+    "hooks-libraries": [
+        // The lease_cmds library must be loaded because HA makes use of it to
+        // deliver lease updates to the server as well as synchronize the
+        // lease database after failure.
+        {
+            "library": "/opt/lib/hooks/libdhcp_lease_cmds.so",
+            "parameters": { }
+        },
+        {
+            // The HA hooks library should be loaded.
+            "library": "/opt/lib/hooks/libdhcp_ha.so",
+            "parameters": {
+                // High Availability configuration is specified for the HA hook library.
+                // Each server should have the same HA configuration, except for the
+                // "this-server-name" parameter.
+                "high-availability": [ {
+                    // This parameter points to this server instance. The respective
+                    // HA peers must have this parameter set to their own names.
+                    "this-server-name": "server1",
+                    // The HA mode is set to load-balancing. In this mode, the active
+                    // servers share the traffic (50/50).
+                    "mode": "load-balancing",
+                    // Heartbeat is to be sent every 10 seconds if no other control
+                    // commands are transmitted.
+                    "heartbeat-delay": 10000,
+                    // Maximum time for partner's response to a heartbeat, after which
+                    // failure detection is started. This is specified in milliseconds.
+                    "max-response-delay": 10000,
+                    // The following parameters control how the server detects the
+                    // partner's failure. The ACK delay sets the threshold for the
+                    // 'secs' field of the received discovers. This is specified in
+                    // milliseconds.
+                    "max-ack-delay": 5000,
+                    // This specifies the number of clients which send messages to
+                    // the partner but appear to not receive any response.
+                    "max-unacked-clients": 5,
+                    "peers": [
+                         // This is the configuration of this server instance.
+                         {
+                             "name": "server1",
+                             // This specifies the URL of our server instance. The
+                             // Control Agent must run along with our DHCPv4 server
+                             // instance and the "http-host" and "http-port" must be
+                             // set to the corresponding values.
+                             "url": "http://192.168.56.33:8080/",
+                             // This server is primary. The other one must be
+                             // secondary. 
+                             "role": "primary"
+                         },
+                         // This is the configuration of our HA peer.
+                         {
+                             "name": "server2",
+                             // Specifies the URL on which the partner's control
+                             // channel can be reached. The Control Agent is required
+                             // to run on the partner's machine with "http-host" and
+                             // "http-port" values set to the corresponding values.
+                             "url": "http://192.168.56.66:8080/",
+                             // The partner is a secondary. Our is primary.
+                             "role": "secondary"
+                         }
+                     ]
+                 } ]
+            }
+        }
+    ],
+
+    // This example contains a single subnet declaration.
+    "subnet4": [
+        {
+            // Subnet prefix.
+            "subnet": "192.0.3.0/24",
+
+            // Specify four address pools.
+            "pools": [
+                {
+                    "pool": "192.0.3.100 - 192.0.3.125",
+                    "client-class": "phones_server1"
+                },
+                {
+                    "pool": "192.0.3.126 - 192.0.3.150",
+                    "client-class": "laptops_server1"
+                },
+                {
+                    "pool": "192.0.3.200 - 192.0.3.225",
+                    "client-class": "phones_server2"
+                },
+                {
+                    "pool": "192.0.3.226 - 192.0.3.250",
+                    "client-class": "laptops_server2"
+                }
+            ],
+
+            // These are options that are subnet specific. In most cases,
+            // you need to define at least routers option, as without this
+            // option your clients will not be able to reach their default
+            // gateway and will not have Internet connectivity.
+            "option-data": [
+                {
+                    // For each IPv4 subnet you most likely need to specify at
+                    // least one router.
+                    "name": "routers",
+                    "data": "192.0.3.1"
+                }
+            ],
+
+            // This subnet will be selected for queries coming from the following
+            // IP address.
+            "relay": { "ip-address": "192.168.56.1" }
+        }
+    ]
+},
+
+// Logging configuration starts here.
+"Logging":
+{
+  "loggers": [
+    {
+        // This section affects kea-dhcp4, which is the base logger for DHCPv4
+        // component. It tells DHCPv4 server to write all log messages (on
+        // severity INFO or more) to a file.
+        "name": "kea-dhcp4",
+        "output_options": [
+            {
+                "output": "stdout"
+
+            }
+        ],
+        "severity": "INFO",
+    },
+    {
+        // This section specifies configuration of the HA hooks library specific
+        // logger.
+        "name": "kea-dhcp4.ha_hooks",
+        "output_options": [
+            {
+                "output": "stdout"
+            }
+        ],
+        "severity": "INFO"
+    }
+  ]
+}
+}