From ff404362ad330bca875932a1ca64ec06cca787da Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Thu, 23 Sep 2021 08:57:27 -0700 Subject: [PATCH 1/4] Initial commit. --- content/embeds/shard-placement-intro.md | 11 +- content/glossary/_index.md | 20 +-- content/rc/databases/create-database.md | 6 +- content/ri/faqs.md | 2 +- content/ri/using-redisinsight/add-instance.md | 8 +- .../using-redisinsight/cluster-management.md | 6 +- .../ri/using-redisinsight/memory-analysis.md | 15 +- .../create-active-active.md | 4 +- .../database-operations/replica-ha.md | 137 ++++++++++++++++++ .../database-operations/slave-ha.md | 122 ---------------- .../designing-production/active-active.md | 30 ++-- .../replicaof-repeatedly-fails.md | 10 +- content/rs/concepts/_index.md | 10 +- .../data-access/consistency-durability.md | 25 ++-- .../high-availability/rack-zone-awareness.md | 13 +- .../concepts/high-availability/replication.md | 4 +- content/rs/concepts/shard-placement-policy.md | 21 +-- content/rs/concepts/terminology.md | 24 +-- .../getting-started/getting-started-docker.md | 2 +- .../configuring-aws-instances.md | 2 +- content/rs/references/memtier-benchmark.md | 106 +++++++------- .../rs-5-4-december-2018.md | 4 +- .../rs/release-notes/rs-5-6-0-april-2020.md | 12 +- .../rs/release-notes/rs-6-0-20-april-2021.md | 2 +- static/images/rs/sharding.png | Bin 65652 -> 52834 bytes 25 files changed, 311 insertions(+), 285 deletions(-) create mode 100644 content/rs/administering/database-operations/replica-ha.md delete mode 100644 content/rs/administering/database-operations/slave-ha.md mode change 100644 => 100755 static/images/rs/sharding.png diff --git a/content/embeds/shard-placement-intro.md b/content/embeds/shard-placement-intro.md index 75dd463b9eb..ed82af8e569 100644 --- a/content/embeds/shard-placement-intro.md +++ b/content/embeds/shard-placement-intro.md @@ -1,19 +1,20 @@ In addition to the shard placement policy, considerations that determine shard placement are: -- Separation of master and slave shards +- Separation of master and replica shards - Available persistence and Redis on Flash (RoF) storage - [Rack awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}) - Memory available to host the database when fully populated The shard placement policies are: -- dense - Place as many shards as possible on the smallest number of nodes to reduce the latency between the proxy and the database shards; +- `dense` - Place as many shards as possible on the smallest number of nodes to reduce the latency between the proxy and the database shards; Recommended for Redis on RAM databases to optimize memory resources -- sparse - Spread the shards across as many nodes in the cluster as possible to spread the traffic across cluster nodes; +- `sparse` - Spread the shards across as many nodes in the cluster as possible to spread the traffic across cluster nodes; Recommended for Redis on Flash databases to optimize disk resources -When you create an RS cluster, the default shard placement policy (**dense**) is assigned to all databases that you create on the cluster. +When you create a Redis Enterprise Software cluster, the default shard placement policy (`dense`) is assigned to all databases that you create on the cluster. + You can: -- Change the default shard placement policy for the cluster to **sparse** so that the cluster applies that policy to all databases that you create +- Change the default shard placement policy for the cluster to `sparse` so that the cluster applies that policy to all databases that you create - Change the shard placement policy for each database after the database is created \ No newline at end of file diff --git a/content/glossary/_index.md b/content/glossary/_index.md index 4fb704d7317..df3b69765b1 100644 --- a/content/glossary/_index.md +++ b/content/glossary/_index.md @@ -13,7 +13,7 @@ aliases: /glossary/ {{%/definition%}} ---> -## A, B +## A, B {#letter-a} {{%definition "admission controller"%}} A piece of code that intercepts requests to the Kubernetes API server prior to persistence of the object. @@ -49,7 +49,7 @@ dataset by replaying the append-only log from the beginning to the end. More info: [Data Persistence]({{}}), [Data Persistence with Redis Enterprise Software]({{}}) {{%/definition%}} -## C +## C {#letter-c} {{%definition "CIDR allowlist"%}} Classless Inter-Domain Routing (CIDR) is a method to allocate and route IP addresses. A CIDR allowlist defines a range of IP addresses and permits connections to them. @@ -88,7 +88,7 @@ Custom code that defines a resource to add to your Kubernetes API server without More info: [CustomResourceDefinition](https://kubernetes.io/docs/reference/glossary/?fundamental=true#term-CustomResourceDefinition), [Custom Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) {{%/definition%}} -## D - F +## D - F {#letter-d} {{%definition "data eviction policy"%}} Defines how excess data is handled when the database exceeds the memory limit. @@ -108,7 +108,7 @@ Linux command to synchronize a file's in-core state with a storage device More info: [`fsync` man page]("https://man7.org/linux/man-pages/man2/fsync.2.html") {{%/definition%}} -## G - J +## G - J {#letter-g} {{%definition "hash slot"%}} The result of a hash calculation. @@ -128,7 +128,7 @@ An API object that manages external access to the services in a Kubernetes clust More info: [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) {{%/definition%}} -## K, L +## K, L {#letter-k} {{%definition "kubectl"%}} A command line tool for communicating with a Kubernetes API server. @@ -142,7 +142,7 @@ A protocol for accessing and maintaining distributed directory services over an More info: [LDAP wikipedia](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol/), [LDAP authentication]({{}}) {{%/definition%}} -## M - O +## M - O {#letter-m} {{%definition "Master node"%}} Node that operates as the leader of a cluster @@ -178,7 +178,7 @@ More info: [Operator pattern](https://kubernetes.io/docs/concepts/extend-kuberne If a member Active-Active database is in an out of memory situation, that member is marked “inconsistent” by Redis Enterprise Software, the member stops responding to user traffic, and the syncer initiates full reconciliation with other peers in the Active-Active database. {{%/definition%}} -## P - R +## P - Q {#letter-p} {{%definition "participating clusters"%}} Clusters participating in the multi-master replication of an Active-Active database. @@ -192,6 +192,8 @@ Deciding where shards will be created and placed. Node provisioned only for cluster operations that can be elected as a master node. The quorum node participates in the cluster quorum and must be explicitly assigned this role via the `rladmin` command. {{%/definition%}} +## R {#letter-r} + {{%definition "rack-zone awareness"%}} Redis Enterprise feature that helps to ensure high-availability in the event of a rack or zone failure. In the event of a rack or zone failure, the slaves and endpoints in the remaining racks/zones will be promoted. @@ -261,7 +263,7 @@ A security approach that restricts system access to authorized users. More info: [RBAC wikipedia](https://en.wikipedia.org/wiki/Role-based_access_control); [Database access control]({{}}); [Passwords, users, and roles]({{}}) {{%/definition%}} -## S +## S {#letter-s} {{%definition "secret"%}} Kubernetes term for object that stores sensitive information, such as passwords, OAuth tokens, and ssh keys. @@ -287,7 +289,7 @@ More info: [SASL wikipedia](https://en.wikipedia.org/wiki/Simple_Authentication_ Data persistence file that performs a data dump every one, six, or twelve hours. {{%/definition%}} -## T - Z +## T - Z {#letter-t} {{%definition "Transport Layer Security (TLS)"%}} Protocols that provide communications security over a computer network. diff --git a/content/rc/databases/create-database.md b/content/rc/databases/create-database.md index ab488a19ab9..a94573a89dd 100644 --- a/content/rc/databases/create-database.md +++ b/content/rc/databases/create-database.md @@ -16,14 +16,14 @@ Once you have a subscription, you can easily create a database in Redis Cloud by 1. Configure the database: - **Name** - Enter a name for the database. (Up to 40 characters long) - **Protocol** - Select whether the database uses **Redis** or **Memcached**. - - **Memory** - Enter a memory limit for the database. If replication is on, the database limit includes the memory of the slave shards. + - **Memory** - Enter a memory limit for the database. If replication is on, the database limit includes the memory of the replica shards. - **Redis on Flash** - If your database uses [Redis on Flash]({{< relref "/rs/concepts/memory-architecture/redis-flash.md" >}}), enter the average data structure size (in bytes). This helps us optimize your database. - **Throughput** - In **Throughput by**, select the definition of throughput as: - Ops/sec - Enter the required **Max Throughput** between 1000 and 10000000. - Shards - Enter the number of **Shards** you require for the database. - - **Replication** - By default, each shard has a slave shard. - If you do not require slave shards, disable replication. + - **Replication** - By default, each shard has a replica shard. + If you do not require replica shards, disable replication. - **Data Persistence** - Select when and how the data is saved to [persistent storage]({{< relref "rc/databases/configuration/data-persistence.md" >}}) : - None - Data is not persisted to disk at all. - Append Only File (AoF) one second - Data is fsynced to disk every second. diff --git a/content/ri/faqs.md b/content/ri/faqs.md index c78e5ebe24d..86017c43331 100644 --- a/content/ri/faqs.md +++ b/content/ri/faqs.md @@ -71,7 +71,7 @@ Data is downloaded in one of two ways: ### What is the overhead of online memory analysis on redis server? -The overhead is minimal. If SYNC command is supported, the overhead is the same as connecting a slave for a short duration. If SYNC command is disabled, we run the SCAN command followed by DUMP in a pipeline. Neither approach blocks your redis server. +The overhead is minimal. If SYNC command is supported, the overhead is the same as connecting a replica for a short duration. If SYNC command is disabled, we run the SCAN command followed by DUMP in a pipeline. Neither approach blocks your redis server. ### What is offline mode of memory analysis? diff --git a/content/ri/using-redisinsight/add-instance.md b/content/ri/using-redisinsight/add-instance.md index dd1ba9916dd..b311b54bf7b 100644 --- a/content/ri/using-redisinsight/add-instance.md +++ b/content/ri/using-redisinsight/add-instance.md @@ -1,5 +1,6 @@ --- -Title: Adding a Redis Database +Title: Add a Redis database +linkTitle: Add database date: 2018-07-20 03:49:29 +0530 weight: 10 categories: ["RI"] @@ -8,7 +9,8 @@ nextStep: Title: Memory Analysis href: /docs/features/memory-analysis/ --- -Before using any of the tools to work with your database, you must first add the database so RedisInsight can connect to it. +Before using any of the tools to work with your database, you must first add the database so RedisInsight can connect to it.\ + Each of these database configurations requires specific steps to add them to RedisInsight: - Standalone Redis @@ -79,7 +81,7 @@ To add a [Redis Cluster](https://redis.io/topics/cluster-tutorial) database: ### Add a Redis Sentinel database [Redis Sentinel](https://redis.io/topics/sentinel) is often used for High Availability deployments of Redis. -It provides automatic master-to-slave failover. +It provides automatic master-to-replica failover. When you use Sentinel, clients connect to the Sentinel instance to get the current topology of the databases. The client then connects to the current master. If the connection fails, the client queries the Sentinel instance again to find the current master. diff --git a/content/ri/using-redisinsight/cluster-management.md b/content/ri/using-redisinsight/cluster-management.md index a97e4b18b08..f5098d431c9 100644 --- a/content/ri/using-redisinsight/cluster-management.md +++ b/content/ri/using-redisinsight/cluster-management.md @@ -5,7 +5,7 @@ weight: 30 categories: ["RI"] path: features/cluster-management/ --- -RedisInsight Cluster Management provides you with a GUI to manage your Redis Cluster with ease. Cluster Management comes with three different views to analyze your cluster architecture. +RedisInsight Cluster Management provides a graphical user interface (GUI) to manage your Redis Cluster. Cluster Management comes with three different views to analyze your cluster architecture. 1. **Master Layout** - This view only contains information about the masters present in the Redis Cluster. The information present is - slot ranges, host, port and few metrics gathered from redis INFO Command. 1. **Master-Replica Layout** - This view contains masters along with their replicas. This view contains information about slots ranges, host, port, etc for both master and replica. @@ -21,9 +21,9 @@ Cluster Management not only gives you a representation of your cluster but also 1. **Manual Resharding** - Manual Resharding asks for source and destination nodes with slot ranges. Using this you can migrate the specified slot range from source to destination node in just a few clicks. 1. **Add Node to Cluster**- Cluster Management allows you to add a new node to your cluster as a master. The node should be empty and should have cluster enabled. 1. **Manual Failover** - Using this you can manually failover a replica node to become the master. -1. **Delete Node in Cluster** - Using this a slave can be deleted. We dont support deletion of masters as deleting a master directly can be problematic +1. **Delete Node in Cluster** - Using this to delete a replica. (Master nodes cannot be deleted.) 1. **Make a node Replica of Master** - Cluster management includes a feature to make the selected node replica of a master. If the node is already a replica, no work is required. If the node is a master, then that should be empty i.e. - no hash slots and keys. -1. **Cluster Health Monitoring & Alerts** - Cluster Management constantly runs health checks for your cluster and returns alerts if there is any issue with the cluster. It also provides alerts if the master and slave are on the same server. The alerts for the cluster can be fixed by using the Fix Cluster feature. +1. **Cluster Health Monitoring & Alerts** - Cluster Management constantly runs health checks for your cluster and returns alerts if there is any issue with the cluster. It also provides alerts if the master and replica are on the same server. The alerts for the cluster can be fixed by using the Fix Cluster feature. ## Compatibility diff --git a/content/ri/using-redisinsight/memory-analysis.md b/content/ri/using-redisinsight/memory-analysis.md index d4d9709519d..8fcd42befe3 100644 --- a/content/ri/using-redisinsight/memory-analysis.md +++ b/content/ri/using-redisinsight/memory-analysis.md @@ -1,13 +1,16 @@ --- -Title: Memory Analysis +Title: Memory analysis +linkTitle: Memory analysis date: 2018-06-14 03:49:29 +0530 weight: 50 categories: ["RI"] path: features/memory-analysis/ --- -RedisInsight Memory analysis help you analyze your redis instance and helps in reducing memory usage and improving application performance. Analysis can be done in two ways: +RedisInsight Memory analysis help you analyze your Redis database, which helps reduce memory use and improves application performance. -1. **online mode** - In this mode, RedisInsight downloads a rdb file from your connected redis instance and analyzes it to create a temp file with all the keys and meta data required for analysis. In case there is a master-slave connection, RedisInsight downloads the dump from the slave instead of the master in order to avoid affecting the performance of the master. +Analysis can be done in two ways: + +1. **online mode** - In this mode, RedisInsight downloads a rdb file from your connected redis instance and analyzes it to create a temp file with all the keys and meta data required for analysis. In case there is a master-replica connection, RedisInsight downloads the dump from the replica instead of the master in order to avoid affecting the performance of the master. 1. **offline mode** - In this mode, RedisInsight analyzes your redis backup files. These files can either be present in your system or on s3. RedisInsight accepts a list of rdb files given to it and analyzes all the information required from these files instead of downloading it from your redis instance. In order to analyze backup files stored in s3, RedisInsight should have ReadOnly permission to your s3 bucket where the files are stored. Specify the name of the s3 bucket and the path to the rdb file. @@ -16,7 +19,7 @@ Specify the name of the s3 bucket and the path to the rdb file. ## Running memory analysis on an instance -Navigte to Memory Analysis > Overview, and then click the "Analyze Now" button. You should see a dialog box with two options - Offline Analysis and Online Analysis. +Navigate to Memory Analysis > Overview, and then click the "Analyze Now" button. You should see a dialog box with two options - Offline Analysis and Online Analysis. Choose the offline analysis approach if you have a RDB Backup file that you want to analyze. We can proceed with online analysis. @@ -60,8 +63,8 @@ This can be done in two ways: 1. Using the [SYNC](https://redis.io/commands/sync) command. This is the preferred approach and is used if possible. - Redis has a `SYNC` command that slaves use to synchronize with the master. - Our agent pretends to be a slave and sends the `SYNC` command to the instance, which responds with all its data as it would to a slave trying to synchronize with it. + Redis has a `SYNC` command that replicas use to synchronize with the master. + Our agent pretends to be a replica and sends the `SYNC` command to the instance, which responds with all its data as it would to a replica trying to synchronize with it. 1. Using the [DUMP](https://redis.io/commands/dump) command. Cloud providers do not support the `SYNC` command, so that approach won't work. But they do support the `DUMP` command. diff --git a/content/rs/administering/creating-databases/create-active-active.md b/content/rs/administering/creating-databases/create-active-active.md index cf6d41c6d76..1e57512dd50 100644 --- a/content/rs/administering/creating-databases/create-active-active.md +++ b/content/rs/administering/creating-databases/create-active-active.md @@ -70,8 +70,8 @@ Every instance of an Active-Active database can receive write operations, and al {{< /note >}} - [**Replication**]({{< relref "/rs/concepts/high-availability/replication.md" >}}) - We recommend that all Active-Active database use replication for best intercluster synchronization performance. - When replication is enabled, every Active-Active database master shard is replicated to a corresponding slave shard. The slave shards are then used to synchronize data between the instances, and the master shards are dedicated to handling client requests. - We also recommend that you enable [slave HA]({{< relref "/rs/administering/database-operations/slave-ha.md" >}}) to ensure that the slave shards are highly-available for this synchronization. + When replication is enabled, every Active-Active database master shard is replicated to a corresponding replica shard. The replica shards are then used to synchronize data between the instances, and the master shards are dedicated to handling client requests. + We also recommend that you enable [replica HA]({{< relref "/rs/administering/database-operations/replica-ha.md" >}}) to ensure that the replica shards are highly-available for this synchronization. - [**Data persistence**]({{< relref "/rs/concepts/data-access/persistence.md" >}}) - To protect against loss of data stored in RAM, diff --git a/content/rs/administering/database-operations/replica-ha.md b/content/rs/administering/database-operations/replica-ha.md new file mode 100644 index 00000000000..6114dbbdb92 --- /dev/null +++ b/content/rs/administering/database-operations/replica-ha.md @@ -0,0 +1,137 @@ +--- +Title: High Availability for Slave Shards +description: +weight: $weight +alwaysopen: false +categories: ["RS"] +aliases: /rs/administering/database-operations/slave-ha.md, + /rs/administering/database-operations/slave-ha/, + /rs/administering/database-operations/replica-ha.md, + /rs/administering/database-operations/replica-ha/ +--- +When you enable [database replication]({{< relref "/rs/concepts/high-availability/replication.md" >}}) for your database, +Redis Enterprise Software copies your data to a replica node to make your data highly available. +If the replica node fails or if the master node fails and the replica is promoted to master, +the remaining master node is a single point of failure. + +You can configure high availability for replica shards so that the cluster automatically migrates the replica shards to an available node. This process is known as _replica high availability_ or _replica\_ha_ (previously _slave\_ha_). + +An available node: + +1. Meets replica migration requirements, such as [rack-awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}). +1. Has enough available RAM to store the replica shard. +1. Does not also contain the master shard. + +In practice, replica migration creates a new replica shard and copies the data from the master shard to the new replica shard. + +For example: + +1. Node:2 has a master shard and node:3 has the corresponding replica shard. +1. Either: + + - Node:2 fails and the replica shard on node:3 is promoted to master. + - Node:3 fails and the master shard is no longer replicated to the replica shard on the failed node. + +1. If replica HA is enabled, a new replica shard is created on an available node. +1. The data from the master shard is replicated to the new replica shard. + +{{< note >}} +- Replica HA follows all prerequisites of replica migration, such as [rack-awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}). +- Replica HA migrates as many shards as possible based on available DRAM in the target node. When no DRAM is available, replica HA stops migrating replica shards to that node. +{{< /note >}} + +## Configuring high availability for slave shards + +Using `rladmin` or the REST API, replica HA is controlled on the database level and on the cluster level. +You can enable or disable replica HA for a database or for the entire cluster. + +When replica HA is enabled for both the cluster and a database, +replica shards for that database are automatically migrated to another node in the event of a master or replica shard failure. +If replica HA is disabled at the cluster level, +replica HA will not migrate replica shards even if replica HA is enabled for a database. + +{{< note >}} +By default, replica HA is enabled for the cluster and disabled for each database. +{{< /note >}} + +{{< note >}} +For Active-Active databases, replica HA is enabled for the database by default to make sure that replica shards are available for Active-Active replication. +{{< /note >}} + +To enable replica HA for a cluster using `rladmin`, run: + +``` text +rladmin tune cluster slave_ha enabled +``` + +To disable replica HA for a specific database using `rladmin`, run: + +``` text +rladmin tune db slave_ha disabled +``` + +## Configuration options + +You can see the current configuration options for replica HA with: + +``` text +rladmin info cluster +``` + +### Grace period + +By default, replica HA has a 10-minute grace period after node failure and before new replica shards are created. + +To configure this grace period from rladmin, run: + +``` text +rladmin tune cluster slave_ha_grace_period +``` + +### Shard priority + +Replica shard migration is based on priority. When memory resources are limited, the most important replica shards are migrated first: + +1. `slave_ha_priority` - Replica shards with higher + integer values are migrated before shards with lower values. + + To assign priority to a database, run: + + ``` text + rladmin tune db slave_ha_priority + ``` + +1. Active-Active databases - Active-Active database synchronization uses replica shards to synchronize between the replicas. +1. Database size - It is easier and more efficient to move replica shards of smaller databases. +1. Database UID - The replica shards of databases with a higher UID are moved first. + +### Cooldown periods + +Both the cluster and the database have cooldown periods. +After node failure, the cluster cooldown period prevents another replica migration due to another node failure for any +database in the cluster until the cooldown period ends (default: one hour). + +After a database is migrated with replica HA, +it cannot go through another migration due to another node failure until the cooldown period for the database ends (Default: two hours). + +To configure this grace period from `rladmin`, run: + +- For the cluster: + + ``` text + rladmin tune cluster slave_ha_cooldown_period + ``` + +- For all databases in the cluster: + + ``` text + rladmin tune cluster slave_ha_bdb_cooldown_period + ``` + +### Alerts + +The following alerts are sent during replica HA activation: + +- Shard migration begins after the grace period. +- Shard migration fails because there is no available node (sent hourly). +- Shard migration is delayed because of the cooldown period. diff --git a/content/rs/administering/database-operations/slave-ha.md b/content/rs/administering/database-operations/slave-ha.md deleted file mode 100644 index 5029f4546b0..00000000000 --- a/content/rs/administering/database-operations/slave-ha.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -Title: High Availability for Slave Shards -description: -weight: $weight -alwaysopen: false -categories: ["RS"] ---- -When you enable [database replication]({{< relref "/rs/concepts/high-availability/replication.md" >}}) for your database, -Redis Enterprise Software replicates your data to a slave node to make sure that your data is highly available. -If the slave node fails or if the master node fails and the slave is promoted to master, -the remaining master node is a single point of failure. - -You can configure high availability for slave shards (slave HA) so that the cluster automatically migrates the slave shards to an available node. -An available node is a node that: - -1. Meets slave migration requirements, such as [rack-awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}). -1. Has enough available RAM to store the slave shard. -1. Does not also contain the master shard. - -In practice, slave migration creates a new slave shard and replicates the data from the master shard to the new slave shard. -For example: - -1. Node:2 has a master shard and node:3 has the corresponding slave shard. -1. Either: - - - Node:2 fails and the slave shard on node:3 is promoted to master. - - Node:3 fails and the master shard is no longer replicated to the slave shard on the failed node. - -1. If slave HA is enabled, a new slave shard is created on an available node. -1. The data from the master shard is replicated to the new slave shard. - -{{< note >}} -- Slave HA follows all prerequisites of slave migration, such as [rack-awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}). -- Slave HA migrates as many shards as possible based on available DRAM in the target node. When no DRAM is available, slave HA stops migrating slave shards to that node. -{{< /note >}} - -## Configuring high availability for slave shards - -Using rladmin or the REST API, slave HA is controlled on the database level and on the cluster level. -You can enable or disable slave HA for a database or for the entire cluster. - -When slave HA is enabled for both the cluster and a database, -slave shards for that database are automatically migrated to another node in the event of a master or slave shard failure. -If slave HA is disabled at the cluster level, -slave HA will not migrate slave shards even if slave HA is enabled for a database. - -{{< note >}} -By default, slave HA is enabled for the cluster and disabled for each database. -{{< /note >}} - -{{< note >}} -For Active-Active databases, slave HA is enabled for the database by default to make sure that slave shards are available for Active-Active replication. -{{< /note >}} - -To enable slave HA for a cluster using rladmin, run: - - rladmin tune cluster slave_ha enabled - -To disable slave HA for a specific database using rladmin, run: - - rladmin tune db slave_ha disabled - -## Slave HA configuration options - -You can see the current configuration options for slave HA with: `rladmin info cluster` - -### Grace period - -By default, slave HA has a 10-minute grace period after node failure and before new slave shards are created. -To configure this grace period from rladmin, run: - - rladmin tune cluster slave_ha_grace_period - -### Shard priority - -Slave shard migration is based on priority so that, in the case of limited memory resources, -the most important slave shards are migrated first. -Slave HA migrates slave shards for databases according to this order of priority: - -1. slave_ha_priority - The slave shards of the database with the higher slave_ha_priority - integer value are migrated first. - - To assign priority to a database, run: - - ``` - rladmin tune db slave_ha_priority - ``` - -1. Active-Active databases - Active-Active database synchronization uses slave shards to synchronize between the replicas. -1. Database size - It is easier and more efficient to move slave shards of smaller databases. -1. Database UID - The slave shards of databases with a higher UID are moved first. - -### Cooldown periods - -Both the cluster and the database have cooldown periods. -After node failure, the cluster cooldown period prevents another slave migration due to another node failure for any -database in the cluster until the cooldown period ends (Default: 1 hour). - -After a database is migrated with slave HA, -it cannot go through another slave migration due to another node failure until the cooldown period for the database ends (Default: 2 hours). - -To configure this grace period from rladmin, run: - -- For the cluster: - - ``` - rladmin tune cluster slave_ha_cooldown_period - ``` - -- For all databases in the cluster: - - ``` - rladmin tune cluster slave_ha_bdb_cooldown_period - ``` - -### Alerts - -The following alerts are sent during slave HA activation: - -- Shard migration begins after the grace period. -- Shard migration fails because there is no available node (Sent hourly). -- Shard migration is delayed because of the cooldown period. diff --git a/content/rs/administering/designing-production/active-active.md b/content/rs/administering/designing-production/active-active.md index 4725d90bd7f..101e05fd6dc 100644 --- a/content/rs/administering/designing-production/active-active.md +++ b/content/rs/administering/designing-production/active-active.md @@ -9,17 +9,17 @@ aliases: /rs/administering/intercluster-replication/crdbs/ --- In Redis Enterprise, active-active geo-distribution is based on [CRDT technology](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type). The Redis Enterprise implementation of CRDT is called an Active-Active database (formerly known as CRDB). -With Active-Active databases, applications can read and write to the same data set from different geographical locations seamlessly and with latency less than 1 ms, +With Active-Active databases, applications can read and write to the same data set from different geographical locations seamlessly and with latency less than one millisecond (ms), without changing the way the application connects to the database. Active-Active databases also provide disaster recovery and accelerated data read-access for geographically distributed users. {{< note >}} Active-Active databases do not replicate the entire database, only the data. -Database configurations, Lua scripts, and other configurations are not replicated. +Database configurations, LUA scripts, and other support info are not replicated. {{< /note >}} -You can create Active-Active databases on Redis Enterprise Software (RS) or Redis Cloud. +You can create Active-Active databases on Redis Enterprise Software or Redis Cloud. ## Considerations for Active-Active Databases {#considerations-for-activeactive-databases} @@ -28,10 +28,10 @@ An Active-Active database is made up of instances of the data that are each stor Before configuring an Active-Active database, you must: -- If the Active-Active database spans a WAN, establish a VPN between each networks that hosts a cluster with an instance. +- If the Active-Active database spans a WAN, establish a VPN between each network that hosts a cluster with an instance. - Setup [RS clusters]({{< relref "/rs/administering/new-cluster-setup.md" >}}) for each Active-Active database instance. - All clusters must have the same RS version. + All clusters must have the same Redis Enterprise Software version. - Configure [FQDNs in a DNS server]({{< relref "/rs/installing-upgrading/configuring/cluster-name-dns-connection-management/_index.md" >}}) for connections to the cluster. Active-Active databases are not compatible with the [Discovery Service]({{< relref "/rs/concepts/data-access/discovery-service.md" >}}) for inter-cluster communications, @@ -106,11 +106,11 @@ The syncer process: Some replication capabilities are also included in [open source redis](https://redis.io/topics/replication). -The Master at the top of the master-slaves tree creates a replication ID. -This replication ID is identical for all slaves in that tree. +The Master at the top of the master-replica tree creates a replication ID. +This replication ID is identical for all replicas in that tree. When a new master is appointed, the replication ID changes but a partial sync from the previous ID is still possible. In a partial sync, the backlog of operations since the offset are transferred as raw operations. -In a full sync, the data from the master is transferred to the slave as an RDB file which is followed by a partial sync. +In a full sync, the data from the master is transferred to the replica as an RDB file which is followed by a partial sync. Partial synchronization requires a backlog large enough to store the data operations until connection is restored. @@ -119,7 +119,7 @@ Partial synchronization requires a backlog large enough to store the data operat In the case of an Active-Active database: - Multiple past replication IDs and offsets are stored to allow for multiple syncs -- The Active-Active backlog is also sent to the slave during a full sync +- The Active-Active backlog is also sent to the replica during a full sync {{< warning >}} Full sync triggers heavy data transfers between geo-replicated instances of an Active-Active database. @@ -127,12 +127,12 @@ Full sync triggers heavy data transfers between geo-replicated instances of an A The scenarios in which an Active-Active database updates to other instances use partial synchronization are: -- Failover of master shard to slave shard -- Restart or crash of slave shard that requires sync from master -- Migrate slave shard to another node -- Migrate master shard to another node as a slave using failover and slave migration -- Migrate master shard and preserve roles using failover, slave migration, and second failover to return shard to master +- Failover of master shard to replica shard +- Restart or crash of replica shard that requires sync from master +- Migrate replica shard to another node +- Migrate master shard to another node as a replica using failover and replica migration +- Migrate master shard and preserve roles using failover, replica migration, and second failover to return shard to master {{< note >}} -Synchronization of data from the master shard to the slave shard is always a full synchronization. +Synchronization of data from the master shard to the replica shard is always a full synchronization. {{< /note >}} diff --git a/content/rs/administering/troubleshooting/replicaof-repeatedly-fails.md b/content/rs/administering/troubleshooting/replicaof-repeatedly-fails.md index 76c20ab6aa8..6b5069eb1bc 100644 --- a/content/rs/administering/troubleshooting/replicaof-repeatedly-fails.md +++ b/content/rs/administering/troubleshooting/replicaof-repeatedly-fails.md @@ -14,15 +14,15 @@ is configured to a relatively small value, which causes the connection drop. **Resolution**: Reconfigure the buffer on the source database to a bigger value: -- If the source is a Redis database on an RS cluster, - increase the slave buffer size of the **source database** with: +- If the source is a Redis database on an Redis Enterprise Software cluster, + increase the replica buffer size of the **source database** with: `rladmin tune db < db:id | name > slave_buffer < value >` -- If the source is a Redis database not on an RS cluster, +- If the source is a Redis database not on an Redis Enterprise Software cluster, use the [config set](http://redis.io/commands/config-set) command through - redis-CLI to increase the client output buffer size of the **source database** with: + `redis-cli` to increase the client output buffer size of the **source database** with: `config set client-output-buffer-limit "slave "` -**Additional information**: [Top Redis Headaches for Devops - Replication Buffer](https://redislabs.com/blog/top-redis-headaches-for-devops-replication-buffer) +**Additional information**: [Top Redis Headaches for DevOps - Replication Buffer](https://redislabs.com/blog/top-redis-headaches-for-devops-replication-buffer) diff --git a/content/rs/concepts/_index.md b/content/rs/concepts/_index.md index d92fd3860b7..c7d00464d25 100644 --- a/content/rs/concepts/_index.md +++ b/content/rs/concepts/_index.md @@ -17,9 +17,9 @@ zones. Redis Enterprise architecture is made up of a management path responsible for orchestrating the cluster, placement of database shards as well as detecting and mitigating failures. Proxy helps scale connection management. -- Data Access path is composed of master and slave Redis shards. +- Data Access path is composed of master and replica Redis shards. Clients perform data operations on the master shard. Master shards - maintain slave shards using the in-memory replication for protection + maintain replica shards using the in-memory replication for protection against failures that may render master shard inaccessible. ![Redis Enterprise Stack](/images/rs/rp_stack.png) @@ -31,11 +31,11 @@ shards.* ## High availability with Redis Enterprise -Redis Enterprise uses in-memory replication to maintain master and slave +Redis Enterprise uses in-memory replication to maintain master and replica replicas. Redis Enterprise comes with various watchdogs that detect and protect against many failures types. Under failures such as node, network, process failures that render master replica inaccessible, Redis -Enterprise automatically promotes the slave replica to be a master +Enterprise automatically promotes the replica replica to be a master replica and redirects the client connection transparently to the new master replica. @@ -62,7 +62,7 @@ latencies. Resharding is performed without downtime. ![Sharding diagram](/images/rs/sharding.png) *Figure 2* -*Redis Enterprise places master (M) and slave (S) replicas in separate +*Redis Enterprise places master node (M) and replica (R) replicas in separate nodes, racks and zones and use in-memory replication to protect data against failures.* diff --git a/content/rs/concepts/data-access/consistency-durability.md b/content/rs/concepts/data-access/consistency-durability.md index 4eb72ab3491..55255d3cac1 100644 --- a/content/rs/concepts/data-access/consistency-durability.md +++ b/content/rs/concepts/data-access/consistency-durability.md @@ -1,15 +1,16 @@ --- -Title: Consistency and Durability +Title: Consistency and durability +linkTitle: Consistency and durability description: weight: $weight alwaysopen: false categories: ["RS"] --- -Redis Enterprise Software (RS) comes with the ability to replicate data -to another slave for high availability and persist in-memory data on +Redis Enterprise Software comes with the ability to replicate data +to another replica for high availability and persist in-memory data on disk permanently for durability. With the WAIT command, you can control the consistency and durability guarantees for the replicated and -persisted database in RS. +persisted database. Any updates that are issued to the database are typically performed with the following flow shown below; @@ -21,31 +22,31 @@ the following flow shown below; completes 1. The proxy sends the acknowledgment back to the application. -Independently, the write is communicated from master to slave and +Independently, the write is communicated from master to replica and replication acknowledges the write back to the master. These are steps 5 and 6. -Independently, the write to a slave is also persisted to disk and -acknowledged within the slave. These are steps 7 and 8. +Independently, the write to a replica is also persisted to disk and +acknowledged within the replica. These are steps 7 and 8. ![Weak Consistency](/images/rs/weak-consistency.png) With the WAIT command, applications can ask to wait for acknowledgments only after replication or persistence is confirmed on -the slave. The flow of a write operation with the WAIT command is +the replica. The flow of a write operation with the WAIT command is shown below: 1. Application issues a write, 1. Proxy communicates with the correct master "shard" in the system that contains the given key, -1. Replication communicated the update to the slave shard. -1. Slave persists the update to disk (assuming AOF every write setting +1. Replication communicated the update to the replica shard. +1. Replica persists the update to disk (assuming AOF every write setting is selected). -1. The acknowledgment is sent back from the slave all the way to the +1. The acknowledgment is sent back from the replica all the way to the proxy with steps 5 to 8. With this flow, the application only gets the acknowledgment from the -write after durability is achieved with replication to the slave and to +write after durability is achieved with replication to the replica and to the persistent storage. ![Strong Consistency](/images/rs/strong-consistency.png) diff --git a/content/rs/concepts/high-availability/rack-zone-awareness.md b/content/rs/concepts/high-availability/rack-zone-awareness.md index 8999441715f..3195b721f53 100644 --- a/content/rs/concepts/high-availability/rack-zone-awareness.md +++ b/content/rs/concepts/high-availability/rack-zone-awareness.md @@ -1,17 +1,18 @@ --- Title: Rack-zone awareness in Redis Enterprise Software -description: +linkTitle: Rack-zone awareness +description: Rack-zone awareness ensures high-availability in the event of a rack or zone failure. weight: $weight alwaysopen: false categories: ["RS"] --- Rack-zone awareness is a Redis Enterprise feature that helps to ensure high-availability in the event of a rack or zone failure. -When you enable rack-zone awareness in a Redis Enterprise Software (RS) cluster, you assign +When you enable rack-zone awareness in a Redis Enterprise Software cluster, you assign a rack-zone ID to each node. This ID is used to map the node to a -physical rack or logical zone. The cluster can then ensure that master shards, corresponding slave shards, and associated endpoints are placed on nodes in different racks/zones. +physical rack or logical zone. The cluster can then ensure that master shards, corresponding replica shards, and associated endpoints are placed on nodes in different racks/zones. -In the event of a rack or zone failure, the slaves and endpoints in the remaining racks/zones will be promoted. This ensures high availability when a rack or zone fails. +In the event of a rack or zone failure, the replicas and endpoints in the remaining racks/zones are promoted. This ensures high availability when a rack or zone fails. There is no limitation on the number of rack-zones per cluster; each node can belong to a different rack, or multiple nodes can belong to the @@ -51,9 +52,9 @@ Keep in mind that one of the nodes in your cluster can be a quorum-only node, as Once the cluster has been configured to support rack-zone awareness, you can create a rack-zone aware database. -Rack-zone awareness is relevant only for databases that have replication enabled (i.e., databases with slave shards). Once you +Rack-zone awareness is relevant only for databases that have replication enabled (i.e., databases with replica shards). Once you enable replication for a database, you may also enable rack-zone awareness. ## Shard placement without rack-zone awareness -Note that even in the case of a database with rack-zone awareness disabled, the cluster will still ensure that master and slave shards are placed on distinct nodes. +Note that even in the case of a database with rack-zone awareness disabled, the cluster will still ensure that master and replica shards are placed on distinct nodes. diff --git a/content/rs/concepts/high-availability/replication.md b/content/rs/concepts/high-availability/replication.md index 27fdb474c4d..923decab004 100644 --- a/content/rs/concepts/high-availability/replication.md +++ b/content/rs/concepts/high-availability/replication.md @@ -17,8 +17,8 @@ guarantees that data is served with minimal interruption. You can tune your high availability configuration with: - [Rack/Zone -Awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}) - When rack-zone awareness is used additional logic ensures that master and slave shards never share the same rack, thus ensuring availability even under loss of an entire rack. -- [High Availability for Replica Shards]({{< relref "/rs/administering/database-operations/slave-ha.md" >}}) - When high availability +Awareness]({{< relref "/rs/concepts/high-availability/rack-zone-awareness.md" >}}) - When rack-zone awareness is used additional logic ensures that master and replica shards never share the same rack, thus ensuring availability even under loss of an entire rack. +- [High Availability for Replica Shards]({{< relref "/rs/administering/database-operations/replica-ha.md" >}}) - When high availability for replica shards is used, the replica shard is automatically migrated on node failover to maintain high availability. {{< warning >}} diff --git a/content/rs/concepts/shard-placement-policy.md b/content/rs/concepts/shard-placement-policy.md index e3a6389a917..5f9192240bc 100644 --- a/content/rs/concepts/shard-placement-policy.md +++ b/content/rs/concepts/shard-placement-policy.md @@ -1,13 +1,14 @@ --- -Title: Shard Placement Policy +Title: Shard placement policy +linkTitle: Shard placement policy description: weight: $weight alwaysopen: false categories: ["RS"] aliases: /rs/concepts/rebalancing-shard-placement/ --- -In Redis Enterprise Software (RS), the location of master and slave shards on the cluster nodes can impact the database and node performance. -Master shards and their corresponding slave shards are always placed on separate nodes for data resiliency. +In Redis Enterprise Software, the location of master and replica shards on the cluster nodes can impact the database and node performance. +Master shards and their corresponding replica shards are always placed on separate nodes for data resiliency. The shard placement policy helps to maintain optimal performance and resiliency. {{< embed-md "shard-placement-intro.md" >}} @@ -19,32 +20,32 @@ The shard placement policy helps to maintain optimal performance and resiliency. In the dense policy, the cluster places the database shards on as few nodes as possible. When the node is not able to host all of the shards, some shards are moved to another node to maintain optimal node health. -For example, for a database with two master and two slave shards on a cluster with three nodes and a dense shard placement policy, -the two master shards are hosted on one node and the two slave shards are hosted on another node. +For example, for a database with two master and two replica shards on a cluster with three nodes and a dense shard placement policy, +the two master shards are hosted on one node and the two replica shards are hosted on another node. For Redis on RAM databases without the OSS cluster API enabled, use the dense policy to optimize performance. ![dense_placement](/images/rs/dense_placement.png) -*Figure: Three nodes with two master shards (red) and two slave shards (grey) with a dense placement policy* +*Figure: Three nodes with two master shards (red) and two replica shards (grey) with a dense placement policy* ### Sparse shard placement policy In the sparse policy, the cluster places shards on as many nodes as possible to distribute the shards of a database across all available nodes. When all nodes have database shards, the shards are distributed evenly across the nodes to maintain optimal node health. -For example, for a database with two master and two slave shards on a cluster with three nodes and a sparse shard placement policy: +For example, for a database with two master and two replica shards on a cluster with three nodes and a sparse shard placement policy: - Node 1 hosts one of the master shards -- Node 2 hosts the slave for the first master shard +- Node 2 hosts the replica for the first master shard - Node 3 hosts the second master shard -- Node 1 hosts for the slave shard for master shard 2 +- Node 1 hosts for the replica shard for master shard 2 For Redis on RAM databases with OSS cluster API enabled and for Redis on Flash databases, use the sparse policy to optimize performance. ![sparse_placement](/images/rs/sparse_placement.png) -*Figure: Three nodes with two master shards (red) and two slave shards (grey) with a sparse placement policy* +*Figure: Three nodes with two master shards (red) and two replica shards (grey) with a sparse placement policy* ## Related articles diff --git a/content/rs/concepts/terminology.md b/content/rs/concepts/terminology.md index 65834fabfc9..dd962c33dcb 100644 --- a/content/rs/concepts/terminology.md +++ b/content/rs/concepts/terminology.md @@ -1,15 +1,16 @@ --- title: Terminology in Redis Enterprise Software -description: +linkTitle: Terminology +description: Explains terms used in Redis Enterprise Software and its docs. weight: $weight alwaysopen: false categories: ["RS"] --- -Here are explanations of some of the terms used in Redis Enterprise Software (RS). +Here are explanations of some of the terms used in Redis Enterprise Software. ## Node -A node is a physical machine, virtual machine, container or cloud +A _node_ is a physical machine, virtual machine, container or cloud instance on which the RS installation package was installed and the setup process was run in order to make the machine part of the cluster. @@ -30,14 +31,13 @@ together with the other cluster nodes. As indicated above, each node serves as a container for hosting multiple database instances, referred to as "shards". -RS supports various database configurations: +Redis Enterprise Software supports various database configurations: - **Standard Redis database** - A single Redis shard with no replication or clustering. - **Highly available Redis database** - Every database master shard - has a replicated slave shard, so that if the master shard fails the - cluster can automatically failover to the slave shard with minimal - to no impact. Master and slave shards are always placed on separate + has a replica shard, so that if the master shard fails the + cluster can automatically fail over to the replica with minimal impact. Master and replica shards are always placed on separate nodes to ensure high availability. - **Clustered Redis database** - The data stored in the database is split across several shards. The number of shards can be defined by @@ -45,7 +45,7 @@ RS supports various database configurations: shards are placed within the cluster. During the lifetime of the cluster, these algorithms might migrate a shard between nodes. - **Clustered and highly available Redis database** - Each master shard - in the clustered database has a slave shard, enabling failover if + in the clustered database has a replica shard, enabling failover if the master shard fails. ## Proxy @@ -68,17 +68,17 @@ Each database is served by a database endpoint that is part of and managed by the proxies. The endpoint oversees forwarding Redis operations to specific database shards. -If the master shard fails and the slave shard is promoted to master, the +If the master shard fails and the replica shard is promoted to master, the master endpoint is updated to point to the new master shard. -If the master endpoint fails, the slave endpoint is promoted to be the +If the master endpoint fails, the replica endpoint is promoted to be the new master endpoint and is updated to point to the master shard. Similarly, if both the master shard and the master endpoint fail, then -both the slave shard and the slave endpoint are promoted to be the new +both the replica shard and the replica endpoint are promoted to be the new master shard and master endpoint. -As can be understood from the above, a shard and its endpoint do not +Shards and their endpoints do not have to reside within the same node in the cluster. In the case of a clustered database with multiple database shards, only diff --git a/content/rs/getting-started/getting-started-docker.md b/content/rs/getting-started/getting-started-docker.md index dd087f5a51a..b240bc35cd0 100644 --- a/content/rs/getting-started/getting-started-docker.md +++ b/content/rs/getting-started/getting-started-docker.md @@ -22,7 +22,7 @@ The [Redis Enterprise Software container](https://hub.docker.com/r/redislabs/red represents a node in an RS Cluster. When deploying RS using Docker, there are a couple of common topologies: -**Topology #1:** The simplest topology is to run a single-node RS Cluster with a single container in a single host machine. This is best for local development or functional testing. Obviously, single-node clusters come with limited functionality in a few ways. For instance, in a single-node topology, RS can't replicate to slave shards or provide any protection for failures. Simply follow the instruction in the Getting Started pages for Windows, macOS and Linux to build your development environment. +**Topology #1:** The simplest topology is to run a single-node RS Cluster with a single container in a single host machine. This is best for local development or functional testing. Obviously, single-node clusters come with limited functionality in a few ways. For instance, in a single-node topology, Redis Enterprise Software can't replicate to replica shards or provide any protection for failures. Simply follow the instruction in the Getting Started pages for Windows, macOS and Linux to build your development environment. ![0-2](/images/rs/RS-Docker-container.png) diff --git a/content/rs/installing-upgrading/configuring-aws-instances.md b/content/rs/installing-upgrading/configuring-aws-instances.md index 9a15a7c9b98..87ff9f3d581 100644 --- a/content/rs/installing-upgrading/configuring-aws-instances.md +++ b/content/rs/installing-upgrading/configuring-aws-instances.md @@ -42,7 +42,7 @@ this feature could be critical to use: Flash]({{< relref "/rs/concepts/memory-architecture/redis-flash.md" >}}) 1. When using AOF on every write and there is a high write load. In this case, the provisioned IOPS should be on the nodes used as - slaves in the cluster. + replicas in the cluster. ## Instance types {#instance-types} diff --git a/content/rs/references/memtier-benchmark.md b/content/rs/references/memtier-benchmark.md index 826cbab289b..c273be39128 100644 --- a/content/rs/references/memtier-benchmark.md +++ b/content/rs/references/memtier-benchmark.md @@ -7,70 +7,68 @@ alwaysopen: false categories: ["RS"] aliases: /rs/references/cli-reference/memtier-benchmark/ --- -Redis on Flash (RoF) on Redis Enterprise Software (RS) lets you use more cost-effective Flash memory as a RAM extension for your database. -But what does the performance look like as compared to an all-RAM RS database? +Redis on Flash (RoF) on Redis Enterprise Software lets you use cost-effective Flash memory as a RAM extension for your database. -The simple scenarios on this page show you how you can get performance results with the free RS trial version. -If you would like assistance with your evaluation or need to test a larger cluster, we'd be happy to help. +But what does the performance look like as compared to an memory-only database, one stored solely in RAM? -{{< note >}} -memtier_benchmark is included with Redis Enterprise Software in /opt/redislabs/bin/. -To benchmark another database provider, you can get [memtier_benchmark on GitHub](https://github.com/RedisLabs/memtier_benchmark). -{{< /note >}} +These scenarios use the `memtier_benchmark` utility to evaluate the performance of a Redis Enterprise Software deployment, including the trial version. -## Benchmark and performance test considerations +The `memtier_benchmark` utility is located in `/opt/redislabs/bin/` of Redis Enterprise Software deployments. To test performance for cloud provider deployments, see the [memtier-benchmark GitHub project](https://github.com/RedisLabs/memtier_benchmark). + +For additional, such as assistance with larger clusters, [contact support](https://redislabs.com/company/support/). -For our testing, let's configure a Redis Enterprise Software cluster with the trial version -and use memtier_benchmark to evaluate the performance of a Redis on Flash enabled database in these scenarios: -- Without replication: 4 master shards -- With replication: 2 master and 2 slave shards +## Benchmark and performance test considerations -While it concentrates on RoF, you can also use these steps to evaluate RS without RoF. +These tests assume you're using a trial version of Redis Enterprise Software and want to test the performance of Redis on Flash enabled database in the following scenarios: -The Redis Enterprise Software trial version lets you use up to 4 Redis shards with multiple combinations of databases, such as: +- Without replication: Four (4) master shards +- With replication: Two (2) primary and two replica shards -- 4 databases with 1 master shard each -- 2 highly available databases with replication, where each database has 1 master shard and 1 slave shard -- 1 non-replicated clustered database with 4 master shards -- 1 highly available and clustered database with 2 master shards and 2 slave shards +With the trial version of Redis Enterprise Software you can create a cluster of up to four shards using a combination of database configurations, including: -## Test environment and RS cluster setup +- Four databases, each with a single master shard +- Two highly available databases with replication enabled (each database has one master shard and one replica shard) +- One non-replicated clustered database with four master shards +- One highly available and clustered database with two master shards and two replica shards -For the test environment, you must: +## Test environment and cluster setup -1. Create a three-node RS cluster. +For the test environment, you need to: + +1. Create cluster with three nodes. 1. Prepare the flash memory. -1. Set up the load generation tool. +1. Configure the load generation tool. + +### Creating a three-node cluster {#creating-a-threenode-rs-cluster} -### Creating a three-node RS cluster {#creating-a-threenode-rs-cluster} +This performance test requires a three-node cluster. -For this performance test, you need at least a three-node RS cluster. You can run all of these tests on Amazon AWS with these hosts: -- 2 x i3.2xlarge (8 vCPU, 61 GiB RAM, up to 10GBit, 1.9TB NMVe SSD) - Used for serving RoF data -- 1 x m4.large - Used as a quorum node +- 2 x i3.2xlarge (8 vCPU, 61 GiB RAM, up to 10GBit, 1.9TB NMVe SSD) + + These nodes serve RoF data + +- 1 x m4.large, which acts as a quorum node For instructions on how to install RS and set up a cluster, go to either: - [Quick Setup]({{< relref "/rs/getting-started/_index.md" >}}) for a test installation - [Install and Upgrade]({{< relref "/rs/installing-upgrading/_index.md" >}}) for a production installation -For the tests we use a quorum node in the cluster to keep costs down on AWS EC2 instance usage, -but still keep the minimum 3 nodes in the cluster that RS needs in case a node fails. -The quorum node can be on a less powerful instance type (m4.large) as it does not have shards on it or take traffic. +These tests use a quorum node to reduce AWS EC2 instance use while maintaining the three nodes required to support a quorum node in case of node failure. Quorum nodes can be on less powerful instances because they do not have shards or support traffic. + +As of this writing, i3.2xlarge instances are required because they support NVMe SSDs, which are required to support RoF. Redis on Flash requires Flash-enabled storage, such as NVMe SSDs. -The main reason to use a i3.2xlarge instance is to use NVMe SSDs. -Those SSDs are what RoF combines with RAM to host the database on. -If you run these tests in another environment (such as on-premise), -you must use NVMe SSDs to see the performance benefits of RoF. +For best results, compare performance of a Flash-enabled deployment to the performance in a RAM-only environment, such as a strictly on-premises deployment. -## Preparing the flash memory +## Prepare the flash memory After you install RS on the nodes, the flash memory attached to the i3.2xlarge instances must be prepared and formatted with the `/opt/redislabs/sbin/prepare_flash.sh` script. -## Setting up the load generation tool +## Set up the load generation tool The memtier_benchmark load generator tool generates the load on the RoF databases. To use this tool, install RS on a dedicated instance that is not part of the RS cluster @@ -89,12 +87,12 @@ We recommend that you use a separate database for each test case with these requ | **Parameter** | **With replication** | **Without replication** | **Description** | | ------ | ------ | ------ | ------ | | Name | test-1 | test-2 | The name of the test database | -| Memory limit | 100 GB | 100 GB | The memory limit refers to RAM+Flash, aggregated across all the shards of the database, including master and slave shards. | +| Memory limit | 100 GB | 100 GB | The memory limit refers to RAM+Flash, aggregated across all the shards of the database, including master and replica shards. | | RAM limit | 0.3 | 0.3 | RoF always keeps the Redis keys and Redis dictionary in RAM and additional RAM is required for storing hot values. For the purpose of these tests 30% RAM was calculated as an optimal value. | -| Replication | Enabled | Disabled | A database with no replication has only master shards. A database with replication has master and slave shards. | +| Replication | Enabled | Disabled | A database with no replication has only master shards. A database with replication has master and replica shards. | | Data persistence | None | None | No data persistence is needed for these tests. | | Database clustering | Enabled | Enabled | A clustered database consists of multiple shards. | -| Number of (master) shards | 2 | 4 | Shards are distributed as follows:
- With replication: 1 master shard and 1 slave shard on each node
- Without replication: 2 master shards on each node | +| Number of (master) shards | 2 | 4 | Shards are distributed as follows:
- With replication: One master shard and one replica shard on each node
- Without replication: Two master shards on each node | | Other parameters | Default | Default | Keep the default values for the other configuration parameters. | ## Data population @@ -109,20 +107,20 @@ $ memtier_benchmark -s $DB_HOST -p $DB_PORT --hide-histogram --key-maximum=$N -n allkeys -d 500 --key-pattern=P:P --ratio=1:0 ``` -Set up a test database with these values: +Set up a test database: | **Parameter** | **Description** | | ------ | ------ | | Database host
(-s) | The fully qualified name of the endpoint or the IP shown in the RS database configuration | -| Database port
(-p) | The endpoint port shown in you RS database configuration | +| Database port
(-p) | The endpoint port shown in your database configuration | | Number of items
(–key-maximum) | With replication: 75 Million
Without replication: 150 Million | | Item size
(-d) | 500 Bytes | ## Centralize the keyspace -### With replication +### With replication {#centralize-with-repl} -To create about 20.5 million items in RAM for your highly available clustered database with 75 million items, run: +To create roughly 20.5 million items in RAM for your highly available clustered database with 75 million items, run: ```sh $ memtier_benchmark -s $DB_HOST -p $DB_PORT --hide-histogram @@ -130,9 +128,9 @@ $ memtier_benchmark -s $DB_HOST -p $DB_PORT --hide-histogram --key-pattern=P:P --ratio=0:1 ``` -You can see the **Values in RAM** metric on the **metrics** page of your database in the RS admin console to validate the test. +To verify the database values, use **Values in RAM** metric, which is available from the **Metrics** tab of your database in the admin console. -### Without replication +### Without replication {#centralize-wo-repl} To create 41 million items in RAM without replication enabled and 150 million items, run: @@ -146,7 +144,7 @@ $ memtier_benchmark -s $DB_HOST -p $DB_PORT --hide-histogram ### Generate load -#### With replication +#### With replication {#generate-with-repl} We recommend that you do a dry run and double check the RAM Hit Ratio on the **metrics** screen in the RS admin console before you write down the test results. @@ -159,7 +157,7 @@ $ memtier_benchmark -s $DB_HOST -p $DB_PORT --pipeline=11 -c 20 -t 1 --run-count=1 --out-file=test.out ``` -#### Without replication +#### Without replication {#generate-wo-repl} Here is the command for 150 million items: @@ -183,15 +181,17 @@ Where: ### Monitor the test results -You can either monitor the results in the **metrics** tab of the RS admin console or with the memtier_benchmark output. -The memtier_benchmark results include the network latency between the load generator instance and the cluster instances. -The metrics shown in the RS admin console do not include network latency. +You can either monitor the results in the **metrics** tab of the admin console or with the `memtier_benchmark` output. However, be aware that: + +- The memtier_benchmark results include the network latency between the load generator instance and the cluster instances. + +- The metrics shown in the admin console do _not_ include network latency. ### Expected results You should expect to see an average throughput of: -- Around 160,000 ops/sec when testing without replication (i.e. 4 master shards) -- Around 115,000 ops/sec when testing with enabled replication (i.e. 2 master and 2 slave shards) +- Around 160,000 ops/sec when testing without replication (i.e. Four master shards) +- Around 115,000 ops/sec when testing with enabled replication (i.e. Four master and 2 replica shards) -In both cases the average latency should be sub-millisecond. +In both cases, the average latency should below one millisecond. diff --git a/content/rs/release-notes/legacy-release-notes/rs-5-4-december-2018.md b/content/rs/release-notes/legacy-release-notes/rs-5-4-december-2018.md index 2b2fb94c812..9600ae248ea 100644 --- a/content/rs/release-notes/legacy-release-notes/rs-5-4-december-2018.md +++ b/content/rs/release-notes/legacy-release-notes/rs-5-4-december-2018.md @@ -33,9 +33,9 @@ In RS 5.4 you can [create Active-Active databases (CRDBs)]({{< relref "/rs/admin 1. Clustering mode - Creates a CRDB that consists of any number of shards in a clustering mode and is subject to [multi-key commands limitations]({{< relref "/rs/concepts/high-availability/clustering.md" >}}). 1. Non-clustering mode - Creates a CRDB that consists of one shard only in a non-clustering mode so that [multi-key command limitations]({{< relref "/rs/concepts/high-availability/clustering.md" >}}) do not apply. -### High availability for replica (slave) shards +### High availability for replica shards -When [slave high availability]({{< relref "/rs/administering/database-operations/slave-ha.md" >}}) is enabled and a master shard fails, a replica shard is automatically promoted to a master shard to maintain data availability. This creates a single point of failure until a new replica shard is manually created. +When [replica high availability]({{< relref "/rs/administering/database-operations/replica-ha.md" >}}) is enabled and a master shard fails, a replica (formerly _slave_) shard is automatically promoted to a master shard to maintain data availability. This creates a single point of failure until a new replica shard is manually created. RS 5.4 expands the high availability capabilities by adding the ability to automatically avoid this single point of failure by configuring the cluster to automatically migrate the replica shard to another available node. In practice, replica migration creates a new replica shard and replicates the data from the master shard to the new replica shard. diff --git a/content/rs/release-notes/rs-5-6-0-april-2020.md b/content/rs/release-notes/rs-5-6-0-april-2020.md index 2d49072a74c..2ee8777b25e 100644 --- a/content/rs/release-notes/rs-5-6-0-april-2020.md +++ b/content/rs/release-notes/rs-5-6-0-april-2020.md @@ -12,7 +12,7 @@ categories: ["RS"] - Support for the HyperLogLog data type in Active-Active databases - RedisJSON support in Redis on Flash databases - Support for Redis OSS Cluster API for Active-Active and Replica Of databases -- Slave HA enabled by default for Active-Active databases +- Replica HA enabled by default for Active-Active databases - Cloud backup locations support - Support for Red Hat Enterprise Linux version 7.7, 7.8 - Additional enhancements, and minor bug fixes @@ -77,12 +77,12 @@ You can configure OSS Cluster API for databases using the admin console. For Active-Active databases, you can create the database with OSS Cluster API enabled for all of its instances. When you enable OSS Cluster after the Active-Active database is created, the change applies only to the local instance. -### Slave HA defaults for Active-Active +### Replica HA defaults for Active-Active To enhance the availability and the consistency of [Active-Active Geo-Distributed Redis]({{< relref "/rs/administering/designing-production/active-active.md" >}}), -[Slave HA]({{< relref "/rs/administering/database-operations/slave-ha.md" >}}) is enabled by default for all existing and new Active-Active Redis Databases. +[Replica HA]({{< relref "/rs/administering/database-operations/replica-ha.md" >}}) is enabled by default for all existing and new Active-Active Redis Databases. -To disable Slave HA for for a local instance of an Active-Active database, run this command on the instance: `rladmin tune db slave_ha disabled` +To disable Replica HA for for a local instance of an Active-Active database, run this command on the instance: `rladmin tune db slave_ha disabled` ### Cloud backup locations support @@ -131,7 +131,7 @@ With build 5.6.0-39: ## Known limitations ### Active-Active databases -- RS51359 - Active-Active databases, using replication and Append Only File (AOF) for [Database Persistence]({{< relref "rs/concepts/data-access/persistence.md" >}}) are suffering from memory leak on slave the shards causing them to grow bigger than the master shards. Customers are advised to upgrade to RS 6.0.12 ***TBD***. Meanwhile you can use snapshot for Database Persistence or restart the slave shards ***TBD***. +- RS51359 - Active-Active databases, using replication and Append Only File (AOF) for [Database Persistence]({{< relref "rs/concepts/data-access/persistence.md" >}}) are suffering from memory leak on replicas. The shards causing them to grow bigger than the master shards. Customers are advised to upgrade to RS 6.0.12. Meanwhile, you can use snapshot for Database Persistence or restart the replica shards. ### Upgrade notes @@ -140,7 +140,7 @@ With build 5.6.0-39: To use the new capabilities on nodes that are upgraded from version RS 5.4.2 or lower, you must [upgrade the Active-Active Redis Database protocol]({{< relref "/rs/installing-upgrading/upgrading#upgrading-crdbs" >}}). - When you upgrade an Active-Active Redis with active AOF from version [RS 5.4.2]({{< relref "rs/release-notes/legacy-release-notes/rs-5-4-2-april-2019.md" >}}) or lower to version [RS 5.4.4]({{< relref "rs/release-notes/legacy-release-notes/rs-5-4-4-june-2019.md" >}}) or higher: - - If replication is enabled, you must run the BGREWRITEAOF command on all slave shards after the upgrade. + - If replication is enabled, you must run the BGREWRITEAOF command on all replica shards after the upgrade. - If replication is not enabled, you must run the BGREWRITEAOF command on all shards after the upgrade. - Node upgrade fails if the SSL certificates were configured in version 5.0.2 or above by manually updating the certificates on the disk instead of [updating them through the API]({{< relref "/rs/administering/cluster-operations/updating-certificates.md" >}}). For assistance with this issue, contact Support. diff --git a/content/rs/release-notes/rs-6-0-20-april-2021.md b/content/rs/release-notes/rs-6-0-20-april-2021.md index 1baffcbfede..69b6cbba5be 100644 --- a/content/rs/release-notes/rs-6-0-20-april-2021.md +++ b/content/rs/release-notes/rs-6-0-20-april-2021.md @@ -215,7 +215,7 @@ All known bugs around setting ciphers were fixed. To learn more, see [Updating or later: - If replication is enabled, you must run the BGREWRITEAOF command on all - slave shards after the upgrade. + replica shards after the upgrade. - If replication is not enabled, you must run the BGREWRITEAOF command on all shards after the upgrade. diff --git a/static/images/rs/sharding.png b/static/images/rs/sharding.png old mode 100644 new mode 100755 index e2b9fb92be5480f9b685248477a3bbe28e8aaedd..83aaba0ce799b6ce6b07047320a419270da461bd GIT binary patch literal 52834 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 literal 65652 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 E2hR{;lK=n! From 1d69dca2a17f12e35bf0fea03fd721ea34ee1c53 Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Thu, 23 Sep 2021 09:03:23 -0700 Subject: [PATCH 2/4] First review pass --- content/rs/administering/database-operations/replica-ha.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/rs/administering/database-operations/replica-ha.md b/content/rs/administering/database-operations/replica-ha.md index 6114dbbdb92..b1f451b8768 100644 --- a/content/rs/administering/database-operations/replica-ha.md +++ b/content/rs/administering/database-operations/replica-ha.md @@ -1,5 +1,6 @@ --- -Title: High Availability for Slave Shards +Title: High Availability for replica shards +linkTitle: High availability for replicas description: weight: $weight alwaysopen: false @@ -40,7 +41,7 @@ For example: - Replica HA migrates as many shards as possible based on available DRAM in the target node. When no DRAM is available, replica HA stops migrating replica shards to that node. {{< /note >}} -## Configuring high availability for slave shards +## Configuring high availability for replica shards Using `rladmin` or the REST API, replica HA is controlled on the database level and on the cluster level. You can enable or disable replica HA for a database or for the entire cluster. From b73fc436e6a690c5e2dd9fff15d1faf8129776d4 Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Thu, 23 Sep 2021 09:05:45 -0700 Subject: [PATCH 3/4] More updates --- content/rs/administering/database-operations/replica-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rs/administering/database-operations/replica-ha.md b/content/rs/administering/database-operations/replica-ha.md index b1f451b8768..690281402ef 100644 --- a/content/rs/administering/database-operations/replica-ha.md +++ b/content/rs/administering/database-operations/replica-ha.md @@ -1,5 +1,5 @@ --- -Title: High Availability for replica shards +Title: High availability for replica shards linkTitle: High availability for replicas description: weight: $weight From d71c53c3c977c2b0e5e72b68106d5d74b190b839 Mon Sep 17 00:00:00 2001 From: Rachel Elledge Date: Thu, 23 Sep 2021 13:23:01 -0500 Subject: [PATCH 4/4] Bugfix for broken mini-toc links --- layouts/partials/mini-toc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/partials/mini-toc.html b/layouts/partials/mini-toc.html index 988e5602047..ca6f08993ba 100644 --- a/layouts/partials/mini-toc.html +++ b/layouts/partials/mini-toc.html @@ -14,8 +14,8 @@

Contents

{{ $headerLevel := index (findRE "[1-3]" . 1) 0 }} {{ $headerLevel := len (seq $headerLevel) }} - {{ $anchorIDraw := ($header | plainify | htmlEscape | replaceRE "[/-]" "") }} - {{ $anchorID := ($anchorIDraw | anchorize)}} + {{ $genAnchor := index (split (index (split $header "id=\"") 1) "\"") 0 }} + {{ $anchorID := $genAnchor }} {{ if ne $i 0 }} {{ $prevHeaderLevel := index (findRE "[1-3]" (index $headers (sub $i 1)) 1) 0 }}