123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- <?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="admin">
- <title>Database administration</title>
- <section id="kea-admin">
- <title>kea-admin tool</title>
- <para>
- Kea is able to store leases in one of several supported databases.
- Additional types of data, like host reservation details, will
- be supported in the near future. To manage those databases, a
- tool called <command>kea-admin</command> was introduced. Currently
- it is able to initialize new database, check its version
- and perform database upgrade, if needed.
- </para>
- <para>
- Kea mantains separate version numbering for its database backends. These
- are independent of the Kea version. It is possible that the backend
- revision will stay the same through several Kea revisions. Likewise, it
- is possible that a backend may go up several times between two Kea
- revisions, if there were several changes introduced that required database
- schema change. Versions for each backend are independent, so a bump
- in MySQL version does not imply bump in the Postgres version.
- </para>
- <para>
- Backend versions are specified in major.minor format. Minor number is
- increased when there are backward compatibile changes introduced. For
- example, a new index is added. It is desirable, but not mandatory to
- have it. You can run on older database version if you want to. On
- the other hand, major number is increased when there's an incompatible
- change introduced, for example an extra column is added. If you try
- to run Kea software on a database that is too old (which is signified
- by mismatched major backend version number), Kea will refuse to run
- and an administrative action will be required to upgrade the database.
- </para>
-
- <para>
- <command>kea-admin</command> takes two mandatory parameters:
- <command>command</command> and <command>backend</command>. Additional,
- non-mandatory options may be specified. Currently supported commands
- are:
- <itemizedlist>
- <listitem>
- <simpara>
- <command>lease-init</command> —
- Initializes a new lease database. Useful during first Kea
- installation. The database is initialized to the latest version
- supported by the version of the software.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>lease-version</command> —
- Reports lease database version. This is not necessarily
- equal to Kea version as each backend has its own versioning
- scheme.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>lease-upgrade</command> —
- Conducts lease database upgrade. This is useful when
- migrating between old and new Kea versions.
- </simpara>
- </listitem>
- </itemizedlist>
- The <command>backend</command> specified backend type. Currently
- allowed backends are: memfile, mysql and pgsql. There are additional
- parameters that may be needed, depending on your setup and specific
- operation: specify username, password and database name or the directory
- where specific files are located. See appropriate manual page for
- details (<command>man 8 kea-admin</command>).
- </para>
- </section>
- <section>
- <title>memfile</title>
- <para>There are no special initialization steps necessary for memfile
- backend. During the first run, both <command>kea-dhcp4</command> and
- <command>kea-dhcp6</command> will create an empty lease file, if it is not
- present. Necessary disk write permission is required.
- </para>
- <!-- @todo: document lease file upgrades once they are implemented in kea-admin -->
- </section>
- <section>
- <title>MySQL</title>
- <para>
- MySQL database must be properly set up if you want Kea to store lease
- and other information in MySQL. This step can be safely skipped if you
- chose to store the data in other backends, like memfile or PosgreSQL.
- </para>
- <section id="mysql-database-create">
- <title>Initialize the MySQL Database using kea-admin</title>
- <para>
- There are two ways to initialize the database. The first one involves
- running <command>kea-admin</command> tool, which attempts to automate
- the process. It is convenient to use, but may not cover more complex
- cases. The second alternative is to run all the commands
- manually.
- </para>
- <para>
- When <command>kea-admin</command> is told to initialize the database, it
- assumes that the database and database user has been created. If not,
- please follow the necessary instructions in <xref
- linkend="mysql-database-create-manual" />.
- </para>
- <para>
- To initialize new MySQL database using <command>kea-admin</command>, use the
- following command:
- <screen>$ <userinput>kea-admin lease-init mysql -u <replaceable>database-user</replaceable> -p <replaceable>database-password</replaceable> -d <replaceable>database-name</replaceable></userinput>
- </screen>
- <command>kea-admin</command> has rudimentary checks implemented. It will
- refuse to initialize a database that has any existing tables. If you want
- to start from scratch, you must remove existing data manually. This process
- is left manual on purpose to avoid mistakes that could not be undone.
- </para>
- </section>
- <section id="mysql-upgrade">
- <title>Upgrading MySQL database from earlier Kea versions</title>
- <para>Sometime a new Kea version may use newer database schema and there may
- be a need to upgrade existing database. This can be done using <command>kea-admin</command>.
- It is possible to check existing database version:
- <screen>$ <userinput>kea-admin lease-version mysql -u <replaceable>database-user</replaceable> -p <replaceable>database-password</replaceable> -d <replaceable>database-name</replaceable></userinput>
- </screen>
- See <xref linkend="kea-admin"/> for a discussion about versioning.</para>
- <para>It may be required to run database upgrade. This process is designed
- to not discard any data, but depending on the nature of the changes, it
- may be impossible to downgrade to earlier Kea version. Please back up your
- database if you consider reverting to an earlier Kea version. To conduct
- an upgrade, the following command should be used:
- <screen>$ <userinput>kea-admin lease-upgrade mysql -u <replaceable>database-user</replaceable> -p <replaceable>database-password</replaceable> -d <replaceable>database-name</replaceable></userinput>
- </screen>
- </para>
- </section>
- <section id="mysql-database-create-manual">
- <title>Manually create the MySQL Database and the Kea User</title>
- <note>
- <simpara>
- This paragraph explains how to create and initialize MySQL database
- manually. See <xref linkend="mysql-database-create" /> for a kea-admin,
- a tool that automates most of those steps.
- </simpara>
- </note>
- <para>
- The first task is to create both the lease database and the user under
- which the servers will access it. A number of steps are required:
- </para>
- <para>
- 1. Log into MySQL as "root":
- <screen>$ <userinput>mysql -u root -p</userinput>
- Enter password:<userinput/>
- :<userinput/>
- mysql></screen>
- </para>
- <para>
- 2. Create the database:
- <screen>mysql> <userinput>CREATE DATABASE <replaceable>database-name</replaceable>;</userinput></screen>
- (<replaceable>database-name</replaceable> is the name you
- have chosen for the database.)
- </para>
- <para>
- 3. Create the database tables by running the dhcpdb_create.mysql script supplied as part of Kea:
- <screen>mysql> <userinput>CONNECT <replaceable>database-name</replaceable>;</userinput>
- mysql> <userinput>SOURCE <replaceable>path-to-kea</replaceable>/share/kea/dhcpdb_create.mysql</userinput></screen>
- </para>
- <para>
- 4. Create the user under which Kea will access the database (and give it a password), then grant it access to the database tables:
- <screen>mysql> <userinput>CREATE USER '<replaceable>user-name</replaceable>'@'localhost' IDENTIFIED BY '<replaceable>password</replaceable>';</userinput>
- mysql> <userinput>GRANT ALL ON <replaceable>database-name</replaceable>.* TO '<replaceable>user-name</replaceable>'@'localhost';</userinput></screen>
- </para>
- <para>
- 5. Exit MySQL:
- <screen>mysql> <userinput>quit</userinput>
- Bye<userinput/>
- $</screen>
- </para>
- </section>
- </section> <!-- end of MySQL sections -->
- <section>
- <title>PostgreSQL</title>
- <para>
- PostgreSQL database must be properly set up if you want Kea to store lease
- and other information in PostgreSQL. This step can be safely skipped if you
- chose to store the data in other backends, like memfile or MySQL.
- </para>
- <section>
- <title>Initialize the PostgreSQL Database using kea-admin</title>
- <para>
- Support for PostgreSQL in kea-admin is currently not implemented.
- </para>
- <!-- @todo: document PgSQL upgrade once they are implemented in kea-admin -->
- </section>
-
- <section id="pgsql-database-create">
- <title>Create PostgreSQL Database and Kea User</title>
- <para>
- The next task is to create both the lease database and the user under which the servers will
- access it. A number of steps are required:
- </para>
- <para>
- 1. Log into PostgreSQL as "root":
- <screen>$ <userinput>sudo -u postgres psql postgres</userinput>
- Enter password:<userinput/>
- :<userinput/>
- postgres=#</screen>
- </para>
- <para>
- 2. Create the database:
- <screen>
- postgres=#<userinput> CREATE DATABASE <replaceable>database-name</replaceable>;</userinput>
- CREATE DATABASE
- postgres=#
- </screen>
- (<replaceable>database-name</replaceable> is the name you
- have chosen for the database.)
- </para>
- <para>
- 3. Create the user under which Kea will access the database (and give it a password), then grant it access to the database:
- <screen>postgres=#<userinput> CREATE USER <replaceable>user-name</replaceable> WITH PASSWORD '<replaceable>password</replaceable>';</userinput>
- CREATE ROLE
- postgres=#
- postgres=#<userinput> GRANT ALL PRIVILEGES ON DATABASE <replaceable>database-name</replaceable> TO <replaceable>user-name</replaceable>;</userinput>
- GRANT
- postgres=#
- </screen>
- </para>
- <para>
- 4. Exit PostgreSQL:
- <screen>postgres=# <userinput>\q</userinput>
- Bye<userinput/>
- $</screen>
- </para>
- <para>
- 5. Create the database tables using the new user's credentials and the dhcpdb_create.pgsql script supplied with Kea.
- After entering the following command, you will be prompted for the new
- user's password. When the command completes you will be returned to
- the shell prompt. You should see output similar to following:
- <screen>$ <userinput>psql -d <replaceable>database-name</replaceable> -U <replaceable>user-name</replaceable> -f <replaceable>path-to-kea</replaceable>/share/kea/dhcpdb_create.pgsql</userinput>
- Password for user <replaceable>user-name</replaceable>:
- CREATE TABLE
- CREATE INDEX
- CREATE INDEX
- CREATE TABLE
- CREATE INDEX
- CREATE TABLE
- START TRANSACTION
- INSERT 0 1
- INSERT 0 1
- INSERT 0 1
- COMMIT
- CREATE TABLE
- START TRANSACTION
- INSERT 0 1
- COMMIT
- $
- </screen>
- </para>
- <para>
- If instead you encounter an error like:
- </para>
- <screen>
- psql: FATAL: no pg_hba.conf entry for host "[local]", user "<replaceable>user-name</replaceable>", database "<replaceable>database-name</replaceable>", SSL off
- </screen>
- <para>
- ... you will need to alter the PostgreSQL configuration.
- Kea uses password authentication when connecting to the database and must
- have the appropriate entries added to PostgreSQL's pg_hba.conf file. This
- file is normally located in the primary data directory for your PostgreSQL
- server. The precise path may vary but the default location for PostgreSQL 9.3
- on Centos 6.5 is:
- <filename>/var/lib/pgsql/9.3/data/pg_hba.conf</filename>.
- Assuming Kea is running on the same host as PostgreSQL, adding lines similar
- to following should be sufficient to provide password-authenticated access to
- Kea's database:
- </para>
- <screen>
- local <replaceable>database-name</replaceable> <replaceable>user-name</replaceable> password
- host <replaceable>database-name</replaceable> <replaceable>user-name</replaceable> 127.0.0.1/32 password
- host <replaceable>database-name</replaceable> <replaceable>user-name</replaceable> ::1/128 password
- </screen>
- <para>
- Please consult your PostgreSQL user manual before making these changes as they
- may expose your other databases that you run on the same system.
- </para>
- </section>
- </section> <!-- end of postgres sections -->
- </chapter>
|