Zoned: BIND9 DLZ Replicator

description

Zoned provides DNS zone database clustering for BIND9.

Zoned works in conjunction with the BDBHPT DLZ module for BIND9 (9.4.0+). Zoned manages the backing-store Berkeley DB database, and utilizes the Berkeley DB Replication Base API to provide high availability and load distribution to a coherent DNS zone infrastructure.

Zoned includes the zoned(1) server replication node, zonectl(1) command line utility for managing server nodes and editing DNS zone records, and a Perl module, Zoned. All changes to DNS zone data must be processed through a Zoned node, preferably using the command-line utility or Perl library. Alternatively, an ASN.1 message schema definition is provided, defining the messaging protocol for node communication, which can be used to build your own tools for interacting with the cluster.

Zoned and Berkeley DB autonomously manage the cluster and cluster messaging (including transparently routing all zoned edits to the master, per BerkeleyDB Replication requirements). You must enumerate cluster nodes through SRV resource records. This list specifies all nodes which should participate in the cluster, not necessarily all available nodes. This list determines who and where each node should peer with, and serves as a parameter to determining whether a transaction has been successfully committed (more than one-half of enumerated nodes have written out a zone edit). The SRV node enumeration modifications are automatically detected with a configurable check interval.

To compile Zoned you need: GNU Make, libarena, libevnet, libevent, asn1c, and Lua.

Zoned has been successfully compiled and run on Debian GNU/Linux i386, and OpenBSD 4.0 AMD64 platforms. Zoned is new software, and it may take some elbow grease to build properly.

libevnet requires C-Ares and OpenSSL.

Zoned is a Work-in-Progress. Node authentication is not yet implemented, but will use TLS and X.509 certificate verification. Currently node discovery occurs through an SRV query, which is expected to enumerate all current nodes.

todo

Side-channel zone database synchronization for new nodes and nodes which have been absent for an extended period, and for which in-band BerkeleyDB Replication synchronization might delay normal and efficient cluster operation. The idea is that Zoned should require minimal labour by the administrator; the cluster and cluster management should be as automated as possible. Adding a node should be as simple as installing the software, adding an SRV record, and starting the new daemon.

Regression tests and performance analysis.

news

2007-05-06

(0.1.1) All edit modes should work.

The BIND9 DLZ patch now supports recreating the BDB environment on-the-fly. Previously simply restarting the local Zoned node would prevent BIND from reading the databases until it too was restarted.

Deadlock detection has not been inspected yet; however, BDB's MVCC flags--DB_MULTIVERSION and DB_TXN_SNAPSHOT--are being used in hopefully the right spots.

2007-05-03

(0.1.0) Initial ALPHA release. Elections, transactions, edit routing and the basics seem to be working well.

Development has so far been on Debian GNU/Linux (Etch, but w/ BIND9 9.4.1 from unstable).

For build tips see the README in the distribution tarball.

0.1.1 will include, at a minimum, the ability to control the type of edit, i.e. "set", "add", or "del" an RR for a host. Currently RR's are just appended.

Lua will either be ripped out entirely, or become more prominent.

license

Copyright (C) 2007 William Ahern.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

download

Download the latest 0.1.1 ALPHA.

Download the previous 0.1.0 ALPHA.

contributions

If you find this work useful, show your gratitude by giving back to the community.

other projects

airctl | bsdauth | cnippets | libmime | libarena | libevnet | authldap | streamlocal | libnostd | zoned | dns.c | delegate.c | llrb.h | lpegk | json.c | cqueues | siphash.h | hexdump.c | timeout.c | luapath | luaossl | AnonNet