blob: 8d7c14ef4823fb0dadc7c0357cea9557eebf0172 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Apache BookKeeper&trade; - Upgrade</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/css/normalize.css">
<link rel="stylesheet" href="/css/tippy.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="shortcut icon" href="/img/favicon.ico">
<script src="/js/tippy.min.js"></script>
<script type="text/javascript">
var shiftWindow = function() { scrollBy(0, -25); };
window.addEventListener("hashchange", shiftWindow);
window.addEventListener("pageshow", shiftWindow);
function load() { if (window.location.hash) shiftWindow(); }
</script>
</head>
<body class="body">
<main class="main">
<nav class="navbar bk-topnav">
<div class="navbar-brand">
<a class="navbar-item bk-brand" href="/">
Apache BookKeeper&trade;
</a>
<div class="navbar-burger burger" data-target="bkNav">
<span></span>
<span></span>
<span></span>
</div>
</div>
<div id="bkNav" class="navbar-menu">
<div class="navbar-start">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Documentation</a>
<div class="navbar-dropdown is-boxed">
<a class="navbar-item" href="/docs/latest/overview/overview">
Version 4.14.0-SNAPSHOT
<span class="tag is-warning">Development</span>
</a>
<a class="navbar-item" href="/docs/latest/api/javadoc">
<span class="icon bk-javadoc-icon">
<img src="/img/java-icon.svg">
</span>
Javadoc
</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/docs/4.13.0/overview/overview">
Release 4.13.0
</a>
<a class="navbar-item" href="/docs/4.12.1/overview/overview">
Release 4.12.1
</a>
<a class="navbar-item" href="/docs/4.12.0/overview/overview">
Release 4.12.0
</a>
<a class="navbar-item" href="/docs/4.11.1/overview/overview">
Release 4.11.1
<span class="tag is-success">Stable</span>
</a>
<a class="navbar-item" href="/docs/4.11.0/overview/overview">
Release 4.11.0
</a>
<a class="navbar-item" href="/docs/4.10.0/overview/overview">
Release 4.10.0
</a>
<a class="navbar-item" href="/archives/docs/r4.9.2">
Release 4.9.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.9.1">
Release 4.9.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.9.0">
Release 4.9.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.8.2">
Release 4.8.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.8.1">
Release 4.8.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.8.0">
Release 4.8.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.3">
Release 4.7.3
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.2">
Release 4.7.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.1">
Release 4.7.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.0">
Release 4.7.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.6.2">
Release 4.6.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.6.1">
Release 4.6.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.6.0">
Release 4.6.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.5.1">
Release 4.5.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.5.0">
Release 4.5.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.4.0">
Release 4.4.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.3.2">
Release 4.3.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.3.1">
Release 4.3.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.3.0">
Release 4.3.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.4">
Release 4.2.4
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.3">
Release 4.2.3
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.2">
Release 4.2.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.1">
Release 4.2.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.0">
Release 4.2.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.1.0">
Release 4.1.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.0.0">
Release 4.0.0
<span class="tag is-warning">EOL</span>
</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Community</a>
<div class="navbar-dropdown is-boxed">
<a class="navbar-item" href="/community/mailing-lists">Mailing lists</a>
<a class="navbar-item" href="/community/slack">Slack</a>
<a class="navbar-item" href="https://github.com/apache/bookkeeper/issues">Github Issues</a>
<a class="navbar-item" href="/community/releases">Release Management</a>
<a class="navbar-item" href="/community/meeting">Community Meetings</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/community/contributing">Contribution Guide</a>
<a class="navbar-item" href="/community/coding_guide">Coding Guide</a>
<a class="navbar-item" href="/community/testing">Testing Guide</a>
<a class="navbar-item" href="/community/issue-report">Issue Report Guide</a>
<a class="navbar-item" href="/community/release_guide">Release Guide</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/community/presentations">Presentations</a>
<a class="navbar-item" href="/community/bookkeeper_proposals">BookKeeper Proposals</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Project</a>
<div class="navbar-dropdown is-boxed">
<a class="navbar-item" href="/project/who">Who are we?</a>
<a class="navbar-item" href="/project/bylaws">Bylaws</a>
<a class="navbar-item" href="http://www.apache.org/licenses/">License</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/project/privacy">Privacy policy</a>
<a class="navbar-item" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
<a class="navbar-item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</div>
</div>
</div>
<div class="navbar-end">
<div class="navbar-item">
<div class="field is-grouped">
<p class="control">
<a class="button bk-twitter" href="https://twitter.com/asfbookkeeper">
<span class="icon">
<i class="fa fa-twitter"></i>
</span>
<span>Twitter</span>
</a>
</p>
<p class="control">
<a class="button" href="https://github.com/apache/bookkeeper">
<span class="icon">
<i class="fa fa-github"></i>
</span>
<span>GitHub</span>
</a>
</p>
<p class="control">
<a class="button is-primary" href="/releases">
<span class="icon">
<i class="fa fa-download"></i>
</span>
<span>Download</span>
</a>
</p>
</div>
</div>
</div>
</div>
</nav>
<div class="bk-docs-container">
<div class="columns is-gapless">
<div class="column is-2 is-hidden-mobile">
<div class="container">
<aside class="sidebar">
<a class="button is-info">
Version: 4.11.0
</a>
<hr />
<p>
Getting started
</p>
<ul class="sidebar-items">
<li>
<a href="../../getting-started/installation">
Installation
</a>
</li>
<li>
<a href="../../getting-started/run-locally">
Run bookies locally
</a>
</li>
<li>
<a href="../../getting-started/concepts">
Concepts and architecture
</a>
</li>
</ul>
<p>
Deployment
</p>
<ul class="sidebar-items">
<li>
<a href="../../deployment/manual">
Manual deployment
</a>
</li>
<li>
<a href="../../deployment/dcos">
BookKeeper on DC/OS
</a>
</li>
<li>
<a href="../../deployment/kubernetes">
BookKeeper on Kubernetes
</a>
</li>
</ul>
<p>
Administration
</p>
<ul class="sidebar-items">
<li>
<a href="../../admin/bookies">
BookKeeper administration
</a>
</li>
<li>
<a href="../../admin/autorecovery">
AutoRecovery
</a>
</li>
<li>
<a href="../../admin/metrics">
Metric collection
</a>
</li>
<li>
<a href="../../admin/upgrade">
Upgrade
</a>
</li>
<li>
<a href="../../admin/http">
BookKeeper Admin REST API
</a>
</li>
<li>
<a href="../../admin/decomission">
Decommissioning Bookies
</a>
</li>
</ul>
<p>
API
</p>
<ul class="sidebar-items">
<li>
<a href="../../api/overview">
Overview
</a>
</li>
<li>
<a href="../../api/ledger-api">
Ledger API
</a>
</li>
<li>
<a href="../../api/ledger-adv-api">
Advanced Ledger API
</a>
</li>
<li>
<a href="../../api/distributedlog-api">
DistributedLog
</a>
</li>
<li>
<a href="../../api/javadoc">
Java API Docs
</a>
</li>
</ul>
<p>
Security
</p>
<ul class="sidebar-items">
<li>
<a href="../../security/overview">
Overview
</a>
</li>
<li>
<a href="../../security/tls">
TLS Authentication
</a>
</li>
<li>
<a href="../../security/sasl">
SASL Authentication
</a>
</li>
<li>
<a href="../../security/zookeeper">
ZooKeeper Authentication
</a>
</li>
</ul>
<p>
Development
</p>
<ul class="sidebar-items">
<li>
<a href="../../development/protocol">
BookKeeper protocol
</a>
</li>
</ul>
<p>
Reference
</p>
<ul class="sidebar-items">
<li>
<a href="../../reference/config">
Configuration
</a>
</li>
<li>
<a href="../../reference/cli">
Command-line tools
</a>
</li>
<li>
<a href="../../reference/metrics">
Metrics
</a>
</li>
</ul>
</aside>
</div>
</div>
<div class="column is-8 bk-docs-block">
<header class="docs-title">
<nav class="level bk-level">
<div class="level-left">
<div class="level-item">
<h1 class="title">Upgrade</h1>
</div>
</div>
</nav>
</header>
<hr />
<div class="content">
<section class="bk-main-content">
<blockquote>
<p>If you have questions about upgrades (or need help), please feel free to reach out to us by <a href="/community/mailing-lists">mailing list</a> or <a href="/community/slack">Slack Channel</a>.</p>
</blockquote>
<h2 id="overview">Overview</h2>
<p>Consider the below guidelines in preparation for upgrading.</p>
<ul>
<li>Always back up all your configuration files before upgrading.</li>
<li>Read through the documentation and draft an upgrade plan that matches your specific requirements and environment before starting the upgrade process.
Put differently, don’t start working through the guide on a live cluster. Read guide entirely, make a plan, then execute the plan.</li>
<li>Pay careful consideration to the order in which components are upgraded. In general, you need to upgrade bookies first and then upgrade your clients.</li>
<li>If autorecovery is running along with bookies, you need to pay attention to the upgrade sequence.</li>
<li>Read the release notes carefully for each release. They contain not only information about noteworthy features, but also changes to configurations
that may impact your upgrade.</li>
<li>Always upgrade one or a small set of bookies to canary new version before upgraing all bookies in your cluster.</li>
</ul>
<h2 id="canary">Canary</h2>
<p>It is wise to canary an upgraded version in one or small set of bookies before upgrading all bookies in your live cluster.</p>
<p>You can follow below steps on how to canary a upgraded version:</p>
<ol>
<li>Stop a Bookie.</li>
<li>Upgrade the binary and configuration.</li>
<li>Start the Bookie in <code class="highlighter-rouge">ReadOnly</code> mode. This can be used to verify if the Bookie of this new version can run well for read workload.</li>
<li>Once the Bookie is running at <code class="highlighter-rouge">ReadOnly</code> mode successfully for a while, restart the Bookie in <code class="highlighter-rouge">Write/Read</code> mode.</li>
<li>After step 4, the Bookie will serve both write and read traffic.</li>
</ol>
<h3 id="rollback-canaries">Rollback Canaries</h3>
<p>If problems occur during canarying an upgraded version, you can simply take down the problematic Bookie node. The remain bookies in the old cluster
will repair this problematic bookie node by autorecovery. Nothing needs to be worried about.</p>
<h2 id="upgrade-steps">Upgrade Steps</h2>
<p>Once you determined a version is safe to upgrade in a few nodes in your cluster, you can perform following steps to upgrade all bookies in your cluster.</p>
<ol>
<li>Determine if autorecovery is running along with bookies. If yes, check if the clients (either new clients with new binary or old clients with new configurations)
are allowed to talk to old bookies; if clients are not allowed to talk to old bookies, please <a href="../../reference/cli/#autorecovery-1">disable autorecovery</a> during upgrade.</li>
<li>Decide on performing a rolling upgrade or a downtime upgrade.</li>
<li>Upgrade all Bookies (more below)</li>
<li>If autorecovery was disabled during upgrade, <a href="../../reference/cli/#autorecovery-1">enable autorecovery</a>.</li>
<li>After all bookies are upgraded, build applications that use <code class="highlighter-rouge">BookKeeper client</code> against the new bookkeeper libraries and deploy the new versions.</li>
</ol>
<h3 id="upgrade-bookies">Upgrade Bookies</h3>
<p>In a rolling upgrade scenario, upgrade one Bookie at a time. In a downtime upgrade scenario, take the entire cluster down, upgrade each Bookie, then start the cluster.</p>
<p>For each Bookie:</p>
<ol>
<li>Stop the bookie.</li>
<li>Upgrade the software (either new binary or new configuration)</li>
<li>Start the bookie.</li>
</ol>
<h2 id="upgrade-guides">Upgrade Guides</h2>
<p>We describes the general upgrade method in Apache BookKeeper as above. We will cover the details for individual versions.</p>
<h3 id="46x-to-470-upgrade">4.6.x to 4.7.0 upgrade</h3>
<p>There isn’t any protocol related backward compabilities changes in 4.7.0. So you can follow the general upgrade sequence to upgrade from 4.6.x to 4.7.0.</p>
<p>However, we list a list of changes that you might want to know.</p>
<h4 id="common-configuration-changes">Common Configuration Changes</h4>
<p>This section documents the common configuration changes that applied for both clients and servers.</p>
<h5 id="new-settings">New Settings</h5>
<p>Following settings are newly added in 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Default Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>allowShadedLedgerManagerFactoryClass</td>
<td>false</td>
<td>The allows bookkeeper client to connect to a bookkeeper cluster using a shaded ledger manager factory</td>
</tr>
<tr>
<td>shadedLedgerManagerFactoryClassPrefix</td>
<td><code class="highlighter-rouge">dlshade.</code></td>
<td>The shaded ledger manager factory prefix. This is used when <code class="highlighter-rouge">allowShadedLedgerManagerFactoryClass</code> is set to true</td>
</tr>
<tr>
<td>metadataServiceUri</td>
<td>null</td>
<td>metadata service uri that bookkeeper is used for loading corresponding metadata driver and resolving its metadata service location</td>
</tr>
<tr>
<td>permittedStartupUsers</td>
<td>null</td>
<td>The list of users are permitted to run the bookie process. Any users can run the bookie process if it is not set</td>
</tr>
</tbody>
</table>
<h5 id="deprecated-settings">Deprecated Settings</h5>
<p>There are no common settings deprecated at 4.7.0.</p>
<h5 id="changed-settings">Changed Settings</h5>
<p>There are no common settings whose default value are changed at 4.7.0.</p>
<h4 id="server-configuration-changes">Server Configuration Changes</h4>
<h5 id="new-settings-1">New Settings</h5>
<p>Following settings are newly added in 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Default Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>verifyMetadataOnGC</td>
<td>false</td>
<td>Whether the bookie is configured to double check the ledgers’ metadata prior to garbage collecting them</td>
</tr>
<tr>
<td>auditorLedgerVerificationPercentage</td>
<td>0</td>
<td>The percentage of a ledger (fragment)’s entries will be verified by Auditor before claiming a ledger (fragment) is missing</td>
</tr>
<tr>
<td>numHighPriorityWorkerThreads</td>
<td>8</td>
<td>The number of threads that should be used for high priority requests (i.e. recovery reads and adds, and fencing). If zero, reads are handled by Netty threads directly.</td>
</tr>
<tr>
<td>useShortHostName</td>
<td>false</td>
<td>Whether the bookie should use short hostname or <a href="https://en.wikipedia.org/wiki/Fully_qualified_domain_name">FQDN</a> hostname for registration and ledger metadata when useHostNameAsBookieID is enabled.</td>
</tr>
<tr>
<td>minUsableSizeForEntryLogCreation</td>
<td>1.2 * <code class="highlighter-rouge">logSizeLimit</code></td>
<td>Minimum safe usable size to be available in ledger directory for bookie to create entry log files (in bytes).</td>
</tr>
<tr>
<td>minUsableSizeForHighPriorityWrites</td>
<td>1.2 * <code class="highlighter-rouge">logSizeLimit</code></td>
<td>Minimum safe usable size to be available in ledger directory for bookie to accept high priority writes even it is in readonly mode.</td>
</tr>
</tbody>
</table>
<h5 id="deprecated-settings-1">Deprecated Settings</h5>
<p>Following settings are deprecated since 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>registrationManagerClass</td>
<td>The registration manager class used by server to discover registration manager. It is replaced by <code class="highlighter-rouge">metadataServiceUri</code>.</td>
</tr>
</tbody>
</table>
<h5 id="changed-settings-1">Changed Settings</h5>
<p>The default values of following settings are changed since 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Old Default Value</th>
<th>New Default Value</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>numLongPollWorkerThreads</td>
<td>10</td>
<td>0</td>
<td>If the number of threads is zero or negative, bookie can fallback to use read threads for long poll. This allows not creating threads if application doesn’t use long poll feature.</td>
</tr>
</tbody>
</table>
<h4 id="client-configuration-changes">Client Configuration Changes</h4>
<h5 id="new-settings-2">New Settings</h5>
<p>Following settings are newly added in 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Default Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>maxNumEnsembleChanges</td>
<td>Integer.MAX_VALUE</td>
<td>The max allowed ensemble change number before sealing a ledger on failures</td>
</tr>
<tr>
<td>timeoutMonitorIntervalSec</td>
<td>min(<code class="highlighter-rouge">addEntryTimeoutSec</code>, <code class="highlighter-rouge">addEntryQuorumTimeoutSec</code>, <code class="highlighter-rouge">readEntryTimeoutSec</code>)</td>
<td>The interval between successive executions of the operation timeout monitor, in seconds</td>
</tr>
<tr>
<td>ensemblePlacementPolicyOrderSlowBookies</td>
<td>false</td>
<td>Flag to enable/disable reordering slow bookies in placement policy</td>
</tr>
</tbody>
</table>
<h5 id="deprecated-settings-2">Deprecated Settings</h5>
<p>Following settings are deprecated since 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>clientKeyStoreType</td>
<td>Replaced by <code class="highlighter-rouge">tlsKeyStoreType</code></td>
</tr>
<tr>
<td>clientKeyStore</td>
<td>Replaced by <code class="highlighter-rouge">tlsKeyStore</code></td>
</tr>
<tr>
<td>clientKeyStorePasswordPath</td>
<td>Replaced by <code class="highlighter-rouge">tlsKeyStorePasswordPath</code></td>
</tr>
<tr>
<td>clientTrustStoreType</td>
<td>Replaced by <code class="highlighter-rouge">tlsTrustStoreType</code></td>
</tr>
<tr>
<td>clientTrustStore</td>
<td>Replaced by <code class="highlighter-rouge">tlsTrustStore</code></td>
</tr>
<tr>
<td>clientTrustStorePasswordPath</td>
<td>Replaced by <code class="highlighter-rouge">tlsTrustStorePasswordPath</code></td>
</tr>
<tr>
<td>registrationClientClass</td>
<td>The registration client class used by client to discover registration service. It is replaced by <code class="highlighter-rouge">metadataServiceUri</code>.</td>
</tr>
</tbody>
</table>
<h5 id="changed-settings-2">Changed Settings</h5>
<p>The default values of following settings are changed since 4.7.0.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Old Default Value</th>
<th>New Default Value</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>enableDigestTypeAutodetection</td>
<td>false</td>
<td>true</td>
<td>Autodetect the digest type and passwd when opening a ledger. It will ignore the provided digest type, but still verify the provided passwd.</td>
</tr>
</tbody>
</table>
<h3 id="47x-to-48x-upgrade">4.7.x to 4.8.X upgrade</h3>
<p>In 4.8.x a new feature is added to persist explicitLac in FileInfo and explicitLac entry in Journal. (Note: Currently this feature is not available if your ledgerStorageClass is DbLedgerStorage, ISSUE #1533 is going to address it) Hence current journal format version is bumped to 6 and current FileInfo header version is bumped to 1. But since default config values of ‘journalFormatVersionToWrite’ and ‘fileInfoFormatVersionToWrite’ are set to older versions, this feature is off by default. To enable this feature those config values should be set to current versions. Once this is enabled then we cannot rollback to previous Bookie versions (4.7.x and older), since older version code would not be able to deal with explicitLac entry in Journal file while replaying journal and also reading Header of Index files / FileInfo would fail reading Index files with newer FileInfo version. So in summary, it is a non-rollbackable feature and it applies even if explicitLac is not being used.</p>
<h3 id="45x-to-46x-upgrade">4.5.x to 4.6.x upgrade</h3>
<p>There isn’t any protocol related backward compabilities changes in 4.6.x. So you can follow the general upgrade sequence to upgrade from 4.5.x to 4.6.x.</p>
<h3 id="44x-to-45x-upgrade">4.4.x to 4.5.x upgrade</h3>
<p>There isn’t any protocol related backward compabilities changes in 4.5.0. So you can follow the general upgrade sequence to upgrade from 4.4.x to 4.5.x.
However, we list a list of things that you might want to know.</p>
<ol>
<li>4.5.x upgrades netty from 3.x to 4.x. The memory usage pattern might be changed a bit. Netty 4 uses more direct memory. Please pay attention to your memory usage
and adjust the JVM settings accordingly.</li>
<li><code class="highlighter-rouge">multi journals</code> is a non-rollbackable feature. If you configure a bookie to use multiple journals on 4.5.x you can not roll the bookie back to use 4.4.x. You have
to take a bookie out and recover it if you want to rollback to 4.4.x.</li>
</ol>
<p>If you are planning to upgrade a non-secured cluster to a secured cluster enabling security features in 4.5.0, please read <a href="../../security/overview">BookKeeper Security</a> for more details.</p>
</section>
</div>
</div>
<div class="column is-2 is-hidden-mobile">
<div class="toc">
<h2 class="title">Upgrade</h2>
<ul class="section-nav">
<li class="toc-entry toc-h2"><a href="#overview">Overview</a></li>
<li class="toc-entry toc-h2"><a href="#canary">Canary</a>
<ul>
<li class="toc-entry toc-h3"><a href="#rollback-canaries">Rollback Canaries</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#upgrade-steps">Upgrade Steps</a>
<ul>
<li class="toc-entry toc-h3"><a href="#upgrade-bookies">Upgrade Bookies</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#upgrade-guides">Upgrade Guides</a>
<ul>
<li class="toc-entry toc-h3"><a href="#46x-to-470-upgrade">4.6.x to 4.7.0 upgrade</a>
<ul>
<li class="toc-entry toc-h4"><a href="#common-configuration-changes">Common Configuration Changes</a>
<ul>
<li class="toc-entry toc-h5"><a href="#new-settings">New Settings</a></li>
<li class="toc-entry toc-h5"><a href="#deprecated-settings">Deprecated Settings</a></li>
<li class="toc-entry toc-h5"><a href="#changed-settings">Changed Settings</a></li>
</ul>
</li>
<li class="toc-entry toc-h4"><a href="#server-configuration-changes">Server Configuration Changes</a>
<ul>
<li class="toc-entry toc-h5"><a href="#new-settings-1">New Settings</a></li>
<li class="toc-entry toc-h5"><a href="#deprecated-settings-1">Deprecated Settings</a></li>
<li class="toc-entry toc-h5"><a href="#changed-settings-1">Changed Settings</a></li>
</ul>
</li>
<li class="toc-entry toc-h4"><a href="#client-configuration-changes">Client Configuration Changes</a>
<ul>
<li class="toc-entry toc-h5"><a href="#new-settings-2">New Settings</a></li>
<li class="toc-entry toc-h5"><a href="#deprecated-settings-2">Deprecated Settings</a></li>
<li class="toc-entry toc-h5"><a href="#changed-settings-2">Changed Settings</a></li>
</ul>
</li>
</ul>
</li>
<li class="toc-entry toc-h3"><a href="#47x-to-48x-upgrade">4.7.x to 4.8.X upgrade</a></li>
<li class="toc-entry toc-h3"><a href="#45x-to-46x-upgrade">4.5.x to 4.6.x upgrade</a></li>
<li class="toc-entry toc-h3"><a href="#44x-to-45x-upgrade">4.4.x to 4.5.x upgrade</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div id="entry-popover-html" class="popover-template">
<p>An entry is a sequence of bytes (plus some metadata) written to a BookKeeper ledger. Entries are also known as records.</p>
</div>
<div id="ledger-popover-html" class="popover-template">
<p>A ledger is a sequence of entries written to BookKeeper. Entries are written sequentially to ledgers and at most once, giving ledgers append-only semantics.</p>
</div>
<div id="bookie-popover-html" class="popover-template">
<p>A bookie is an individual BookKeeper storage server.</p>
<p>Bookies store the content of ledgers and act as a distributed ensemble.</p>
</div>
<div id="rereplication-popover-html" class="popover-template">
<p>A subsystem that runs in the background on bookies to ensure that ledgers are fully replicated even if one bookie from the ensemble is down.</p>
</div>
<div id="striping-popover-html" class="popover-template">
<p>Striping is the process of distributing BookKeeper ledgers to sub-groups of bookies rather than to all bookies in a BookKeeper ensemble.</p>
<p>Striping is essential to ensuring fast performance.</p>
</div>
<div id="striped-popover-html" class="popover-template">
<p>Striping is the process of distributing BookKeeper ledgers to sub-groups of bookies rather than to all bookies in a BookKeeper ensemble.</p>
<p>Striping is essential to ensuring fast performance.</p>
</div>
<div id="journal-popover-html" class="popover-template">
<p>A journal file stores BookKeeper transaction logs.</p>
</div>
<div id="fencing-popover-html" class="popover-template">
<p>When a reader forces a ledger to close, preventing any further entries from being written to the ledger.</p>
</div>
<div id="record-popover-html" class="popover-template">
<p>A record is a sequence of bytes (plus some metadata) written to a BookKeeper ledger. Records are also known as entries.</p>
</div>
<script type="text/javascript">
tippy('#entry-popover', {
html: '#entry-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#ledger-popover', {
html: '#ledger-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#bookie-popover', {
html: '#bookie-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#rereplication-popover', {
html: '#rereplication-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#striping-popover', {
html: '#striping-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#striped-popover', {
html: '#striped-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#journal-popover', {
html: '#journal-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#fencing-popover', {
html: '#fencing-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#record-popover', {
html: '#record-popover-html',
arrow: true,
animation: 'fade'
});
</script>
</main>
<footer class="footer">
<div class="container">
<div class="content has-text-centered">
<p>
Copyright &copy; 2016 - 2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>,<br /> licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, version 2.0</a>.
</p>
<p>
Apache BookKeeper, BookKeeper®, Apache®, the Apache feature logo, and the Apache BookKeeper logo are either registered trademarks or trademarks of The Apache Software Foundation.
</p>
</div>
</div>
</footer>
</body>
<script src="/js/app.js"></script>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-104419626-1', 'auto');
ga('send', 'pageview');
</script>
</html>