blob: 9ea030ea93c51f1561ea98f9dda25bd95bb709e7 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY drbdsetup_options SYSTEM "./drbdsetup-options.xml">
]>
<refentry id="re-drbdconf">
&drbdsetup_options;
<refentryinfo>
<date>3 December 2012</date>
<productname>DRBD</productname>
<productnumber>9.0.0</productnumber>
</refentryinfo>
<refmeta>
<refentrytitle>drbd.conf</refentrytitle>
<manvolnum>5</manvolnum>
<refmiscinfo class="manual">Configuration Files</refmiscinfo>
</refmeta>
<refnamediv>
<refname>drbd.conf</refname>
<refpurpose>DRBD Configuration Files<indexterm significance="normal">
<primary>drbd.conf</primary>
</indexterm></refpurpose>
</refnamediv>
<refsect1>
<title>Introduction</title>
<para>DRBD implements block devices which replicate their data to all nodes
of a cluster. The actual data and associated metadata are usually stored
redundantly on "ordinary" block devices on each cluster node.</para>
<para>Replicated block devices are called
<option>/dev/drbd<replaceable>minor</replaceable></option> by default. They
are grouped into resources, with one or more devices per resource.
Replication among the devices in a resource takes place in chronological order. With DRBD,
we refer to the devices inside a resource as <emphasis>volumes</emphasis>.</para>
<para>In DRBD 9, a resource can be replicated between two or more cluster
nodes. The connections between cluster nodes are point-to-point links, and
use TCP or a TCP-like protocol. All nodes must be directly
connected.</para>
<para>DRBD consists of low-level user-space components
which interact with the kernel and perform basic operations
(<option>drbdsetup</option>, <option>drbdmeta</option>), a high-level
user-space component which understands and processes the DRBD configuration
and translates it into basic operations of the low-level components
(<option>drbdadm</option>), and a kernel component.</para>
<para>The default DRBD configuration consists of
<option>/etc/drbd.conf</option> and of additional files included from
there, usually <option>global_common.conf</option> and all
<option><replaceable>*</replaceable>.res</option> files inside
<option>/etc/drbd.d/</option>. It has turned out to be useful to define
each resource in a separate
<option><replaceable>*</replaceable>.res</option> file.</para>
<para>The configuration files are designed so that each cluster node can
contain an identical copy of the entire cluster configuration. The host
name of each node determines which parts of the configuration apply
(<option>uname -n</option>).
It is highly recommended to keep the cluster configuration on all
nodes in sync by manually copying it to all nodes, or by automating the
process with <option>csync2</option> or a similar tool.</para>
</refsect1>
<refsect1>
<title>Example Configuration File</title>
<para>
<programlisting format="linespecific">
global {
usage-count yes;
udev-always-use-vnr;
}
resource r0 {
net {
cram-hmac-alg sha1;
shared-secret "FooFunFactory";
}
volume 0 {
device /dev/drbd1;
disk /dev/sda7;
meta-disk internal;
}
on alice {
node-id 0;
address 10.1.1.31:7000;
}
on bob {
node-id 1;
address 10.1.1.32:7000;
}
connection {
host alice port 7000;
host bob port 7000;
net {
protocol C;
}
}
}</programlisting>
This example defines a resource <option>r0</option> which contains a single replicated
device with volume number 0. The resource is replicated among hosts <option>alice</option>
and <option>bob</option>, which have the IPv4 addresses <option>10.1.1.31</option> and <option>10.1.1.32</option> and the
node identifiers 0 and 1, respectively. On both hosts, the replicated
device is called <option>/dev/drbd1</option>, and the actual data and metadata are stored on
the lower-level device <option>/dev/sda7</option>. The connection between the hosts uses
protocol C.</para>
<para>Please refer to the <ulink
url="http://www.drbd.org/users-guide/"><citetitle>DRBD User's Guide</citetitle></ulink>
for more examples.</para>
</refsect1>
<refsect1>
<title>File Format</title>
<para>DRBD configuration files consist of sections, which contain other
sections and parameters depending on the section types. Each section
consists of one or more keywords, sometimes a section name, an opening
brace (<quote>{</quote>), the section's contents, and a closing brace
(<quote>}</quote>). Parameters inside a section consist of a keyword,
followed by one or more keywords or values, and a semicolon
(<quote>;</quote>).</para>
<para>Some parameter values have a default scale which applies when a plain
number is specified (for example Kilo, or 1024 times the numeric value).
Such default scales can be overridden by using a suffix (for example,
<option>M</option> for Mega). The common suffixes <option>K</option> =
2^10 = 1024, <option>M</option> = 1024 K, and <option>G</option> = 1024 M
are supported.</para>
<para>Comments start with a hash sign (<quote>#</quote>) and extend to the
end of the line. In addition, any section can be prefixed with the keyword
<option>skip</option>, which causes the section and any sub-sections to be
ignored.</para>
<para>Additional files can be included with the <option>include
<replaceable>file-pattern</replaceable></option> statement (see
<citerefentry><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for the expressions supported in <replaceable>file-pattern</replaceable>).
Include statements are only allowed outside of sections.</para>
<para>The following sections are defined (indentation indicates in
which context):
<programlisting>
common
[disk]
[handlers]
[net]
[options]
[startup]
global
resource
connection
path
net
volume
peer-device-options
[peer-device-options]
connection-mesh
net
[disk]
floating
handlers
[net]
on
volume
disk
[disk]
options
stacked-on-top-of
startup</programlisting>
Sections in brackets affect other parts of the configuration: inside the
<option>common</option> section, they apply to all resources. A
<option>disk</option> section inside a <option>resource</option> or
<option>on</option> section applies to all volumes of that resource, and a
<option>net</option> section inside a <option>resource</option> section
applies to all connections of that resource. This allows to avoid repeating
identical options for each resource, connection, or volume. Options can
be overridden in a more specific <option>resource</option>,
<option>connection</option>, <option>on</option>, or
<option>volume</option> section.</para>
<para><option>peer-device-options</option> are
<option>resync-rate</option>, <option>c-plan-ahead</option>, <option>c-delay-target</option>,
<option>c-fill-target</option>, <option>c-max-rate</option> and <option>c-min-rate</option>.
Due to backward comapatibility they can be specified in any disk options section as well.
They are inherited into all relevant connections. If they are given on <option>connection</option>
level they are inherited to all volumes on that connection. A <option>peer-device-options</option>
section is started with the <option>disk</option> keyword.</para>
<refsect2>
<title>Sections</title>
<variablelist>
<varlistentry>
<term><option>common</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>common</secondary>
</indexterm> This section can contain each a
<option>disk</option>, <option>handlers</option>,
<option>net</option>, <option>options</option>, and
<option>startup</option> section. All resources inherit the
parameters in these sections as their default values.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>connection <replaceable><optional>name</optional></replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>connection</secondary>
</indexterm> Define a connection between two hosts. This section
must contain two <option>host</option> parameters or multiple
<option>path sections</option>.
The optional <replaceable>name</replaceable> is
used to refer to the connection in the system log and in other
messages. If no name is specified, the peer's host name
is used instead.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>path</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>path</secondary>
</indexterm> Define a path between two hosts. This section
must contain two <option>host</option> parameters.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>connection-mesh</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>connection-mesh</secondary>
</indexterm> Define a connection mesh between multiple hosts. This section
must contain a <option>hosts</option> parameter, which has the
host names as arguments. This section is a shortcut to define many
connections which share the same network options.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>disk</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>disk</secondary>
</indexterm> Define parameters for a volume. All parameters in
this section are optional.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>floating <replaceable><optional>address-family</optional></replaceable> <replaceable>addr</replaceable>:<replaceable>port</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>floating</secondary>
</indexterm> Like the <option>on</option> section, except that
instead of the host name a network address is used to
determine if it matches a <option>floating</option>
section.</para>
<para>The <option>node-id</option> parameter in this section is
required. If the <option>address</option> parameter is not
provided, no connections to peers will be created by default.
The <option>device</option>, <option>disk</option>, and
<option>meta-disk</option> parameters must be defined in, or
inherited by, this section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>global</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>global</secondary>
</indexterm> Define some global parameters. All parameters in
this section are optional. Only one <option>global</option>
section is allowed in the configuration.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>handlers</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>handlers</secondary>
</indexterm> Define handlers to be invoked when certain events
occur. The kernel passes the resource name in the first
command-line argument and sets the following environment
variables depending on the event's context:
<itemizedlist>
<listitem>
<para>For events related to a particular device:
the device's minor number in
<option>DRBD_MINOR</option>, the device's volume number
in <option>DRBD_VOLUME</option>.
</para>
</listitem>
<listitem>
<para>For events related to a particular device on a
particular peer: the connection endpoints in
<option>DRBD_MY_ADDRESS</option>,
<option>DRBD_MY_AF</option>,
<option>DRBD_PEER_ADDRESS</option>, and
<option>DRBD_PEER_AF</option>; the device's local minor
number in <option>DRBD_MINOR</option>, and the device's volume
number in <option>DRBD_VOLUME</option>.
</para>
</listitem>
<listitem>
<para>For events related to a particular connection: the
connection endpoints in <option>DRBD_MY_ADDRESS</option>,
<option>DRBD_MY_AF</option>,
<option>DRBD_PEER_ADDRESS</option>, and
<option>DRBD_PEER_AF</option>; and, for each device defined for
that connection: the device's minor number in
<option>DRBD_MINOR_<replaceable>volume-number</replaceable></option>.
</para>
</listitem>
<listitem>
<para>For events that identify a device, if a lower-level
device is attached, the lower-level device's device name is
passed in <option>DRBD_BACKING_DEV</option> (or
<option>DRBD_BACKING_DEV_<replaceable>volume-number</replaceable></option>).
</para>
</listitem>
</itemizedlist>
</para>
<para>All parameters in this section are optional. Only a single
handler can be defined for each event; if no handler is defined,
nothing will happen.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><anchor xml:id="net"/><option>net</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>net</secondary>
</indexterm> Define parameters for a connection. All parameters
in this section are optional.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>on</option> <option><replaceable>host-name</replaceable></option> <replaceable><optional>...</optional></replaceable></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>on</secondary>
</indexterm> Define the properties of a resource on a particular
host or set of hosts. Specifying more than one host name can
make sense in a setup with IP address failover, for
example. The <replaceable>host-name</replaceable> argument must
match the Linux host name (<option>uname -n</option>).</para>
<para>Usually contains or inherits at least one
<option>volume</option> section. The <option>node-id</option> and
<option>address</option> parameters must be defined in this
section. The <option>device</option>, <option>disk</option>, and
<option>meta-disk</option> parameters must be defined in, or
inherited by, this section.</para>
<para>A normal configuration file contains two or more
<option>on</option> sections for each resource. Also see the
<option>floating</option> section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>options</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>options</secondary>
</indexterm> Define parameters for a resource. All parameters
in this section are optional.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>resource</option> <option><replaceable>name</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>resource</secondary>
</indexterm> Define a resource. Usually contains at least two
<option>on</option> sections and at least one
<option>connection</option> section. <!-- FIXME? auto-mesh? --></para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>stacked-on-top-of <replaceable>resource</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>stacked-on-top-of</secondary>
</indexterm> Used instead of an <option>on</option> section for
configuring a stacked resource with three to four nodes.</para>
<para>Starting with DRBD 9, stacking is deprecated. It is advised
to use resources which are replicated among more than two nodes
instead.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>startup</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>startup</secondary>
</indexterm> The parameters in this section determine the
behavior of a resource at startup time.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>volume</option> <option><replaceable>volume-number</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>volume</secondary>
</indexterm> Define a volume within a resource. The volume
numbers in the various <option>volume</option> sections of a
resource define which devices on which hosts form a replicated
device.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>connection</option> Parameters</title>
<variablelist>
<varlistentry>
<term><option>host <replaceable>name</replaceable></option>
<optional><option>address
<optional>address-family</optional>
<replaceable>address</replaceable></option></optional>
<optional><option>port
<replaceable>port-number</replaceable></option></optional></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>host</secondary>
</indexterm>
Defines an endpoint for a connection. Each <option>host</option>
statement refers to an <option>on</option> section in a resource.
If a port number is defined, this endpoint will use the specified
port instead of the port defined in the <option>on</option>
section. Each <option>connection</option> section must contain
exactly two <option>host</option> parameters. Instead of two
<option>host</option> parameters the connection may contain
multiple <option>path</option> sections.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>path</option> Parameters</title>
<variablelist>
<varlistentry>
<term><option>host <replaceable>name</replaceable></option>
<optional><option>address
<optional>address-family</optional>
<replaceable>address</replaceable></option></optional>
<optional><option>port
<replaceable>port-number</replaceable></option></optional></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>host</secondary>
</indexterm>
Defines an endpoint for a connection. Each <option>host</option>
statement refers to an <option>on</option> section in a resource.
If a port number is defined, this endpoint will use the specified
port instead of the port defined in the <option>on</option>
section. Each <option>path</option> section must contain
exactly two <option>host</option> parameters.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>connection-mesh</option> Parameters</title>
<variablelist>
<varlistentry>
<term><option>hosts <arg choice="plain" rep="repeat"><replaceable>name</replaceable></arg></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>host</secondary>
</indexterm>
Defines all nodes of a mesh. Each
<option><replaceable>name</replaceable></option> refers to an
<option>on</option> section in a resource. The port
that is defined in the <option>on</option> section will
be used.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>disk</option> Parameters</title>
<variablelist>
<pick_drbdsetup_option name="al-extents"/>
<pick_drbdsetup_option name="al-updates"/>
<pick_drbdsetup_option name="disk-barrier"/>
<pick_drbdsetup_option name="disk-timeout"/>
<pick_drbdsetup_option name="md-flushes"/>
<pick_drbdsetup_option name="on-io-error"/>
<pick_drbdsetup_option name="read-balancing"/>
<pick_drbdsetup_option name="resync-after"/>
<pick_drbdsetup_option name="rs-discard-granularity"/>
<pick_drbdsetup_option name="discard-zeroes-if-aligned"/>
<!-- <pick_drbdsetup_option name="size"/> -->
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>peer-device-options</option> Parameters</title>
<para>Please not that you open the section with the <option>disk</option> keyword.</para>
<variablelist>
<pick_drbdsetup_option name="c-delay-target"/>
<pick_drbdsetup_option name="c-min-rate"/>
<pick_drbdsetup_option name="resync-rate"/>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>global</option> Parameters</title>
<variablelist>
<pick_drbdsetup_option name="dialog-refresh"/>
<pick_drbdsetup_option name="disable-ip-verification"/>
<pick_drbdsetup_option name="usage-count"/>
<pick_drbdsetup_option name="udev-always-use-vnr"/>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>handlers</option> Parameters</title>
<variablelist>
<varlistentry>
<term><option>after-resync-target <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>after-resync-target</secondary>
</indexterm> Called on a resync target when a node state
changes from <option>Inconsistent</option> to <option>Consistent</option> when a resync finishes.
This handler can be used for removing the snapshot created in the
<option>before-resync-target</option> handler.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>before-resync-target <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>before-resync-target</secondary>
</indexterm> Called on a resync target before a resync begins.
This handler can be used for creating a snapshot of the
lower-level device for the duration of the resync: if the resync
source becomes unavailable during a resync, reverting to the
snapshot can restore a consistent state.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>fence-peer <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>fence-peer</secondary>
</indexterm> Called when a node should fence a resource on a
particular peer. The handler should not use the same
communication path that DRBD uses for talking to the peer.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>unfence-peer <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>unfence-peer</secondary>
</indexterm> Called when a node should remove fencing constraints
from other nodes.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>initial-split-brain <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>initial-split-brain</secondary>
</indexterm> Called when DRBD connects to a peer and detects that
the peer is in a split-brain state with the local node. This
handler is also called for split-brain scenarios which will be
resolved automatically.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>local-io-error <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>local-io-error</secondary>
</indexterm> Called when an I/O error occurs on a lower-level device.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>pri-lost <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>pri-lost</secondary>
</indexterm>
The local node is currently primary, but DRBD believes that it
should become a sync target. The node should give up its primary
role.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>pri-lost-after-sb <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>pri-lost-after-sb</secondary>
</indexterm> The local node is currently primary, but it has lost
the after-split-brain auto recovery procedure. The node should be
abandoned. <!-- FIXME: What is "abandon a node" supposed to mean? --></para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>pri-on-incon-degr <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>pri-on-incon-degr</secondary>
</indexterm> The local node is primary, and neither the local
lower-level device nor a lower-level device on a peer is up to
date. (The primary has no device to read from or to write
to.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>split-brain <replaceable>cmd</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>split-brain</secondary>
</indexterm> DRBD has detected a split-brain situation which
could not be resolved automatically. Manual recovery is
necessary. This handler can be used to call for administrator
attention.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>net</option> Parameters</title>
<variablelist>
<pick_drbdsetup_option name="after-sb-0pri"/>
<pick_drbdsetup_option name="after-sb-1pri"/>
<pick_drbdsetup_option name="after-sb-2pri"/>
<pick_drbdsetup_option name="allow-two-primaries"/>
<pick_drbdsetup_option name="always-asbp"/>
<pick_drbdsetup_option name="connect-int"/>
<pick_drbdsetup_option name="cram-hmac-alg"/>
<pick_drbdsetup_option name="csums-alg"/>
<pick_drbdsetup_option name="csums-after-crash-only"/>
<pick_drbdsetup_option name="data-integrity-alg"/>
<pick_drbdsetup_option name="fencing"/>
<pick_drbdsetup_option name="ko-count"/>
<pick_drbdsetup_option name="max-buffers"/>
<pick_drbdsetup_option name="max-epoch-size"/>
<pick_drbdsetup_option name="on-congestion"/>
<pick_drbdsetup_option name="ping-int"/>
<pick_drbdsetup_option name="ping-timeout"/>
<pick_drbdsetup_option name="socket-check-timeout"/>
<pick_drbdsetup_option name="protocol"/>
<pick_drbdsetup_option name="rcvbuf-size"/>
<pick_drbdsetup_option name="rr-conflict"/>
<pick_drbdsetup_option name="shared-secret"/>
<pick_drbdsetup_option name="sndbuf-size"/>
<pick_drbdsetup_option name="tcp-cork"/>
<pick_drbdsetup_option name="timeout"/>
<pick_drbdsetup_option name="use-rle"/>
<pick_drbdsetup_option name="verify-alg"/>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>on</option> Parameters</title>
<variablelist>
<varlistentry>
<term><option>address
<replaceable><optional>address-family</optional></replaceable>
<replaceable>address</replaceable>:<replaceable>port</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>address</secondary>
</indexterm> Defines the address family, address, and port of a
connection endpoint.</para>
<para>The address families <option>ipv4</option>,
<option>ipv6</option>, <option>ssocks</option> (Dolphin
Interconnect Solutions' "super sockets"), <option>sdp</option>
(Infiniband Sockets Direct Protocol), and <option>sci</option>
are supported (<option>sci</option> is an alias for
<option>ssocks</option>). If no address family is specified,
<option>ipv4</option> is assumed. For all address families
except <option>ipv6</option>, the address is specified in IPV4
address notation (for example, 1.2.3.4). For
<option>ipv6</option>, the address is enclosed in brackets and
uses IPv6 address notation (for example, <literal
moreinfo="none">[fd01:2345:6789:abcd::1]</literal>). The port
is always specified as a decimal number from 1 to 65535.</para>
<para>On each host, the port numbers must be unique for each
address; ports cannot be shared.</para>
<!-- FIXME: The port should be made optional to avoid duplicate
information here and in the connection sections. -->
</listitem>
</varlistentry>
<varlistentry>
<term><option>node-id <replaceable>value</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>node-id</secondary>
</indexterm>
Defines the unique node identifier for a node in the cluster.
Node identifiers are used to identify individual nodes in the
network protocol, and to assign bitmap slots to nodes in the
metadata.</para>
<para>Node identifiers can only be reasssigned in a cluster when
the cluster is down. It is essential that the node identifiers
in the configuration and in the device metadata are changed
consistently on all hosts. To change the metadata, dump the
current state with <command>drbdmeta dump-md</command>, adjust the bitmap slot
assignment, and update the metadata with
<command>drbdmeta restore-md</command>.</para>
<para>The <option>node-id</option> parameter exists since DRBD 9.
Its value ranges from 0 to 16; there is no default.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>options</option> Parameters (Resource Options)</title>
<variablelist>
<pick_drbdsetup_option name="auto-promote"/>
<pick_drbdsetup_option name="cpu-mask"/>
<pick_drbdsetup_option name="on-no-data-accessible"/>
<pick_drbdsetup_option name="peer-ack-window"/>
<pick_drbdsetup_option name="peer-ack-delay"/>
<pick_drbdsetup_option name="quorum"/>
<pick_drbdsetup_option name="on-no-quorum"/>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>startup</option> Parameters</title>
<para>The parameters in this section define the behavior of DRBD at
system startup time, in the DRBD init script. They have no effect once
the system is up and running.</para>
<variablelist>
<pick_drbdsetup_option name="degr-wfc-timeout"/>
<pick_drbdsetup_option name="outdated-wfc-timeout"/>
<varlistentry>
<term><option>stacked-timeouts</option></term>
<listitem>
<para>On stacked devices, the <option>wfc-timeout</option> and
<option>degr-wfc-timeout</option> parameters in the configuration
are usually ignored, and both timeouts are set to twice the
<option>connect-int</option> timeout. The
<option>stacked-timeouts</option> parameter tells DRBD to use the
<option>wfc-timeout</option> and
<option>degr-wfc-timeout</option> parameters as defined in the
configuration, even on stacked devices. Only use this parameter
if the peer of the stacked resource is usually not available, or
will not become primary. Incorrect use of this parameter can
lead to unexpected split-brain scenarios.</para>
</listitem>
</varlistentry>
<pick_drbdsetup_option name="wait-after-sb"/>
<pick_drbdsetup_option name="wfc-timeout"/>
</variablelist>
</refsect2>
<refsect2>
<title>Section <option>volume</option> Parameters</title>
<variablelist>
<varlistentry>
<term><option>device /dev/drbd<replaceable>minor-number</replaceable></option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>device</secondary>
</indexterm> Define the device name and minor number of a
replicated block device. This is the device that applications
are supposed to access; in most cases, the device is not used
directly, but as a file system. This parameter is required and
the standard device naming convention is assumed.</para>
<para>In addition to this device, udev will create
<option>/dev/drbd/by-res/<replaceable>resource</replaceable>/<replaceable>volume</replaceable></option>
and <option>/dev/drbd/by-disk/<replaceable>lower-level-device</replaceable></option>
symlinks to the device.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>disk</option>
<group choice="req" rep="norepeat">
<arg rep="norepeat">disk</arg>
<arg choice="plain" rep="norepeat"><option>none</option></arg>
</group>
</term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>disk</secondary>
</indexterm> Define the lower-level block device that DRBD will
use for storing the actual data. While the replicated drbd
device is configured, the lower-level device must not be used directly.
Even read-only access with tools like <citerefentry>
<refentrytitle>dumpe2fs</refentrytitle>
<manvolnum>8</manvolnum> </citerefentry> and similar is not
allowed. The keyword <option>none</option> specifies that no
lower-level block device is configured; this also overrides
inheritance of the lower-level device.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>meta-disk internal</option></term>
<term><option>meta-disk <replaceable>device</replaceable></option></term>
<term><option>meta-disk <replaceable>device</replaceable> [<replaceable>index</replaceable>]</option></term>
<listitem>
<para><indexterm significance="normal">
<primary>drbd.conf</primary>
<secondary>meta-disk</secondary>
</indexterm> Define where the metadata of a replicated block
device resides: it can be <option>internal</option>, meaning that the lower-level
device contains both the data and the metadata, or on a separate
device.</para>
<para>When the <replaceable>index</replaceable> form of this
parameter is used, multiple replicated devices can share the same
metadata device, each using a separate index. Each index
occupies 128 MiB of data, which corresponds to a replicated
device size of at most 4 TiB with two cluster nodes. We
recommend not to share metadata devices anymore, and to instead
use the lvm volume manager for creating metadata devices as
needed.</para>
<para>When the <replaceable>index</replaceable> form of this
parameter is not used, the size of the lower-level device
determines the size of the metadata. The size needed is 36 KiB +
(size of lower-level device) / 32K * (number of nodes - 1). If <!-- FIXME: al-striping, al-extents 65536? -->
the metadata device is bigger than that, the extra space is not
used.</para>
<para>This parameter is required if a <option>disk</option> other
than <option>none</option> is specified, and ignored if
<option>disk</option> is set to <option>none</option>. A
<option>meta-disk</option> parameter without a
<option>disk</option> parameter is not allowed.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect2>
</refsect1>
<refsect1 id="data-integrity">
<title>Notes on data integrity</title>
<para>DRBD supports two different mechanisms for data integrity checking:
first, the <option>data-integrity-alg</option> network parameter allows
to add a checksum to the data sent over the network. Second, the online
verification mechanism (<command moreinfo="none">drbdadm verify</command>
and the <option>verify-alg</option> parameter) allows to check for
differences in the on-disk data.</para>
<para>Both mechanisms can produce false positives if the data is modified
during I/O (i.e., while it is being sent over the network or written to
disk). This does not always indicate a problem: for example, some
file systems and applications do modify data under I/O for certain
operations. Swap space can also undergo changes while under I/O.</para>
<para>Network data integrity checking tries to identify data modification
during I/O by verifying the checksums on the sender side after sending the
data. If it detects a mismatch, it logs an error. The receiver also
logs an error when it detects a mismatch. Thus, an error logged only on
the receiver side indicates an error on the network, and an error logged
on both sides indicates data modification under I/O.</para>
<para>The most recent example of systematic data corruption was identified
as a bug in the TCP offloading engine and driver of a certain type of
GBit NIC in 2007: the data corruption happened on the DMA transfer from
core memory to the card. Because the TCP checksum were calculated on the
card, the TCP/IP protocol checksums did not reveal this problem.</para>
</refsect1>
<refsect1>
<title>Version</title>
<simpara>This document was revised for version 9.0.0 of the DRBD distribution.</simpara>
</refsect1>
<refsect1>
<title>Author</title>
<simpara>Written by Philipp Reisner <email>philipp.reisner@linbit.com</email> and Lars
Ellenberg <email>lars.ellenberg@linbit.com</email>.</simpara>
</refsect1>
<refsect1>
<title>Reporting Bugs</title>
<simpara>Report bugs to <email>drbd-user@lists.linbit.com</email>.</simpara>
</refsect1>
<refsect1>
<title>Copyright</title>
<simpara>Copyright 2001-2012 LINBIT Information Technologies, Philipp Reisner, Lars Ellenberg.
This is free software; see the source for copying conditions. There is NO warranty; not even
for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</simpara>
</refsect1>
<refsect1>
<title>See Also</title>
<para><citerefentry>
<refentrytitle>drbd</refentrytitle>
<manvolnum>8</manvolnum>
</citerefentry>, <citerefentry>
<refentrytitle>drbddisk</refentrytitle>
<manvolnum>8</manvolnum>
</citerefentry>, <citerefentry>
<refentrytitle>drbdsetup</refentrytitle>
<manvolnum>8</manvolnum>
</citerefentry>, <citerefentry>
<refentrytitle>drbdadm</refentrytitle>
<manvolnum>8</manvolnum>
</citerefentry>,
<ulink url="http://www.drbd.org/users-guide/"><citetitle>DRBD User's Guide</citetitle></ulink>,
<ulink url="http://www.drbd.org/"><citetitle>DRBD Web Site</citetitle></ulink></para>
</refsect1>
</refentry>