summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/rep_twosite.html
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2015-02-17 17:25:57 +0000
committer <>2015-03-17 16:26:24 +0000
commit780b92ada9afcf1d58085a83a0b9e6bc982203d1 (patch)
tree598f8b9fa431b228d29897e798de4ac0c1d3d970 /docs/programmer_reference/rep_twosite.html
parent7a2660ba9cc2dc03a69ddfcfd95369395cc87444 (diff)
downloadberkeleydb-master.tar.gz
Imported from /home/lorry/working-area/delta_berkeleydb/db-6.1.23.tar.gz.HEADdb-6.1.23master
Diffstat (limited to 'docs/programmer_reference/rep_twosite.html')
-rw-r--r--docs/programmer_reference/rep_twosite.html285
1 files changed, 222 insertions, 63 deletions
diff --git a/docs/programmer_reference/rep_twosite.html b/docs/programmer_reference/rep_twosite.html
index 550404bd..c8882906 100644
--- a/docs/programmer_reference/rep_twosite.html
+++ b/docs/programmer_reference/rep_twosite.html
@@ -14,7 +14,7 @@
<body>
<div xmlns="" class="navheader">
<div class="libver">
- <p>Library Version 11.2.5.3</p>
+ <p>Library Version 12.1.6.1</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
@@ -22,9 +22,7 @@
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="repmgr_channels.html">Prev</a> </td>
- <th width="60%" align="center">Chapter 12. 
- Berkeley DB Replication
- </th>
+ <th width="60%" align="center">Chapter 12.  Berkeley DB Replication </th>
<td width="20%" align="right"> <a accesskey="n" href="rep_partition.html">Next</a></td>
</tr>
</table>
@@ -38,78 +36,239 @@
</div>
</div>
</div>
- <p>
+ <div class="toc">
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="rep_twosite.html#twosite_strict">Two-site strict configuration</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="rep_twosite.html#twosite_prefmas">Preferred master mode</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="rep_twosite.html#twosite_other">Other alternatives</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
One of the benefits of replication is that it helps your
- application remain available for writes even when a site crashes.
- Another benefit is the added durability achieved by storing multiple
- copies of your application data at different sites. However, if
- your replication group contains only two sites, you must prioritize
- which of these benefits is more important to your
- application.
+ application remain available for writes even when a site
+ crashes. Another benefit is the added durability achieved by
+ storing multiple copies of your application data at different
+ sites. However, if your replication group contains only two
+ sites, you must prioritize which of these benefits is more
+ important to your application.
</p>
- <p>
+ <p>
A two-site replication group is particularly vulnerable to
- duplicate masters if there is a loss of communication between the
- sites. The original master continues to accept new transactions.
- If the original client detects the loss of the master and elects
- itself master, it also starts accepting new transactions. When
- communications are restored, there are duplicate masters and one
- site's new transactions will be rolled back.
- </p>
- <p>
- If it is unacceptable to your application for any new transactions
- to be rolled back, the alternative in a two-site replication group
- is to require both sites to be present in order to elect a master.
- This stops a client from electing itself master when it loses
- contact with the master and prevents creation of parallel sets of
- transactions, one of which must be rolled back.
+ duplicate masters when there is a disruption to communications
+ between the sites. The original master continues to accept new
+ transactions. If the original client detects the loss of the
+ master and elects itself master, it also starts accepting new
+ transactions. When communications are restored, there are
+ duplicate masters and one site's new transactions will be
+ rolled back.
</p>
<p>
- However, requiring both sites to be present to elect a master
- results in a loss of write availability when the master crashes.
- The client cannot take over as master and the replication group
- exists in a read-only state until the original master site rejoins
- the replication group.
+ If it is unacceptable to your application for any new
+ transactions to be rolled back, the alternative in a two-site
+ replication group is to require both sites to be present in
+ order to elect a master. This stops a client from electing
+ itself master when it loses contact with the master and
+ prevents creation of parallel sets of transactions, one of
+ which must be rolled back.
+ However, requiring both sites to be present to elect a
+ master results in a loss of write availability when the master
+ crashes. The client cannot take over as master and the
+ replication group exists in a read-only state until the
+ original master site rejoins the replication group.
</p>
- <p>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="twosite_strict"></a>Two-site strict configuration</h3>
+ </div>
+ </div>
+ </div>
+ <p>
Replication Manager applications use the <a href="../api_reference/C/repconfig.html" class="olink">DB_ENV-&gt;rep_set_config()</a> method
- <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> flag to make this tradeoff between
- write availability and transaction durability. When this flag is
- turned on, Replication Manager favors transaction durability. When
- it is turned off, Replication Manager favors write
- availability.
+ <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> flag to make this tradeoff
+ between write availability and transaction durability. When
+ this flag is turned on, Replication Manager favors transaction
+ durability. When it is turned off, Replication Manager favors
+ write availability.
</p>
- <p>
- A two-site Replication Manager application that uses heartbeats in
- an environment with frequent communications disruptions generally
- should operate with the <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> flag turned
- on. Otherwise, frequent heartbeat failures will cause frequent
- duplicate masters and the resulting elections and client
+ <p>
+ A two-site Replication Manager application that uses
+ heartbeats in an environment with frequent communications
+ disruptions generally should operate with the
+ <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> flag turned on. Otherwise,
+ frequent heartbeat failures will cause frequent duplicate
+ masters and the resulting elections and client
synchronizations will make one or both sites unavailable for
extended periods of time.
</p>
- <p>
- Base API applications use the values of the
- <span class="bold"><strong>nvotes</strong></span> and
- <span class="bold"><strong>nsites</strong></span> parameters in calls to the
- <a href="../api_reference/C/repelect.html" class="olink">DB_ENV-&gt;rep_elect()</a> method to make this tradeoff. For more information, see
- <a class="xref" href="rep_elect.html" title="Elections">Elections</a>.</p>
- <p>
- A replication group containing only two electable sites is subject
- to duplicate masters and rollback of one site's new transactions
- even when it contains additional unelectable sites. The
- <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> does not apply in this case because
- the replication group is larger than two sites.
+ <p>
+ A replication group containing only two electable sites is
+ subject to duplicate masters and rollback of one site's new
+ transactions even when it contains additional unelectable
+ sites. The <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> flag does not apply in
+ this case because the replication group is larger than two
+ sites.
</p>
- <p>
- If both write availability and transaction durability are important
- to your application, you should strongly consider having three or
- more electable sites in your replication group. You should also
- carefully choose an acknowledgement policy that requires at least a
- quorum of sites. It is best to have an odd number of electable
- sites to provide a clear majority in the event of a network
- partition.
+ <p>
+ Base API applications using two sites use the values of the <span class="bold"><strong>nvotes</strong></span> and <span class="bold"><strong>nsites</strong></span> parameters in calls to the <a href="../api_reference/C/repelect.html" class="olink">DB_ENV-&gt;rep_elect()</a>
+ method to make this durability vs. availability tradeoff. For more
+ information, see <a class="xref" href="rep_elect.html" title="Elections">Elections</a>.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="twosite_prefmas"></a>Preferred master mode</h3>
+ </div>
+ </div>
+ </div>
+ <p>
+ In some two-site replication groups, it is desirable for one
+ particular site to function as the master whenever possible. This
+ might be due to hardware differences, geographical location, or
+ other reasons. Replication Manager preferred master mode provides
+ this behavior.
+ </p>
+ <p>
+ A preferred master replication group contains two sites where one
+ site is the <span class="bold"><strong>preferred master site</strong></span>
+ and the other site is the <span class="bold"><strong>client
+ site</strong></span>. The preferred master site operates as
+ the master as much of the time as its availability permits.
+ The client site takes over as <span class="bold"><strong>temporary
+ master</strong></span> when the preferred
+ master is unavailable, providing write availability when the
+ preferred master site is down. Transactions committed on the preferred
+ master site are never rolled back, providing more predictable
+ durability than turning off the <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> flag.
+ </p>
+ <p>
+ In a preferred master replication group where the client site is
+ operating as the temporary master, when the preferred master site
+ again becomes available it synchronizes with the temporary master
+ and then automatically takes over as master. The preferred master
+ synchronization preserves temporary master transactions when
+ they do not conflict with any new preferred master transactions. If
+ there are conflicting transactions, the temporary master transactions
+ are always the transactions that are rolled back.
+ </p>
+ <p>
+ To configure a preferred master replication group, you use the
+ <a href="../api_reference/C/repconfig.html" class="olink">DB_ENV-&gt;rep_set_config()</a> method to specify the <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_PREFMAS_MASTER" class="olink">DB_REPMGR_CONF_PREFMAS_MASTER</a>
+ flag on the preferred master site and to specify the
+ <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_PREFMAS_CLIENT" class="olink">DB_REPMGR_CONF_PREFMAS_CLIENT</a> flag on the client site. These
+ flags must be specified before calling the <a href="../api_reference/C/repmgrstart.html" class="olink">DB_ENV-&gt;repmgr_start()</a> method
+ and cannot be changed after it is called. Both sites should call
+ the <a href="../api_reference/C/repmgrstart.html" class="olink">DB_ENV-&gt;repmgr_start()</a> method using the <a href="../api_reference/C/repmgrstart.html#repmgrstart_DB_REP_CLIENT" class="olink">DB_REP_CLIENT</a> flags value.
+ </p>
+ <p>
+ Some configuration items are automatically set in preferred master
+ mode and cannot be changed: the <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_2SITE_STRICT" class="olink">DB_REPMGR_CONF_2SITE_STRICT</a> and
+ <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_ELECTIONS" class="olink">DB_REPMGR_CONF_ELECTIONS</a> flags are turned on, and
+ each site's priority value is set. The following timeout values
+ have different defaults in preferred master mode which can be
+ changed: <a href="../api_reference/C/repset_timeout.html#set_timeout_DB_REP_HEARTBEAT_SEND" class="olink">DB_REP_HEARTBEAT_SEND</a>, <a href="../api_reference/C/repset_timeout.html#set_timeout_DB_REP_HEARTBEAT_MONITOR" class="olink">DB_REP_HEARTBEAT_MONITOR</a>,
+ <a href="../api_reference/C/repset_timeout.html#set_timeout_DB_REP_ELECTION_RETRY" class="olink">DB_REP_ELECTION_RETRY</a>. Heartbeats cannot be turned off in
+ preferred master mode because they are required for automatic
+ takeovers. Preferred master mode
+ is not supported with master leases, in-memory databases, in-memory
+ logs, in-memory replication files or private environments.
+ </p>
+ <p>
+ When restarting a preferred master replication group after both
+ sites were down, it is best to restart the client site first in
+ order to preserve as many temporary master transactions as possible.
+ If the preferred master site is started first and then commits new
+ transactions, these new preferred master transactions would conflict
+ with any recent temporary master transactions and the temporary
+ master transactions would be rolled back.
+ </p>
+ <p>
+ If the preferred master site can no longer be used (for example, due
+ to a hardware failure), you can reconfigure the client site to become
+ the new preferred master site using the following steps:
</p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Shut down the old preferred master site if it is still running.
+ Use the old client site (now operating as temporary master) to
+ remove the old preferred master site from the replication group,
+ then close the old client's environment.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are using the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file to configure preferred master
+ mode, edit it to replace the <a href="../api_reference/C/rep_set_config_parameter.html" class="olink">rep_set_config</a> method
+ <code class="literal">db_repmgr_conf_prefmas_client</code> parameter
+ with the <code class="literal">db_repmgr_conf_prefmas_master</code>
+ parameter and adjust any other configuration values as needed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Perform a recovery on the new preferred master site's environment
+ and reopen it.
+ </p>
+ </li>
+ <li>
+ <p>
+ If you are using the <a href="../api_reference/C/repconfig.html" class="olink">DB_ENV-&gt;rep_set_config()</a> method to configure preferred
+ master mode, invoke it to configure the
+ <a href="../api_reference/C/repconfig.html#config_DB_REPMGR_CONF_PREFMAS_MASTER" class="olink">DB_REPMGR_CONF_PREFMAS_MASTER</a> flag and adjust any other
+ configuration values as needed.
+ </p>
+ </li>
+ <li>
+ <p>
+ Call the <a href="../api_reference/C/repmgrstart.html" class="olink">DB_ENV-&gt;repmgr_start()</a> method with the <a href="../api_reference/C/repmgrstart.html#repmgrstart_DB_REP_CLIENT" class="olink">DB_REP_CLIENT</a> flags
+ value to restart this site as the new preferred master.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <p>
+ Preferred master applications are more likely to have
+ <code class="literal">DB_LOCK_DEADLOCK</code>,
+ <code class="literal">DB_REP_HANDLE_DEAD</code> and <code class="literal">EACCES</code>
+ errors on either site during automatic takeovers and should be
+ prepared to handle these errors appropriately.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="twosite_other"></a>Other alternatives</h3>
+ </div>
+ </div>
+ </div>
+ <p>
+ If both write availability and transaction durability are
+ important to your application, you should strongly consider
+ having three or more electable sites in your replication
+ group. You should also carefully choose an acknowledgement
+ policy that requires at least a quorum of sites. It is best to
+ have an odd number of electable sites to provide a clear
+ majority in the event of a network partition.
+ </p>
+ </div>
</div>
<div class="navfooter">
<hr />