Skip to content

Cross Cluster Database Replication - adding GA docs#3107

Open
yirensum wants to merge 6 commits into
neo4j:devfrom
yirensum:cluster-1587/ccdr-ga
Open

Cross Cluster Database Replication - adding GA docs#3107
yirensum wants to merge 6 commits into
neo4j:devfrom
yirensum:cluster-1587/ccdr-ga

Conversation

@yirensum

@yirensum yirensum commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

In the PR, we add the GA docs of this feature.

We introduce:

  1. Actual CREATE DATABASE DDL rather than the internal procedures we had before
  2. Backup based pulling without network
  3. External version of promote, i.e dbms.promoteReplicaDatabase

Note that some images here have been ai-generated - they give a sense of how the image should look like but are placeholders and need to be replaced with proper images.

Part of CLUSTER-1587

@yirensum

yirensum commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

Hi @NataliaIvakina, I've added a new commit: 8391014

So we've added the REPLICA keyword now. So instead of CREATE DATABASE ... replicaConfig, it's CREATE REPLICA DATABASE ... replicaConfig.

The reason for this change is to make it more distinct. With that said, should I remove the changes to the create-database.adoc?

@NataliaIvakina

NataliaIvakina commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Hi @NataliaIvakina, I've added a new commit: 8391014

So we've added the REPLICA keyword now. So instead of CREATE DATABASE ... replicaConfig, it's CREATE REPLICA DATABASE ... replicaConfig.

The reason for this change is to make it more distinct. With that said, should I remove the changes to the create-database.adoc?

Hi @yirensum!
We still have the replicaConfig option. Why should we remove it from the options' list?

Comment thread modules/ROOT/pages/database-administration/syntax.adoc Outdated
Comment thread modules/ROOT/pages/database-administration/syntax.adoc Outdated
@NataliaIvakina

Copy link
Copy Markdown
Collaborator

@yirensum, sorry, my bad. Let's keep the syntax table as it is in the create-databases.adoc file.

@yirensum

yirensum commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

@yirensum, sorry, my bad. Let's keep the syntax table as it is in the create-databases.adoc file.

no problem, I've reverted that file to the dev version

Verify that the `foo-replica` database is online on the desired number of servers, in the desired roles.
Note that the type is labelled as `replica`.

If a `seedURI` is also specified, the initial seeding of the replica database is done from the `seedURI`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't mention seedURI anywhere before. Why should we use it? And if we can use it, when and how to do it?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so seedURI is one of the options of creating a database (see https://neo4j.com/docs/operations-manual/current/database-administration/standard-databases/seed-from-uri/), but maybe we should link it or create a new section here?

We can use it if we want to start the seeding of a database from a backup location usually.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good, so there is also a way to create a replica from a database backup using seedURI. If you specify remote addresses then the replica pulls transactions from the upstream db using servers listed in addresses. If you specify pullURI, then the replica pulls diffs from there after initialization.
Am I right?

This way of creating a replica could be presented as a separate section. Let me think how to do it better.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes that's exactly so. Just to give further context (though we probably do not need to tell the customer this in the docs), internally we are applying transactions - either pulling transactions from addresses, or unpacking backups and getting transactions that way. As such ur mental model is correct.

The differential backup chain must remain unbroken from the replica database's current point onward.

The user is responsible for continuing to create and push differential backups for the upstream database to the `pullURI` location.
If the differential backup chain is broken, for example because a required differential backup is missing, the replica database must be recreated from a complete backup chain.

@NataliaIvakina NataliaIvakina Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sentence is not super useful or clear: If the diff backup chain is broken ... the replica db must be recreated from a complete backup chain.

The second part of the sentence doesn't say what to do if the diff chain is broken.

But previously we said that a complete backup chain is a chain of a full backup + diffs (optionally). So, does this the replica db must be recreated from a complete backup chain mean that the replica must be recreated from the latest full backup?
At the same time, we state that a replica consumes only diffs after initialization.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that this is not so clear, let me see if I can add something to the product to make it clearer about gaps in the chain. Will get back to you about this

Comment thread modules/ROOT/pages/clustering/replicating-databases-across-clusters.adoc Outdated
`remote`:: The name of the upstream database in a remote cluster.
`addresses`:: A list of xref:configuration/configuration-settings.adoc#config_dbms.cluster.endpoints[cluster endpoints] for the servers in the remote cluster.
Use this if there is a direct network connection between clusters. +
There is no requirement that every remote server hosts the upstream database.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recently we added "There is no requirement that every remote server hosts the upstream database" to the option remoteAddresses of the internal.dbms.createReplicaDatabase() procedure. Should we use this clarification here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isn't this added to the create replica DDL rather than the internal.dbms.createReplicaDatabase?

image

sumyiren and others added 5 commits July 13, 2026 15:49
# Conflicts:
#	modules/ROOT/pages/clustering/replicating-databases-across-clusters.adoc
Co-authored-by: Natalia Ivakina <82437520+NataliaIvakina@users.noreply.github.com>
Comment thread modules/ROOT/pages/clustering/replicating-databases-across-clusters.adoc Outdated
Comment thread modules/ROOT/pages/clustering/replicating-databases-across-clusters.adoc Outdated
Co-authored-by: Natalia Ivakina <82437520+NataliaIvakina@users.noreply.github.com>
@neo4j-docops-agent

Copy link
Copy Markdown
Collaborator

This PR includes documentation updates
View the updated docs at https://neo4j-docs-operations-3107.surge.sh

Updated pages:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants