This is an automated email from the ASF dual-hosted git repository.

sk0x50 pushed a commit to branch ignite-3.1.0-doc
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/ignite-3.1.0-doc by this push:
     new e1e9624a581 IGNITE-27064 Fix missing distribution zone doc (#6982)
e1e9624a581 is described below

commit e1e9624a5816dd42cfd3c497323795189c2b600b
Author: IgGusev <[email protected]>
AuthorDate: Fri Nov 14 20:03:52 2025 +0400

    IGNITE-27064 Fix missing distribution zone doc (#6982)
    
    (cherry picked from commit e516650d37f7e768ee1f386cc760414b41d8d4e0)
---
 docs/_data/toc.yaml                                |   2 +
 .../storage/distribution-zones.adoc                | 245 +++++++++++++++++++++
 2 files changed, 247 insertions(+)

diff --git a/docs/_data/toc.yaml b/docs/_data/toc.yaml
index e88eea1bedb..7ef442e9eb9 100644
--- a/docs/_data/toc.yaml
+++ b/docs/_data/toc.yaml
@@ -137,6 +137,8 @@
           url: administrators-guide/storage/storage-profiles
         - title: Data Partitions
           url: administrators-guide/storage/data-partitions
+        - title: Data Partitions
+          url: administrators-guide/storage/distribution-zones
     - title: Storage Engines
       url: administrators-guide/storage/engines/storage-engines
       items:
diff --git a/docs/_docs/administrators-guide/storage/distribution-zones.adoc 
b/docs/_docs/administrators-guide/storage/distribution-zones.adoc
new file mode 100644
index 00000000000..47867dc2bb2
--- /dev/null
+++ b/docs/_docs/administrators-guide/storage/distribution-zones.adoc
@@ -0,0 +1,245 @@
+= Distribution Zones
+
+== What is a Distribution Zone?
+
+Distribution zones in Ignite are entities that combine sets of tables and 
define:
+
+- How these tables are distributed across the cluster, how many copies of data 
are made, how the data is partitioned, how partitions are assigned to nodes.
+
+- On which cluster nodes these tables will be stored.
+
+- How the cluster reacts to nodes entering or leaving the cluster, e.g. 
whether the tables will automatically start using a new node when the cluster 
is scaled up.
+
+Distribution zones are not equivalent to the concept of availability zone 
commonly used in cloud computing.
+
+Availability zone is a set of infrastructure resources with independent 
hardware, networking, power, and is often physically separated from other 
availability zones.
+
+Ignite cluster often spans across multiple availability zones, and 
distribution zones also typically span across multiple availability zones. That 
way, tables can continue to be available even if one of the availability zones 
goes down.
+
+//When a Ignite cluster uses multiple availability zones, it is recommended to 
use rack awareness feature of distribution zones to ensure that data copies are 
split between the availability zones.
+
+
+== Default Zone
+
+Ignite 3 create a `default` distribution zone on startup. This distribution 
zone stores data from tables when they are not configured to use a different 
zone, or when a different distribution zone is not available. This distribution 
zone has 25 partitions, 1 partition replica and does not adjust itself to new 
nodes entering or exiting the cluster. For production purposes, we recommend 
creating a new distribution zone adjusted for your purposes.
+
+== Creating and Using Zones
+
+Distribution zones in Ignite 3 are created by using the SQL `CREATE ZONE` 
command. When creating a zone, you must specify the 
link:administrators-guide/storage/storage-overview[Storage Profile] to use. The 
storage profile determines what storage engine will be used, and storage 
properties.
+
+The example below creates a primary distribution zone with the default storage 
profile:
+
+[source,sql]
+----
+CREATE ZONE PrimaryZone (PARTITIONS 25) STORAGE PROFILES ['default'];
+----
+
+== Configuring Data Replication
+
+You can control the number of partitions (how many pieces the data is split 
into) and replicas (how many copies of data are stored) by using the 
`PARTITIONS` and `REPLICAS` options.
+
+If not specified, the distribution zone creates `(dataNodesCount * coresOnNode 
* 2) / replicaFactor` partitions, and does not create copies of data. The 
`dataNodesCount` is the estimated number of nodes that will be in the 
distribution zone when it  is created, according to its 
link:administrators-guide/storage/distribution-zones#node-filtering[filter] and 
link:administrators-guide/storage/storage-overview[storage profiles]. At least 
1 partition is always created.
+
+In the example below, the tables will be split into 50 partitions, and each 
partition will have 3 copies of itself stored on the cluster:
+
+[source,sql]
+----
+CREATE ZONE IF NOT EXISTS exampleZone (PARTITIONS 50, REPLICAS 3) STORAGE 
PROFILES ['default'];
+----
+
+Partitions with the same number for all tables in the zone are always stored 
on the same nodes within the distribution zone.
+
+You can also specify `ALL` as the number of replicas to automatically scale 
the number of replicas to be equal to the number of nodes in your cluster.
+
+[source,sql]
+----
+CREATE ZONE exampleZone (REPLICAS ALL) STORAGE PROFILES ['default'];
+----
+
+=== Replicated Zones
+
+For scenarios requiring maximum data availability, you can create a replicated 
zone by specifying `ALL` as the number of replicas. This automatically scales 
the number of replicas to match the number of nodes in your cluster, placing a 
copy of every partition on every node.
+
+[source,sql]
+----
+CREATE ZONE exampleZone (REPLICAS ALL) STORAGE PROFILES ['default'];
+----
+
+When you create a replicated zone, Ignite ensures that each partition has a 
replica on every node in the cluster. As new nodes join the cluster, they 
automatically receive replicas and become learners in the RAFT groups until the 
zone adjusts its configuration.
+
+==== Combining Replicated and Standard Zones
+
+A common pattern is to use replicated zones for reference data and standard 
zones with fewer replicas for transactional data:
+
+[source,sql]
+----
+-- Replicated zone for reference data
+CREATE ZONE RefDataZone (REPLICAS ALL) STORAGE PROFILES ['default'];
+-- Standard zone for transactional data
+CREATE ZONE TransactionalZone (REPLICAS 3) STORAGE PROFILES ['default'];
+-- Reference table in replicated zone
+CREATE TABLE Countries (
+  id int PRIMARY KEY,
+  code varchar(2),
+  name varchar(100)
+) ZONE RefDataZone;
+-- Transactional table in standard zone
+CREATE TABLE Orders (
+  id int PRIMARY KEY,
+  customer_id int,
+  country_code varchar(2),
+  amount decimal
+) ZONE TransactionalZone;
+----
+
+This approach gives you local access to reference data while keeping storage 
requirements reasonable for high-volume transactional data.
+
+=== Storage Profiles
+
+When creating a distribution zone, you can define a set of 
link:administrators-guide/storage/storage-overview[storage profiles] that can 
be used by tables in this zone. You cannot alter storage profiles after the 
distribution zone was created. To create a Distribution Zone that will use one 
or multiple Storage Profiles, use the following SQL command:
+
+[source,sql]
+----
+CREATE ZONE exampleZone (PARTITIONS 2, REPLICAS 3) STORAGE PROFILES 
['profile1', 'profile3'];
+----
+
+In this case, the table created in this distribution zones can only use 
`profile1` or `profile3`.
+
+=== Quorum Size
+
+You can set the `QUORUM SIZE` parameter to fine-tune the number of replicas 
that must be available for the zone to remain operational.
+
+Ignite automatically configures the minimum recommended number of replicas for 
your distribution zone. `3` data replicas are required for quorum if the 
distribution zone has 5 or more replicas, 2 if there are between 2 and 4 
replicas, or 1 if only one data replica exists.
+
+There are the following limitations to quorum sizes depending on the number of 
replicas:
+
+* _Minimum_ value: `1` if there is only one replica and `2` if there is more 
than one.
+* _Maximum_ value: half the total number of replicas rounded up.
+
+The example below shows how you can configure quorum size:
+
+[source,sql]
+----
+CREATE ZONE exampleZone (REPLICAS 9, QUORUM SIZE 5) STORAGE PROFILES 
['default'];
+----
+
+TIP: It is recommended to use odd number of replicas as your quorum size.
+
+=== Node Filtering
+
+Distribution zones can get node attributes, that can be specified in 
link:administrators-guide/config/node-config[node configuration], and 
dynamically distribute data only to nodes that have the specified attributes. 
This can be used, for example, to only process data from the application on 
nodes with SSD drives. If no node matches the filter, the data will be stored 
on all nodes instead. Distribution zone filter uses JSONPath rules.
+
+The example below creates a new `storage` attribute and sets it to `SSD`:
+
+----
+node config update -n defaultNode 
ignite.nodeAttributes.nodeAttributes.storage="SSD"
+----
+
+The example below creates a distribution zone that only stores data on nodes 
that have the SSD attribute:
+
+[source,sql]
+----
+CREATE ZONE IF NOT EXISTS exampleZone (NODES FILTER '$[?(@.storage == 
"SSD")]') STORAGE PROFILEs ['default'];
+----
+
+You can change the distribution zone filter by using the `ALTER ZONE` command, 
for example:
+
+[source,sql]
+----
+ALTER ZONE exampleZone SET DATA_NODES_FILTER='$[?(@.storage == "HDD")]';
+----
+
+If you no longer need to filter the data nodes, set the filter to match all 
nodes:
+
+[source,sql]
+----
+ALTER ZONE exampleZone SET DATA_NODES_FILTER='$..*';
+----
+
+=== High Availability
+
+By default, Ignite ensures strong consistency of data in the cluster. To do 
this, it requires the majority of 
link:administrators-guide/storage/distribution-zones[replicas of data 
partitions] to be available. As partitions are spread across the nodes, it is 
possible to lose the majority of nodes that hold data for the data region, 
leading to all operations in the data region being stopped until the majority 
can be safely restored. This ensures that no data is lost.
+
+In high load environments, this behavior may be undesirable, as it interrupts 
writing data at the cost of negating a minor chance of losing data together 
with the nodes that left the cluster. For this scenario, Ignite provides high 
availability zones. If a zone has high availability enabled, and the majority 
of nodes with data from it leave the cluster, the data on them is considered 
lost and, after a short delay in case the nodes return, the cluster continues 
to handle read and write re [...]
+
+High availability mode can only be enabled when distribution zone is created. 
To do this, use the following SQL command:
+
+[source,sql]
+----
+CREATE ZONE IF NOT EXISTS exampleZone (REPLICAS 3, CONSISTENCY MODE 'HIGH 
AVAILABILITY') STORAGE PROFILEs ['default'];
+----
+
+== Cluster Scaling
+
+The number of active nodes in the cluster can dynamically change during its 
operation, as more nodes are added or nodes are taken down for maintenance or 
leave the cluster unexpectedly. You can configure whether and when Ignite 
adjusts the distribution zone to match the new cluster topology after a node 
enter or leaves the cluster.
+
+Often it is a good idea to provide a buffer period before redistribution 
begins, allowing in-progress operations to complete. To control this behavior, 
you can specify the following parameters:
+
+- `AUTO SCALE UP` - specifies the delay in seconds between nodes joining the 
cluster and the start of distribution zone adjustment to include the new nodes. 
This parameter is set to 0 seconds by default (immediate scale up).
+- `AUTO SCALE DOWN` - specifies the delay in seconds between nodes leaving the 
cluster and the start of distribution zone adjustment to exclude the departed 
nodes. This parameter is set to `OFF` by default (no automatic scale-down 
occurs).
+
+The example below shows how you can configure cluster scaling delay:
+
+[source,sql]
+----
+CREATE ZONE IF NOT EXISTS exampleZone (AUTO SCALE UP 300, AUTO SCALE DOWN 300) 
STORAGE PROFILES['default'];
+----
+
+Once distribution zone scaling is configured, you can disable it by specifying 
`OFF` in the corresponding parameter, for example:
+
+[source,sql]
+----
+ALTER ZONE exampleZone SET (AUTO SCALE DOWN OFF);
+----
+
+=== Considerations for Zone Size
+
+All tables stored in the distribution zone share resources. As the result, it 
is recommended to consider how large distribution zone needs to be.
+
+As partitions are colocated on the same nodes, assigning tables commonly 
accessed together to the same distribution zone can reduce the overhead 
required for transmitting query results between nodes, and allows colocated 
link:developers-guide/compute/compute[compute jobs].
+
+However, if a table is under heavy load, it may negatively affect the 
performance when working with other tables in the same distribution zone. In 
most scenarios, this should not be a significant concern and correct data 
distribution for your scenarios should be prioritized.
+
+
+== Checking Distribution Zone Properties
+
+Distribution zone properties can be viewed through the `system.zones` 
link:administrators-guide/metrics/system-views[system view]. You can use the 
following SQL command to get it:
+
+[source,sql]
+----
+SELECT * from system.zones;
+----
+
+The command lists information about all distribution zones on the cluster.
+
+== Adjusting Distribution Zones
+
+To change distribution zone parameters, use the `ALTER ZONE` command. You can 
use the same parameters as when creating the zone. For example:
+
+[source,sql]
+----
+ALTER ZONE IF EXISTS exampleZone SET (REPLICAS 5);
+----
+
+== Example Zone Usage
+
+In this example, we create a distribution zone and then create 2 tables that 
will be colocated on the same zone.
+
+[source,sql]
+----
+CREATE ZONE IF NOT EXISTS EXAMPLEZONE (PARTITIONS 20, REPLICAS 3) STORAGE 
PROFILES ['default'];
+
+CREATE TABLE IF NOT EXISTS Person (
+  id int primary key,
+  city_id int,
+  name varchar,
+  age int,
+  company varchar
+) PRIMARY ZONE EXAMPLEZONE;
+
+CREATE TABLE IF NOT EXISTS Account (
+  id int primary key,
+  name varchar,
+  amount int
+) PRIMARY ZONE EXAMPLEZONE;
+----
\ No newline at end of file

Reply via email to