Author: mcbrown
Date: 2008-01-10 18:02:09 +0100 (Thu, 10 Jan 2008)
New Revision: 9551
Log:
Adding a section on Heartbeat, including basic usage and using Heartbeat with MySQL and
DRBD
Adding a section on using DRBD/Heartbeat and the dopd extension to avoid 'split-brain
failure', where you end up with two different versions of the MySQL data
Adding a section on kernel panic and oops handling to ensure that problems trigger a
reboot (And hopefully a Heartbeat failover)
Added:
trunk/refman-common/ha-heartbeat.xml
trunk/refman-common/images/published/ha-heartbeat-overview.png
Modified:
trunk/refman-5.0/Makefile.depends
trunk/refman-5.0/ha.xml
trunk/refman-5.1/Makefile.depends
trunk/refman-5.1/ha.xml
trunk/refman-6.0/Makefile.depends
trunk/refman-6.0/ha.xml
trunk/refman-common/connector-odbc.xml
trunk/refman-common/images/source/drbd-set.graffle
Property changes on: trunk/refman-common/images/published/ha-heartbeat-overview.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/refman-5.0/Makefile.depends
===================================================================
--- trunk/refman-5.0/Makefile.depends 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-5.0/Makefile.depends 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 4, Lines Added: 6, Lines Deleted: 0; 2464 bytes
@@ -696,6 +696,7 @@
../refman-5.0/metadata/internationalization.idmap \
../refman-5.0/metadata/optimization.idmap \
../refman-5.0/metadata/programs-admin-util-core.idmap \
+ ../refman-5.0/metadata/programs-admin-util.idmap \
../refman-5.0/metadata/replication-implementation.idmap \
../refman-5.0/metadata/sql-syntax.idmap
dynxml-local-programs-admin-util.validpure: $(dynxml_local_programs_admin_util_SOURCES)
@@ -755,6 +756,7 @@
../refman-5.0/metadata/installing-outline.idmap \
../refman-5.0/metadata/programs-admin-util-core.idmap \
../refman-5.0/metadata/programs-server-core.idmap \
+ ../refman-5.0/metadata/programs-server.idmap \
../refman-5.0/metadata/programs-using.idmap
dynxml-local-programs-server.validpure: $(dynxml_local_programs_server_SOURCES)
dynxml-local-programs-server.titles: $(dynxml_local_programs_server_SOURCES)
@@ -1779,11 +1781,13 @@
../refman-5.0/metadata/optimization.idmap \
../refman-5.0/metadata/precision-math.idmap \
../refman-5.0/metadata/programs-admin-util-core.idmap \
+ ../refman-5.0/metadata/programs-admin-util.idmap \
../refman-5.0/metadata/programs-client-core.idmap \
../refman-5.0/metadata/programs-development.idmap \
../refman-5.0/metadata/programs-installation.idmap \
../refman-5.0/metadata/programs-miscellaneous.idmap \
../refman-5.0/metadata/programs-server-core.idmap \
+ ../refman-5.0/metadata/programs-server.idmap \
../refman-5.0/metadata/programs-using.idmap \
../refman-5.0/metadata/programs.idmap \
../refman-5.0/metadata/releasenotes-cs.idmap \
@@ -2499,11 +2503,13 @@
../refman-5.0/metadata/mysql-cluster.idmap \
../refman-5.0/metadata/optimization.idmap \
../refman-5.0/metadata/programs-admin-util-core.idmap \
+ ../refman-5.0/metadata/programs-admin-util.idmap \
../refman-5.0/metadata/programs-client-core.idmap \
../refman-5.0/metadata/programs-development.idmap \
../refman-5.0/metadata/programs-installation.idmap \
../refman-5.0/metadata/programs-miscellaneous.idmap \
../refman-5.0/metadata/programs-server-core.idmap \
+ ../refman-5.0/metadata/programs-server.idmap \
../refman-5.0/metadata/programs-using.idmap \
../refman-5.0/metadata/replication-implementation.idmap \
../refman-5.0/metadata/restrictions.idmap \
Modified: trunk/refman-5.0/ha.xml
===================================================================
--- trunk/refman-5.0/ha.xml 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-5.0/ha.xml 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 1, Lines Added: 2, Lines Deleted: 0; 461 bytes
@@ -446,4 +446,6 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../refman-common/replication-drbd.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../refman-common/ha-heartbeat.xml"/>
+
</chapter>
Modified: trunk/refman-5.1/Makefile.depends
===================================================================
--- trunk/refman-5.1/Makefile.depends 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-5.1/Makefile.depends 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 4, Lines Added: 7, Lines Deleted: 1; 2204 bytes
@@ -961,15 +961,18 @@
../common/phrases.ent \
../refman-common/../common/fixedchars.ent \
../refman-common/all-entities.ent \
+ ../refman-common/ha-heartbeat.xml \
../refman-common/images/published/drbd-main.png \
../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png \
../refman-common/replication-drbd.xml \
../refman-common/urls.ent \
all-entities.ent \
versions.ent
ha_IMAGES = \
../refman-common/images/published/drbd-main.png \
- ../refman-common/images/published/drbd-sepinterface.png
+ ../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png
ha_SOURCES = ha.xml $(ha_INCLUDES)
ha_IDMAPS = \
../refman-5.1/metadata/faqs.idmap \
@@ -1180,6 +1183,7 @@
../refman-common/connector-php.xml \
../refman-common/connector-vstudioplugin.xml \
../refman-common/credits.xml \
+ ../refman-common/ha-heartbeat.xml \
../refman-common/images/published/PSEArch.png \
../refman-common/images/published/active-master-mysql-server.png \
../refman-common/images/published/blackhole-1.png \
@@ -1196,6 +1200,7 @@
../refman-common/images/published/cnet-win-install-step4.png \
../refman-common/images/published/drbd-main.png \
../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png \
../refman-common/images/published/multi-comp-1.png \
../refman-common/images/published/multi-db.png \
../refman-common/images/published/myaccess-odbc.png \
@@ -1373,6 +1378,7 @@
../refman-common/images/published/cnet-win-install-step4.png \
../refman-common/images/published/drbd-main.png \
../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png \
../refman-common/images/published/multi-comp-1.png \
../refman-common/images/published/multi-db.png \
../refman-common/images/published/myaccess-odbc.png \
Modified: trunk/refman-5.1/ha.xml
===================================================================
--- trunk/refman-5.1/ha.xml 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-5.1/ha.xml 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 1, Lines Added: 2, Lines Deleted: 0; 461 bytes
@@ -446,4 +446,6 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../refman-common/replication-drbd.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../refman-common/ha-heartbeat.xml"/>
+
</chapter>
Modified: trunk/refman-6.0/Makefile.depends
===================================================================
--- trunk/refman-6.0/Makefile.depends 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-6.0/Makefile.depends 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 5, Lines Added: 7, Lines Deleted: 2; 2560 bytes
@@ -432,7 +432,6 @@
../refman-6.0/metadata/replication-implementation.idmap \
../refman-6.0/metadata/replication-notes.idmap \
../refman-6.0/metadata/replication.idmap \
- ../refman-6.0/metadata/se-falcon-core.idmap \
../refman-6.0/metadata/se-innodb-core.idmap \
../refman-6.0/metadata/se-myisam-core.idmap \
../refman-6.0/metadata/sql-syntax.idmap \
@@ -981,15 +980,18 @@
../common/phrases.ent \
../refman-common/../common/fixedchars.ent \
../refman-common/all-entities.ent \
+ ../refman-common/ha-heartbeat.xml \
../refman-common/images/published/drbd-main.png \
../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png \
../refman-common/replication-drbd.xml \
../refman-common/urls.ent \
all-entities.ent \
versions.ent
ha_IMAGES = \
../refman-common/images/published/drbd-main.png \
- ../refman-common/images/published/drbd-sepinterface.png
+ ../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png
ha_SOURCES = ha.xml $(ha_INCLUDES)
ha_IDMAPS = \
../refman-6.0/metadata/faqs.idmap \
@@ -1196,6 +1198,7 @@
../refman-common/connector-php.xml \
../refman-common/connector-vstudioplugin.xml \
../refman-common/credits.xml \
+ ../refman-common/ha-heartbeat.xml \
../refman-common/images/published/PSEArch.png \
../refman-common/images/published/active-master-mysql-server.png \
../refman-common/images/published/blackhole-1.png \
@@ -1212,6 +1215,7 @@
../refman-common/images/published/cnet-win-install-step4.png \
../refman-common/images/published/drbd-main.png \
../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png \
../refman-common/images/published/multi-comp-1.png \
../refman-common/images/published/multi-db.png \
../refman-common/images/published/myaccess-odbc.png \
@@ -1391,6 +1395,7 @@
../refman-common/images/published/cnet-win-install-step4.png \
../refman-common/images/published/drbd-main.png \
../refman-common/images/published/drbd-sepinterface.png \
+ ../refman-common/images/published/ha-heartbeat-overview.png \
../refman-common/images/published/multi-comp-1.png \
../refman-common/images/published/multi-db.png \
../refman-common/images/published/myaccess-odbc.png \
Modified: trunk/refman-6.0/ha.xml
===================================================================
--- trunk/refman-6.0/ha.xml 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-6.0/ha.xml 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 1, Lines Added: 2, Lines Deleted: 0; 461 bytes
@@ -446,4 +446,6 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../refman-common/replication-drbd.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="../refman-common/ha-heartbeat.xml"/>
+
</chapter>
Modified: trunk/refman-common/connector-odbc.xml
===================================================================
--- trunk/refman-common/connector-odbc.xml 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-common/connector-odbc.xml 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 1, Lines Added: 8, Lines Deleted: 1; 935 bytes
@@ -9110,7 +9110,14 @@
</answer>
</qandaentry>
-
+ <qandaentry>
+ <question><para>I can correctly store extended characters in the
database (Hebrew/CJK) using C/ODBC 5.1, but when I retrieve the data, the text is not
formatted correctly and I get garbled characters. </para></question>
+ <answer><para>When using ASP and UTF8 characters you should add the
following to your ASP files to ensure that the data returned is correctly
encoded:</para>
+ <programlisting>Response.CodePage = 65001
+Response.CharSet = "utf-8"</programlisting></answer>
+ </qandaentry>
+
+
</qandaset>
</section>
Added: trunk/refman-common/ha-heartbeat.xml
===================================================================
--- trunk/refman-common/ha-heartbeat.xml (rev 0)
+++ trunk/refman-common/ha-heartbeat.xml 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 1, Lines Added: 522, Lines Deleted: 0; 19704 bytes
@@ -0,0 +1,522 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % all.entities SYSTEM "all-entities.ent">
+ %all.entities;
+]>
+<section id="ha-heartbeat">
+
+ <title>Using Linux HA Heartbeat</title>
+
+ <para>
+ The Heartbeat program provides a basis for verifying the
+ availability of resources on one or more systems within a cluster.
+ In this context a resource includes MySQL, the filesystems on which
+ the MySQL data is being stored and, if you are using DRBD, the DRBD
+ device being used for the filesystem. Heartbeat also manages a
+ virtual IP address, and the virtual IP address should be used for
+ all communication to the MySQL instance.
+ </para>
+
+ <para>
+ A cluster within the context of Heartbeat is defined as two
+ computers notionally providing the same service. By definition, each
+ computer in the cluster is physically capable of providing the same
+ services as all the others in the cluster. However, because the
+ cluster is designed for high-availability, only one of the servers
+ is actively providing the service at any one time. Each additional
+ server within the cluster is a 'hot-spare' that can be brought into
+ service in the event of a failure of the master, it's next
+ connectivity or the connectivity of the network in general.
+ </para>
+
+ <para>
+ The basics of Heartbeat are very simple. Within the Heartbeat
+ cluster (see <xref linkend="ha-heartbeat-overview"/>, each machine
+ sends a 'heartbeat' signal to the other hosts in the cluster. The
+ other cluster nodes monitor this heartbeat. The heartbeat can be
+ transmitted over many different systems, including shared network
+ devices, dedicated network interfaces and serial connections.
+ Failure to get a heartbeat from a node is treated as failure of the
+ node. Although we don't know the reason for the failure (it could be
+ an OS failure, a hardware failure in the server, or a failure in the
+ network switch), it is safe to assume that if no heartbeat is
+ produced there is a fault.
+ </para>
+
+ <figure id="ha-heartbeat-overview">
+ <title>DRBD Architecture</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/published/ha-heartbeat-overview.png"
format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase lang="en">Heartbeat Architecture</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ In addition to checking the heartbeat from the server, the system
+ can also check the connectivity (using <command>ping</command>) to
+ another host on the network, such as the network router. This allows
+ Heartbeat to detect a failure of communication between a server and
+ the router (and therefore failure of the server, since it is no
+ longer capable of providing the necessary service), even if the
+ heartbeat between the servers in the clusters is working fine.
+ </para>
+
+ <para>
+ In the event of a failure, the resources on the failed host are
+ disabled, and the resources on one of the replacement hosts is
+ enabled instead. In addition, the Virtual IP address for the cluster
+ is redirected to the new host in place of the failed device.
+ </para>
+
+ <para>
+ When used with MySQL and DRBD, the MySQL data is replicated from the
+ master to the slave using the DRBD device, but MySQL is only running
+ on the master. When the master fails, the slave switches the DRBD
+ devices to be primary, the filesystems on those devices are mounted,
+ and MySQL is started. The original master (if still available) has
+ it's resources disabled, which means shutting down MySQL and
+ unmounting the filesystems and switching the DRBD device to
+ secondary.
+ </para>
+
+ <section id="ha-heartbeat-config">
+
+ <title>Heartbeat Configuration</title>
+
+ <para>
+ Heartbeat configuration requires three files located in
+ <filename>/etc/ha.d</filename>. The
<filename>ha.cf</filename>
+ contains the main heartbeat configuration, including the list of
+ the nodes and times for identifying failures.
+ <filename>haresources</filename> contains the list of resources to
+ be managed within the cluster. The <filename>authkeys</filename>
+ file contains the security information for the cluster.
+ </para>
+
+ <para>
+ The contents of these files should be identical on each host
+ within the Heartbeat cluster. It's important that you keep these
+ files in sync across all the hosts. Any changes in the information
+ on one host should be copied to the all the others.
+ </para>
+
+ <para>
+ For these examples n example of the <filename>ha.cf</filename>
+ file is shown below:
+ </para>
+
+<programlisting>logfacility local0
+keepalive 500ms
+deadtime 10
+warntime 5
+initdead 30
+mcast bond0 225.0.0.1 694 2 0
+mcast bond1 225.0.0.2 694 1 0
+auto_failback off
+node drbd1
+node drbd2</programlisting>
+
+ <para>
+ The individual lines in the file can be identified as follows:
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <literal>logfacility</literal> — sets the logging, in
+ this case setting the logging to use
+ <command>syslog</command>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>keepalive</literal> — defines how frequently
+ the heartbeat signal is sent to the other hosts.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>deadtime</literal>— the delay in seconds before
+ other hosts in the cluster are considered 'dead' (failed).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>warntime</literal> — the delay in seconds
+ before a warning is written to the log that a node cannot be
+ contacted.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>initdead</literal> — the period in seconds to
+ wait during system startup before the other host is considered
+ to be down.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>mcast</literal> — defines a method for sending
+ a heartbeat signal. In the above example, a multicast network
+ address is being used over a bonded network device. If you
+ have multiple clusters then the multicast address for each
+ cluster should be unique on your network. Other choices for
+ the heartbeat exchange exist, including a serial connection.
+ </para>
+
+ <para>
+ If you are using multiple network interfaces (for example, one
+ interface for your server connectivity and a secondary and/or
+ bonded interface for your DRBD data exchange) then you should
+ use both interfaces for your heartbeat connection. This
+ decreases the chance of a transient failure causing a invalid
+ failure event.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>auto_failback</literal> — sets whether the
+ original (preferred) server should be enabled again if it
+ becomes available. Switching this to <literal>on</literal> may
+ cause problems if the preferred went offline and then comes
+ back on line again. If the DRBD device has not been synced
+ properly, or if the problem with the original server happens
+ again you may end up with two different datasets on the two
+ servers, or with a continually changing environment where the
+ two servers flip-flop as the preferred server reboots and then
+ starts again.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>node</literal> — sets the nodes within the
+ Heartbeat cluster group. There should be one
+ <literal>node</literal> for each server.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>
+ An optional additional set of information provides the
+ configuration for a ping test that will check the connectivity to
+ another host. You should use this to ensure that you have
+ connectivity on the public interface for your servers, so the ping
+ test should be to a reliable host such as a router or switch. The
+ additional lines specify the destination machine for the
+ <literal>ping</literal>, which should be specified as an IP
+ address, rather than a hostname; the command to run when a failure
+ occurs, the authority for the failure and the timeout before an
+ non-response triggers a failure. A sample configure is shown
+ below:
+ </para>
+
+<programlisting>ping 10.0.0.1
+respawn hacluster /usr/lib64/heartbeat/ipfail
+apiauth ipfail gid=haclient uid=hacluster
+deadping 15</programlisting>
+
+ <para>
+ In the above example, the <command>ipfail</command> command, which
+ is part of the Heartbeat solution, is called on a failure and
+ 'fakes' a fault on the currently active server. You need to
+ configure the user and group ID under which the command should be
+ executed (using the <literal>apiauth</literal>). The failure will
+ be triggered after 15 seconds.
+ </para>
+
+ <para>
+ The <filename>auth_keys</filename> file holds the authorization
+ information for the Heartbeat cluster. The authorization relies on
+ a single unique 'key' that is used to verify the two machines in
+ the Heartbeat cluster. It is used only to confirm that the two
+ machines are in the same cluster and is used to ensure that the
+ </para>
+
+ </section>
+
+ <section id="ha-heartbeat-drbd">
+
+ <title>Using Heartbeat with MySQL and DRBD</title>
+
+ <para>
+ To use Heartbeat in combination with MySQL you should be using
+ DRBD (see <xref linkend="replication-drbd"/>) or another solution
+ that allows for sharing of the MySQL database files in event of a
+ system failure. In these examples, DRBD is used as the data
+ sharing solution.
+ </para>
+
+ <para>
+ Heartbeat manages the configuration of different resources to
+ manage the switching between two servers in the event of a
+ failure. The resource configuration defines the individual
+ services that should be brought up (or taken down) in the event of
+ a failure.
+ </para>
+
+ <para>
+ The <filename>haresources</filename> file within
+ <filename>/etc/ha.d</filename> defines the resources that should
+ be managed, and the individual resource mentioned in this file in
+ turn relates to scripts located within
+ <filename>/etc/ha.d/resource.d</filename>. The resource definition
+ is defined all on one line:
+ </para>
+
+<programlisting>drbd1 drbddisk Filesystem::/dev/drbd0::/drbd::ext3 mysql
10.0.0.100</programlisting>
+
+ <para>
+ The line is notionally split by whitespace. The first entry
+ (<literal>drbd1</literal>) is the name of the preferred host, i.e.
+ the server that is normally responsible for handling the service.
+ The last field is virtual IP address or name that should be used
+ to share the service. This is the IP address that should be used
+ to connect to the MySQL server. It will automatically be allocated
+ to the server that is active when Heartbeat starts.
+ </para>
+
+ <para>
+ The remaining fields between these two fields define the resources
+ that should be managed. Each Field should contain the name of the
+ resource (and each name should refer to a script within
+ <filename>/etc/ha.d/resource.d</filename>). In the event of a
+ failure, these resources are started on the backup server by
+ calling the corresponding script (with a single argument,
+ <literal>start</literal>), in order from left to right. If there
+ are additional arguments to the script, you can use a double colon
+ to separate each additional argument.
+ </para>
+
+ <para>
+ In the above example, we manage the following resources:
+ </para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>
+ <literal>drbddisk</literal> — the DRBD resource script,
+ this will switch the DRBD disk on the secondary host into
+ primary mode, making the device read/write.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>Filesystem</literal> — manages the Filesystem
+ resource. In this case we have supplied additional arguments
+ to specify the DRBD device, mount point and filesystem type.
+ When executed this should mount the specified filesystem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>mysql</literal> — manages the MySQL instances
+ and starts the MySQL server. You should copy the
+ <filename>mysql.resource</filename> file from the
+ <filename>support-files</filename> directory from any MySQL
+ release into the <filename>/etc/ha.d/resources.d</filename>
+ directory.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>
+ If you want to be notified of the failure by email, you can add
+ another line to the <filename>haresources</filename> file with the
+ address for warnings and the warning text:
+ </para>
+
+<programlisting>MailTo::youremail@stripped::DRBDFailure</programlisting>
+
+ <para>
+ With the Heartbeat configuration in place, copy the
+ <filename>haresources</filename>,
<filename>authkeys</filename>
+ and <filename>ha.cf</filename> files from your primary and
+ secondary servers to make sure that the configuration is
+ identical. Then start the Heartbeat service, either by calling
+ <filename>/etc/init.d/heartbeat start</filename> or by rebooting
+ both primary and secondary servers.
+ </para>
+
+ <para>
+ You can test the configuration by running a manual failover,
+ connect to the primary node and run:
+ </para>
+
+<programlisting># /usr/lib64/heartbeat/hb_standby</programlisting>
+
+ <para>
+ This will cause the current node to relinquish its resources
+ cleanly to the other node.
+ </para>
+
+ </section>
+
+ <section id="ha-heartbeat-drbd-dopd">
+
+ <title>Using Heartbeat with DRBD and
<command>dopd</command></title>
+
+ <para>
+ As a further extension to using DRBD and Heartbeat together, you
+ can enable <command>dopd</command>. The
<command>dopd</command>
+ daemon handles the situation where a DRBD node is out of date
+ compared to the master and prevents the slave from being promoted
+ to master in the event of a failure. This stops a situation where
+ you have two machines that have been masters ending up different
+ data on the underlying device.
+ </para>
+
+ <para>
+ For example, imagine that you have a two server DRBD setup, master
+ and slave. If the DRBD connectivity between master and slave fails
+ then the slave would be out of the sync with the master. If
+ Heartbeat identifies a connectivity issue for master and then
+ switches over to the slave, the slave DRBD device will be promoted
+ to the primary device, even though the data on the slave and the
+ master is not in synchronization.
+ </para>
+
+ <para>
+ In this situation, with <command>dopd</command> enabled, the
+ connectivity failure between the master and slave would be
+ identified and the metadata on the slave wold be set to
+ <literal>Outdated</literal>. Heartbeat will then refuse to switch
+ over to the slave even if the master failed. In a dual-host
+ solution this would effectively render the cluster out of action,
+ as there is no additional fail over server. In an HA cluster with
+ three or more servers, control would be passed to the slave that
+ has an up to date version of the DRBD device data.
+ </para>
+
+ <para>
+ To enable <command>dopd</command>, you need to modify the
+ Heartbeat configuration and specify <command>dopd</command> as
+ part of the commands executed during the monitoring process. Add
+ the following lines to your <filename>ha.cf</filename> file:
+ </para>
+
+<programlisting>respawn hacluster /usr/lib/heartbeat/dopd
+apiauth dopd gid=haclient uid=hacluster</programlisting>
+
+ <para>
+ Make sure you make the same modification on both your primary and
+ secondary nodes.
+ </para>
+
+ <para>
+ You will need to reload the Heartbeat configuration:
+ </para>
+
+<programlisting># /etc/init.d/heartbeat reload</programlisting>
+
+ <para>
+ You will also need to modify your DRBD configuration by
+ configuration the <literal>outdate-peer</literal> option. You will
+ need to add the configuration line into the
+ <literal>common</literal> section of
+ <filename>/etc/drbd.conf</filename> on both hosts. An example of
+ the full block is shown below:
+ </para>
+
+<programlisting>common {
+ handlers {
+ outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater";
+ }
+}</programlisting>
+
+ <para>
+ Finally, set the <literal>fencing</literal> option on your DRBD
+ configured resources:
+ </para>
+
+<programlisting>resource my-resource {
+ disk {
+ fencing resource-only;
+ }
+}</programlisting>
+
+ <para>
+ Now reload your DRBD configuration:
+ </para>
+
+<programlisting># drbdadmin adjust all</programlisting>
+
+ <para>
+ You can test the system by unplugging your DRBD link and
+ monitoring the output from <filename>/proc/drbd</filename>.
+ </para>
+
+ </section>
+
+ <section id="ha-heartbeat-errors">
+
+ <title>Dealing with System Level Errors</title>
+
+ <para>
+ Because a kernel panic or oops may indicate potential problem with
+ your server, you should configure your server to remove itself
+ from the cluster in the event of a problem. Typically on a kernel
+ panic your system will automatically trigger a hard reboot. For a
+ kernel oops a reboot may not happen automatically, but the issue
+ that caused that oops may still lead to potential problems.
+ </para>
+
+ <para>
+ You can force a reboot by setting the
+ <literal>kernel.panic</literal> and
+ <literal>kernel.panic_on_oops</literal> parameters of the kernel
+ control file <filename>/etc/sysctl.conf</filename>. For example:
+ </para>
+
+<programlisting>
+ kernel.panic_on_oops = 1
+ kernel.panic = 1
+ </programlisting>
+
+ <para>
+ You can also set these parameters during runtime by using the
+ <command>sysctl</command> command. You can either specify the
+ parameters on the command line:
+ </para>
+
+<programlisting>
+$ sysctl -w kernel.panic=1
+ </programlisting>
+
+ <para>
+ Or you can edit your <filename>sysctl.conf</filename> file and
+ then reload the configuration information:
+ </para>
+
+<programlisting>
+$ sysctl -p
+ </programlisting>
+
+ <para>
+ By setting both these parameters to a positive value (actually the
+ number of seconds to wait before triggering the reboot), the
+ system will reboot. Your second heartbeat node should then detect
+ that the server is down and then switch over to the failover host.
+ </para>
+
+ </section>
+
+</section>
Added: trunk/refman-common/images/published/ha-heartbeat-overview.png
===================================================================
Changed blocks: 0, Lines Added: 0, Lines Deleted: 0; 355 bytes
Modified: trunk/refman-common/images/source/drbd-set.graffle
===================================================================
--- trunk/refman-common/images/source/drbd-set.graffle 2008-01-10 15:35:20 UTC (rev 9550)
+++ trunk/refman-common/images/source/drbd-set.graffle 2008-01-10 17:02:09 UTC (rev 9551)
Changed blocks: 3, Lines Added: 902, Lines Deleted: 2; 23293 bytes
@@ -87,7 +87,7 @@
</dict>
</array>
<key>ModificationDate</key>
- <string>2008-01-09 14:20:33 +0000</string>
+ <string>2008-01-09 16:50:29 +0000</string>
<key>Modifier</key>
<string>Martin MC Brown, MySQL</string>
<key>NotesVisible</key>
@@ -1360,6 +1360,906 @@
<key>VPages</key>
<integer>1</integer>
</dict>
+ <dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>CanvasColor</key>
+ <dict>
+ <key>w</key>
+ <string>1</string>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>CanvasScale</key>
+ <real>1</real>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>DisplayScale</key>
+ <string>1 cm = 1 cm</string>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{50.5, 275.454}, {130, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>90</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>76</integer>
+ <key>Position</key>
+ <real>0.64223289489746094</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Real IP 192.168.0.200}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{376.182, 279}, {130, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>89</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>77</integer>
+ <key>Position</key>
+ <real>0.62406855821609497</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Real IP 192.168.0.100}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>85</integer>
+ <key>Info</key>
+ <integer>1</integer>
+ </dict>
+ <key>ID</key>
+ <integer>88</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>23.046566009521484</real>
+ <key>Points</key>
+ <array>
+ <string>{441.182, 166.987}</string>
+ <string>{279.754, 106.894}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>1</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>85</integer>
+ <key>Info</key>
+ <integer>1</integer>
+ </dict>
+ <key>ID</key>
+ <integer>87</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>23.046566009521484</real>
+ <key>Points</key>
+ <array>
+ <string>{115.5, 166.987}</string>
+ <string>{279.754, 106.894}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>1</integer>
+ <key>Info</key>
+ <integer>15</integer>
+ </dict>
+ <key>ID</key>
+ <integer>86</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>-1</real>
+ <key>Points</key>
+ <array>
+ <string>{189, 178.987}</string>
+ <string>{367.682, 178.987}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Info</key>
+ <integer>6</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{206.254, 82.8936}, {147, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>85</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Network Router}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{42, 166.987}, {147, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Network Switch}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{226.254, 426.954}, {107, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>82</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>81</integer>
+ <key>Position</key>
+ <real>0.49854379892349243</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 DRBD Replication}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>74</integer>
+ <key>Info</key>
+ <integer>4</integer>
+ </dict>
+ <key>ID</key>
+ <integer>81</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>-1</real>
+ <key>Points</key>
+ <array>
+ <string>{159, 433.954}</string>
+ <string>{401.214, 433.954}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>FilledArrow</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>70</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{378.682, 253.018}, {125, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>80</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>77</integer>
+ <key>Position</key>
+ <real>0.72687047719955444</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Virtual IP 192.168.0.1}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{53, 248.95}, {125, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>79</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>76</integer>
+ <key>Position</key>
+ <real>0.7458990216255188</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Virtual IP 192.168.0.1}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>1</integer>
+ </dict>
+ <key>ID</key>
+ <integer>77</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>95.733505249023438</real>
+ <key>Points</key>
+ <array>
+ <string>{400.908, 389.454}</string>
+ <string>{441.182, 190.987}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>73</integer>
+ <key>Info</key>
+ <integer>4</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>83</integer>
+ </dict>
+ <key>ID</key>
+ <integer>76</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>95.733505249023438</real>
+ <key>Points</key>
+ <array>
+ <string>{158.694, 389.454}</string>
+ <string>{115.5, 190.987}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>69</integer>
+ <key>Info</key>
+ <integer>3</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{367.682, 166.987}, {147, 24}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>1</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Network Switch}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{400.908, 380.28}, {102.468, 18.3474}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>73</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>CornerRadius</key>
+ <real>5</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 eth0}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{401.214, 424.78}, {102.468, 18.3474}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>74</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>CornerRadius</key>
+ <real>5</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 eth1}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{386.682, 335.78}, {128, 119.22}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>75</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>CornerRadius</key>
+ <real>5</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Secondary}</string>
+ <key>VerticalPad</key>
+ <integer>5</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>72</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{56.2258, 380.28}, {102.468, 18.3474}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>69</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>CornerRadius</key>
+ <real>5</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 eth0}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{56.5316, 424.78}, {102.468, 18.3474}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>70</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>CornerRadius</key>
+ <real>5</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 eth1}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{42, 335.78}, {128, 119.22}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>71</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>CornerRadius</key>
+ <real>5</real>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Primary}</string>
+ <key>VerticalPad</key>
+ <integer>5</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>68</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>IsPalette</key>
+ <string>NO</string>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict/>
+ <key>MasterSheet</key>
+ <string>Master 1</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OutlineStyle</key>
+ <string>Basic</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 3</string>
+ <key>UniqueID</key>
+ <integer>3</integer>
+ <key>VPages</key>
+ <integer>1</integer>
+ </dict>
</array>
<key>SmartAlignmentGuidesActive</key>
<string>YES</string>
@@ -1370,7 +2270,7 @@
<key>WindowInfo</key>
<dict>
<key>CurrentSheet</key>
- <integer>1</integer>
+ <integer>2</integer>
<key>DrawerOpen</key>
<true/>
<key>DrawerTab</key>
| Thread |
|---|
| • svn commit - mysqldoc@docsrva: r9551 - in trunk: refman-5.0 refman-5.1 refman-6.0 refman-common refman-common/images/published refman-common/images/so... | mcbrown | 10 Jan |