From 2c5feb2e408a08616b7fd9d8e532a0bdf7330bec Mon Sep 17 00:00:00 2001 From: Alon Magrafta <50071256+AlonMagrafta@users.noreply.github.com> Date: Tue, 17 Aug 2021 16:20:47 +0300 Subject: [PATCH 01/16] [Urgent] 6.0.20 known limitation - 2 critical bugs (#1492) * [Urgent] 6.0.20 known limitation - 2 critical bugs * Update rs-6-0-20-april-2021.md --- content/rs/release-notes/rs-6-0-20-april-2021.md | 2 ++ 1 file changed, 2 insertions(+) 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 27d33327e9e..650d92495d2 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 @@ -195,6 +195,8 @@ All known bugs around setting ciphers were fixed. To learn more, see [Updating ## Known limitations +- RS59983 - Clients may get disconnected by the proxy when one client sends an UNSUBSCRIBE command without being subscribed to any channel and disconnect before the response returns back from the server (from the proxy). +- RS60068 - The pdns might not resolve the master node after master node change. Restarting the pdns service is required in this case. - RS55504 - Bug RS6.0.20-66 (Build #66) causes RediSearch cursor to break. Please upgrade to a higher build when running with RediSearch. #### Upgrade From 3db42387ea6865364b7760614934ae64c1c5107c Mon Sep 17 00:00:00 2001 From: AnnaRedis <24556041+AnnaRedis@users.noreply.github.com> Date: Tue, 17 Aug 2021 15:41:52 -0700 Subject: [PATCH 02/16] Update product-lifecycle.md (#1495) --- content/rs/administering/product-lifecycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rs/administering/product-lifecycle.md b/content/rs/administering/product-lifecycle.md index 8968502a56b..1d99737e1b4 100644 --- a/content/rs/administering/product-lifecycle.md +++ b/content/rs/administering/product-lifecycle.md @@ -41,5 +41,5 @@ that version. | 5.2 – June 2018 | December 31, 2019 | {{< note >}} - * On June 15th, 2021, release 6.0 EOL was extended by 6 months; from November 31, 2021 to May 31, 2022. + * On June 15th, 2021, release 6.0 EOL was extended by 6 months; from November 30, 2021 to May 31, 2022. {{< /note >}} From c0727541b2b2de1c4e7643b42c6e4fc9f94156ce Mon Sep 17 00:00:00 2001 From: Kaitlyn Michael <76962844+kaitlynmichael@users.noreply.github.com> Date: Wed, 18 Aug 2021 11:52:09 -0500 Subject: [PATCH 03/16] Doc-734 k8s ingress (#1476) --- .../tasks/set-up-ingress-controller.md | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 content/platforms/kubernetes/tasks/set-up-ingress-controller.md diff --git a/content/platforms/kubernetes/tasks/set-up-ingress-controller.md b/content/platforms/kubernetes/tasks/set-up-ingress-controller.md new file mode 100644 index 00000000000..d059ff26242 --- /dev/null +++ b/content/platforms/kubernetes/tasks/set-up-ingress-controller.md @@ -0,0 +1,137 @@ +--- +Title: Establish external routing with an ingress controller +linkTitle: Configure ingress +description: Configure an ingress controller to access your Redis Enterprise databases from outside the Kubernetes cluster. +weight: 25 +alwaysopen: false +categories: [""] +aliases: +--- + +Every time a Redis Enterprise Database (REDB) is created in a Kubernetes (K8s) environment, a [service](https://kubernetes.io/docs/concepts/services-networking/service/) is created that allows requests to be routed to that database. Redis Enterprise supports three [types of services](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) for accessing databases: `ClusterIP`, `headless`, or `LoadBalancer`. + +By default, REDB creates a `ClusterIP` type service, which exposes a cluster-internal IP and can only be accessed from within the K8s cluster. For requests to be routed to the REDB from outside the K8s cluster, you need an [ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) controller. + +Redis Enterprise Software on Kubernetes supports two ingress controllers, [HAProxy](https://haproxy-ingress.github.io/) and [NGINX](https://kubernetes.github.io/ingress-nginx/). + +## Prerequisites + +### Redis Enterprise database (REDB) + +Create a Redis Enterprise database with "TLS for all communication" enabled and "client authentication" disabled. + +The YAML to create this REDB must include `tlsMode: enabled` as shown in this example: + + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseDatabase + metadata: + name: + spec: + tlsMode: enabled + +##### If you choose to use a previously created database: + +If you are using an existing REDB that was created with a YAML file, you cannot make edits to that database in the Redis Enterprise UI. All changes need to be made in the YAML file. + +If you are using an existing database that is managed from the UI, see [Enable TLS for client connections]({{< relref "content/rs/security/tls-ssl.md" >}}) for more information on these security settings. + +### Ingress controller + +Install one of the supported ingress controllers: + +- [NGINX Ingress Controller Installation Guide](https://kubernetes.github.io/ingress-nginx/deploy/) +- [HAProxy Ingress Getting Started](https://haproxy-ingress.github.io/docs/getting-started/) + +{{< warning >}}You'll need to make sure `ssl-passthrough` is enabled. It's enabled by default for HAProxy, but disabled by default for NGINX. See the [NGINX User Guide](https://kubernetes.github.io/ingress-nginx/user-guide/tls/#ssl-passthrough) for details. {{< /warning >}} + +## Create ingress resource + +1. Retrieve the hostname of your ingress controller's `LoadBalancer` service with `kubectl get svc -ingress -n ingress-controller`. + + $ kubectl get svc -n + + Below is example output for an HAProxy ingress controller running on a K8s cluster hosted by AWS. + + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + haproxy-ingress LoadBalancer 10.43.62.53 a56e24df8c6173b79a63d5da54fd9cff-676486416.us-east-1.elb.amazonaws.com 80:30610/TCP,443:31597/TCP 21m + +1. Choose the hostname you will use to access your database (this value will be represented in this article with ``). + +1. Create a DNS entry that resolves your chosen database hostname to the IP address for the ingress controller's LoadBalancer. + +1. Create the ingress resource YAML file. + + apiVersion: networking.k8s.io/v1beta1 + kind: Ingress + metadata: + name: rec-ingress + annotations: + + spec: + rules: + - host: + http: + paths: + - path: / + backend: + serviceName: + servicePort: 443 + + + For HAProxy, insert the following into the `annotations` section: + + haproxy.ingress.kubernetes.io/ssl-passthrough: "true" + kubernetes.io/ingress.class: haproxy + + For NGINX, insert the following into the `annotations` section: + + nginx.ingress.kubernetes.io/ssl-passthrough: "true" + + The `ssl-passthrough` annotation is required to allow access to the database. The specific format changes depending on which ingress controller you have. See [NGINX Configuration annotations](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/) and [HAProxy Ingress Options](https://www.haproxy.com/documentation/kubernetes/latest/configuration/ingress/) for updated annotation formats. + +## Test your external access + +To test your external access to the database, you need a client that supports [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) and [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication). + +#### Test your access with Openssl + +1. Get the default CA certificate from the `redis-enterprise-node` container on any of the Redis Enterprise pods. + + kubectl exec -it -c redis-enterprise-node -- cat /etc/opt/redislabs/proxy_cert.pem + +1. Run the following `openssl` command, substituting your own values for ``. + + openssl s_client \ + -connect :443 \ + -crlf -CAfile ./proxy_cert.pem \ + -servername + + If you are connected to the database, you will receive `PONG` back, as shown below: + + ... + Verify return code: 0 (ok) + --- + + PING + +PONG + +#### Test your access with Python + +You can use the code below to test your access with Python, substituting your own values for `` and ``. + + import redis + + r = redis.StrictRedis(host='', + port=443, db=0, ssl=True, + ssl_ca_certs='//proxy_cert.pem') + + + print(r.info()) + +Your output should look something like this: + + /Users/example-user/Documents/Projects/test_client/venv3.7/bin/python /Users/example-user/Documents/Projects/test_client/test_ssl.py + {'redis_version': '5.0.5', 'redis_git_sha1': 0, 'redis_git_dirty': 0, 'redis_build_id': 0, 'redis_mode': 'standalone', 'os': 'Linux 4.14.154-128.181.amzn2.x86_64 x86_64', 'arch_bits': 64, 'multiplexing_api': 'epoll', 'gcc_version': '7.4.0', 'process_id': 1, 'run_id': '3ce7721b096517057d28791aab555ed8ac02e1de', 'tcp_port': 10811, 'uptime_in_seconds': 316467, 'uptime_in_days': 3, 'hz': 10, 'lru_clock': 0, 'config_file': '', 'connected_clients': 1, 'client_longest_output_list': 0, 'client_biggest_input_buf': 0, 'blocked_clients': 0, 'used_memory': 12680016, 'used_memory_human': '12.9M', 'used_memory_rss': 12680016, 'used_memory_peak': 13452496, 'used_memory_peak_human': '12.82M', 'used_memory_lua': 151552, 'mem_fragmentation_ratio': 1, 'mem_allocator': 'jemalloc-5.1.0', 'loading': 0, 'rdb_changes_since_last_save': 0, 'rdb_bgsave_in_progress': 0, 'rdb_last_save_time': 1577753916, 'rdb_last_bgsave_status': 'ok', 'rdb_last_bgsave_time_sec': 0, 'rdb_current_bgsave_time_sec': -1, 'aof_enabled': 0, 'aof_rewrite_in_progress': 0, 'aof_rewrite_scheduled': 0, 'aof_last_rewrite_time_sec': -1, 'aof_current_rewrite_time_sec': -1, 'aof_last_bgrewrite_status': 'ok', 'aof_last_write_status': 'ok', 'total_connections_received': 4, 'total_commands_processed': 6, 'instantaneous_ops_per_sec': 14, 'total_net_input_bytes': 0, 'total_net_output_bytes': 0, 'instantaneous_input_kbps': 0.0, 'instantaneous_output_kbps': 0.0, 'rejected_connections': 0, 'sync_full': 1, 'sync_partial_ok': 0, 'sync_partial_err': 0, 'expired_keys': 0, 'evicted_keys': 0, 'keyspace_hits': 0, 'keyspace_misses': 0, 'pubsub_channels': 0, 'pubsub_patterns': 0, 'latest_fork_usec': 0, 'migrate_cached_sockets': 0, 'role': 'master', 'connected_slaves': 1, 'slave0': {'ip': '0.0.0.0', 'port': 0, 'state': 'online', 'offset': 0, 'lag': 0}, 'master_repl_offset': 0, 'repl_backlog_active': 0, 'repl_backlog_size': 1048576, 'repl_backlog_first_byte_offset': 0, 'repl_backlog_histlen': 0, 'used_cpu_sys': 0.0, 'used_cpu_user': 0.0, 'used_cpu_sys_children': 0.0, 'used_cpu_user_children': 0.0, 'cluster_enabled': 0} + + Process finished with exit code 0 From 68b6bbed9964602875f27b67d18d3095f6a49c8c Mon Sep 17 00:00:00 2001 From: Kaitlyn Michael <76962844+kaitlynmichael@users.noreply.github.com> Date: Wed, 18 Aug 2021 13:55:06 -0500 Subject: [PATCH 04/16] review feedback for step 1 (#1497) --- .../platforms/kubernetes/tasks/set-up-ingress-controller.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/content/platforms/kubernetes/tasks/set-up-ingress-controller.md b/content/platforms/kubernetes/tasks/set-up-ingress-controller.md index d059ff26242..749a44018a4 100644 --- a/content/platforms/kubernetes/tasks/set-up-ingress-controller.md +++ b/content/platforms/kubernetes/tasks/set-up-ingress-controller.md @@ -46,13 +46,12 @@ Install one of the supported ingress controllers: ## Create ingress resource -1. Retrieve the hostname of your ingress controller's `LoadBalancer` service with `kubectl get svc -ingress -n ingress-controller`. +1. Retrieve the hostname of your ingress controller's `LoadBalancer` service. - $ kubectl get svc -n + $ kubectl get svc -n Below is example output for an HAProxy ingress controller running on a K8s cluster hosted by AWS. - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE haproxy-ingress LoadBalancer 10.43.62.53 a56e24df8c6173b79a63d5da54fd9cff-676486416.us-east-1.elb.amazonaws.com 80:30610/TCP,443:31597/TCP 21m @@ -78,7 +77,6 @@ Install one of the supported ingress controllers: serviceName: servicePort: 443 - For HAProxy, insert the following into the `annotations` section: haproxy.ingress.kubernetes.io/ssl-passthrough: "true" From cf5b6ed3807cbfb9168c81a1431602a940501a61 Mon Sep 17 00:00:00 2001 From: Alon Magrafta <50071256+AlonMagrafta@users.noreply.github.com> Date: Thu, 19 Aug 2021 18:16:30 +0300 Subject: [PATCH 05/16] CRDB - add known limitation red-61114 (#1498) * CRDB - add known limitation red-61114 * Update content/rs/release-notes/rs-6-0-20-april-2021.md Co-authored-by: Rachel Elledge <86307637+rrelledge@users.noreply.github.com> Co-authored-by: Rachel Elledge <86307637+rrelledge@users.noreply.github.com> --- content/rs/release-notes/rs-6-0-20-april-2021.md | 1 + 1 file changed, 1 insertion(+) 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 650d92495d2..7c089c91df5 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 @@ -197,6 +197,7 @@ All known bugs around setting ciphers were fixed. To learn more, see [Updating - RS59983 - Clients may get disconnected by the proxy when one client sends an UNSUBSCRIBE command without being subscribed to any channel and disconnect before the response returns back from the server (from the proxy). - RS60068 - The pdns might not resolve the master node after master node change. Restarting the pdns service is required in this case. +- RS61114 - Active-Active synchronization will fail in the following scenario: a new syncer connection is established AND a partial sync (psync) was initiated AND a cron job runs before the first ACK of the psync was received. - RS55504 - Bug RS6.0.20-66 (Build #66) causes RediSearch cursor to break. Please upgrade to a higher build when running with RediSearch. #### Upgrade From fcf21fc4c4fb326db1ac19fefc3da08419da9957 Mon Sep 17 00:00:00 2001 From: Suze Shardlow Date: Fri, 20 Aug 2021 15:43:24 +0100 Subject: [PATCH 06/16] Fixes some grammar. (#1499) --- content/modules/add-module-to-database.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/modules/add-module-to-database.md b/content/modules/add-module-to-database.md index a11694420ad..2dee5dac096 100644 --- a/content/modules/add-module-to-database.md +++ b/content/modules/add-module-to-database.md @@ -19,7 +19,7 @@ You can add modules to the database when you create the database. {{< note >}} - Before you add a module to a database, we recommend that you [upgrade the module]({{< relref "/modules/add-module-to-cluster.md" >}}) to the latest version. -- Modules can be add to database only when creating a new database. +- Modules can be added to a database only when creating a new database. You can't add a module to an existing database. - After you add a module to the database, certain database fields for the database are disabled according to the supported capabilities of the module. From dff9b7535baed8ccd8dff49de9dd0753d32d8482 Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Tue, 24 Aug 2021 08:32:51 -0700 Subject: [PATCH 07/16] Initial draft (#1500) --- content/rc/databases/configuration/high-availability.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/rc/databases/configuration/high-availability.md b/content/rc/databases/configuration/high-availability.md index 2bafb99a7fd..dd0873352e8 100644 --- a/content/rc/databases/configuration/high-availability.md +++ b/content/rc/databases/configuration/high-availability.md @@ -23,9 +23,9 @@ Redis Enterprise Cloud supports three levels of replication: - _No replication_ means that you will have a single copy of your database. -- _Single-zone replication_ means that your database will have a primary and a replica located in the same cloud region. If anything happens to the primary, the replica takes over and becomes the new primary. +- _Single-zone replication_ means that your database will have a primary and a replica located in the same cloud zone. If anything happens to the primary, the replica takes over and becomes the new primary. -- _Multi-zone replication_ means that the primary and its replicas are stored in different regions. This means that your database can remain online even if an entire region becomes unavailable. +- _Multi-zone replication_ means that the primary and its replicas are stored in different zones. This means that your database can remain online even if an entire zone becomes unavailable. Your replication options depend on your [subscription plan]({{}}): From 478d0ca5167a03ffa506fdfd78d8bdfc655e9de9 Mon Sep 17 00:00:00 2001 From: adisht <36517802+adisht@users.noreply.github.com> Date: Thu, 26 Aug 2021 15:58:26 +0300 Subject: [PATCH 08/16] 6.2 compatibility (#1502) Add RESET & FAILOVER to the list of OSS Redis unsupported commands (starting with Redis 6.2 and Redis Enterprise 6.2.4) --- content/rs/concepts/compatibility.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/rs/concepts/compatibility.md b/content/rs/concepts/compatibility.md index 95f607b8888..605b305c5a3 100644 --- a/content/rs/concepts/compatibility.md +++ b/content/rs/concepts/compatibility.md @@ -57,6 +57,8 @@ There is some Redis functionality (shown below) that's not applicable for Redis - LATENCY RESET - LATENCY GRAPH - LATENCY DOCTOR + - RESET + - FAILOVER - STRALGO LCS is not yet supported - Only a subset of Redis configuration settings (listed below) are applicable to Redis Software. Using CONFIG GET/SET with other configuration settings will return an error. The commands that apply to Redis Software are listed below: - hash-max-ziplist-entries From 4a5bb049193180c08d010522280f24d9a1098710 Mon Sep 17 00:00:00 2001 From: Rachel Elledge <86307637+rrelledge@users.noreply.github.com> Date: Thu, 26 Aug 2021 09:48:11 -0500 Subject: [PATCH 09/16] Breadcrumbs now use LinkTitle (#1501) * Breadcrumbs now use LinkTitle instead of Title --- layouts/partials/flex/body-beforecontent.html | 2 +- layouts/partials/original/body-beforecontent.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/partials/flex/body-beforecontent.html b/layouts/partials/flex/body-beforecontent.html index 2106f59cf6e..875a9749661 100644 --- a/layouts/partials/flex/body-beforecontent.html +++ b/layouts/partials/flex/body-beforecontent.html @@ -84,7 +84,7 @@
diff --git a/layouts/partials/original/body-beforecontent.html b/layouts/partials/original/body-beforecontent.html index 532f88bc3e7..e379f9429f9 100755 --- a/layouts/partials/original/body-beforecontent.html +++ b/layouts/partials/original/body-beforecontent.html @@ -128,7 +128,7 @@

{{.Title}}

{{define "breadcrumb"}} {{ if .page.Parent}} -{{$value := (printf "%s > %s" .page.Parent.RelPermalink .page.Parent.Title .value)}} +{{$value := (printf "%s > %s" .page.Parent.RelPermalink .page.Parent.LinkTitle .value)}} {{ template "breadcrumb" dict "page" .page.Parent "value" $value }} {{else}} {{.value|safeHTML}} From f46bc4c4a2de2c4678344f8ff9ca8e496dc5ab00 Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Sun, 29 Aug 2021 22:48:22 -0700 Subject: [PATCH 10/16] Initial draft --- content/rs/release-notes/_index.md | 5 +- .../release-notes/rs-6-2-4-september-2021.md | 158 ++++++++++++++++++ static/images/rs/internode-encryption.png | Bin 0 -> 39148 bytes 3 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 content/rs/release-notes/rs-6-2-4-september-2021.md create mode 100644 static/images/rs/internode-encryption.png diff --git a/content/rs/release-notes/_index.md b/content/rs/release-notes/_index.md index ff9f7098355..1b2f3eebbe3 100644 --- a/content/rs/release-notes/_index.md +++ b/content/rs/release-notes/_index.md @@ -1,8 +1,11 @@ --- -Title: Release Notes +Title: Release notes description: weight: 90 alwaysopen: false categories: ["RS"] --- + +Here's what changed recently in Redis Enteprise Software: + {{< allchildren style="h2" sort="Weight" >}} diff --git a/content/rs/release-notes/rs-6-2-4-september-2021.md b/content/rs/release-notes/rs-6-2-4-september-2021.md new file mode 100644 index 00000000000..65e6779dbbc --- /dev/null +++ b/content/rs/release-notes/rs-6-2-4-september-2021.md @@ -0,0 +1,158 @@ +--- +Title: Redis Enterprise Software Release Notes 6.2.4 (September 2021) +linkTitle: 6.2.4 (September 2021) +description: +weight: 76 +alwaysopen: false +categories: ["RS"] +aliases: /rs/release-notes/rs-6-2-4-september-2021/ + /rs/release-notes/rs-6-2-4-september-2021.md +--- + +[Redis Enterprise Software version 6.2.4](https://redislabs.com/redis-enterprise-software/download-center/software/) is now available! + +This version offers: + +- Encryption of all communications within cluster nodes, +- New functionality +- Security enhancements +- Bug fixes +- Compatibility with the latest version of open source Redis 6.2. + +## Version changes + +### Prerequisites and notes + +You can [upgrade to v6.2.4]({{}}) from Redis Enterprise Software v6.0 and later. + +Keep the following in mind: + +- Upgrades from versions earlier than v6.0 are not supported + +- The new internode encryption feature requires port 3342 to be open on all machines in the cluster. + +- [In v6.0.20]({{}}), Redis Enterprise Software replaced Nginx with envoy to improve internal security and communication. As of v6.2.4, Nginx is no longer provided with Redis Enterprise Software. + +### Database upgrade defaults + +The default behavior of the `upgrade db` command has changed. It is now controlled by a new cluster policy (`redis_upgrade_policy`), which defines the policy for creating new databases and upgrading existing databases. The policy supports the following values: + +- When set to `major`, the policy allows databases to be created or updated to versions of Redis compatible with open source Redis major releases. This allows for longer upgrade cycles by supporting Redis versions across multiple Redis Enterprise Software releases. + + This is the default value for Redis Enterprise Software. + +- When set to `latest`, the policy creates new databases and upgrades existing ones to be compatible with latest (most recent) version of open source Redis, which was the default behavior of earlier versions of Redis Enterprise Software. It is not longer the default behavior. + + Setting the upgrade policy to `latest` ensures that the most recent Redis features are available to new databases and ones that are upgraded. It also requires more frequent upgrades, as open source Redis is updated more frequently than Redis Enterprise Software. + +The Redis Enterprise Software 6.2.4 package includes compatibility with the most recent major Redis release (v6.0) and the latest (most recent) update to Redis (v6.2). + +By default, compatibility with v6.0 will be installed. To change this, use `rladmin` to set the upgrade policy and the default Redis version: + +``` shell +tune cluster redis_upgrade_policy latest +tune cluster default_redis_version 6.2 +``` + +To learn more, see the [upgrade instructions]({{}}). + +### Product lifecycle updates + +Redis Enterprise Software v5.6.0 will reach end of life (EOF) on October 31, 2021. + +To learn more, see the Redis Enterprise Software [product lifecycle]({{}}), which details the release number and the end-of-life schedule for Redis Enterprise Software. + +Redis Enterprise modules have individual release numbers [and lifecycle]({{}}). + +### Deprecation notices + +- [In v6.0.20]({{}}), the SASL-based LDAP mechanism was deprecated in favor of a new [RBAC-based approach]({{}}). As of v.6.2.4, support for the older mechanism has been removed. + + For help migrating to the LDAP-based mechanism, see [Migrate to role-based LDAP]({{}}). + +## Features and enhancements + +### Internode encryption + +Internode encryption (INE) encrypts all communication between nodes in a cluster; it is available for the control plan (the admin console) and the data plane (Redis clients, the OSS Cluster API, and the REST API): + +{{This diagram shows how internode encryption secures communication on the control plane and the dataplane.}}{{< /image >}} + +#### Control plane internode encryption + +Control plane internode encryption encrypts all management communication with a cluster. it is enabled by default for all new clusters and upgraded clusters. + +#### Data plane internode encryption + +Data plane internode encryption encrypts communication between nodes within a cluster, such as database replication between nodes. + +Data plane internode encryption is available for new or fully upgraded clusters. It not enabled by default. + +You can enable data plane internode encryption by: + +- Enabling it for individual databases + +- Setting the TBD policy: + + ``` shell + rladmin command TBD + ``` + +### Internal certificate management + +Internode encryption relies on internal certificates signed by a unique, private CA certificate created for your deployment. The private CA generates and signs leaf certificates for internode encryption only. It's generated when you install or upgrade to Redis Enterprise 6.2.4. it's used only within the cluster and is not exposed outside of the cluster. + +The leaf certificates expire regularly; they're automatically rotated before expiration and alerts are issued as needed. + +### Open source Redis compatibility + +[Redis 6.2](https://raw.githubusercontent.com/redis/redis/6.2/00-RELEASENOTES) introduced new commands, feature improvements, security fixes; it addresses many customer requests. + +Redis Enterprise Software supports all new commands, except [RESET](https://redis.io/commands/reset) and [FAILOVER](https://redis.io/commands/failover). (Redis Enterprise takes a different approach to connectivity; it also separates control plane operations from data plane operations.) + +To learn more about Redis Enterprise Software compatibility with open source Redis, see [In v6.0.20]({{}}) + +### Redis modules + +Redis Enterprise Software v6.2.4 includes the following Redis modules: + +- [RediSearch v2.0.11]({{}}) +- [RedisJSON v1.0.8]({{}}) +- [RedisBloom v2.2.6]({{}}) +- [RedisGraph v2.4.7]({{}}) +- [RedisTimeSeries v1.4.10]({{}}) + +The upgrade package includes general availability (GA) releases of each module. + +### Internode encryption for modules + +Before enabling data plane internode encryption for existing databases using modules, make sure you've upgraded the module to at least the version shown earlier. + +### Module-related enhancements + +Added the capability to update current module arguments for an existing database. + +In earlier versions, you could do this only when upgrading a module. + +To learn more, see [rladmin upgrade]({{}}). + +## Resolved issues + +- RS39954 - Changed the UI status indication for the [default user]({{}}) from `Active/Inactive` to `Enabled/Disabled` + +- RS42626 - Increased the max length for modules commands from 23 characters to 64 characters + +- RS54732 - Fixed incorrect reporting of number database connections, which caused the number of connections to be reports as a 20 digit number + +- RS52265 - Fixed excessive log lines reporting when Active-Active database is on featureset `0`. We recommend [upgrading the featureset]({{}}) version to the latest + +RS56122 - Fixed a bug that was causing AOF files to grow when the replicas of two Active-Active database became disconnected during full synchronization + +RS58184 - Fixed a bug when trying to create an Active-Active database with expired syncer certificates; participating clusters were creating replicas even though the create operation failed. + +RS48988 - Add the username description in the log upon an unauthorized REST API request + +## Known limitations + +All [known limitations]({{}}) from v6.0.20 have been fixed. + diff --git a/static/images/rs/internode-encryption.png b/static/images/rs/internode-encryption.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5220ae04a53334003553b5542962b8765b873a GIT binary patch literal 39148 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 qc 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 Date: Mon, 30 Aug 2021 11:09:26 +0300 Subject: [PATCH 11/16] Update and rename rs-6-2-4-september-2021.md to rs-6-2-4-august-2021.md --- ...tember-2021.md => rs-6-2-4-august-2021.md} | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) rename content/rs/release-notes/{rs-6-2-4-september-2021.md => rs-6-2-4-august-2021.md} (80%) diff --git a/content/rs/release-notes/rs-6-2-4-september-2021.md b/content/rs/release-notes/rs-6-2-4-august-2021.md similarity index 80% rename from content/rs/release-notes/rs-6-2-4-september-2021.md rename to content/rs/release-notes/rs-6-2-4-august-2021.md index 65e6779dbbc..04f1d71f6d6 100644 --- a/content/rs/release-notes/rs-6-2-4-september-2021.md +++ b/content/rs/release-notes/rs-6-2-4-august-2021.md @@ -1,23 +1,22 @@ --- -Title: Redis Enterprise Software Release Notes 6.2.4 (September 2021) -linkTitle: 6.2.4 (September 2021) +Title: Redis Enterprise Software Release Notes 6.2.4 (August 2021) +linkTitle: 6.2.4 (August 2021) description: weight: 76 alwaysopen: false categories: ["RS"] -aliases: /rs/release-notes/rs-6-2-4-september-2021/ - /rs/release-notes/rs-6-2-4-september-2021.md +aliases: /rs/release-notes/rs-6-2-4-august-2021/ + /rs/release-notes/rs-6-2-4-august-2021.md --- [Redis Enterprise Software version 6.2.4](https://redislabs.com/redis-enterprise-software/download-center/software/) is now available! This version offers: -- Encryption of all communications within cluster nodes, -- New functionality +- Encryption of all communications within cluster nodes - Security enhancements - Bug fixes -- Compatibility with the latest version of open source Redis 6.2. +- Compatibility with the latest version of open source Redis 6.2.3 ## Version changes @@ -27,7 +26,7 @@ You can [upgrade to v6.2.4]({{}} Keep the following in mind: -- Upgrades from versions earlier than v6.0 are not supported +- Upgrades from versions earlier than v6.0 are not supported. - The new internode encryption feature requires port 3342 to be open on all machines in the cluster. @@ -45,7 +44,7 @@ The default behavior of the `upgrade db` command has changed. It is now control Setting the upgrade policy to `latest` ensures that the most recent Redis features are available to new databases and ones that are upgraded. It also requires more frequent upgrades, as open source Redis is updated more frequently than Redis Enterprise Software. -The Redis Enterprise Software 6.2.4 package includes compatibility with the most recent major Redis release (v6.0) and the latest (most recent) update to Redis (v6.2). +The Redis Enterprise Software 6.2.4 package includes compatibility with the most recent major Redis release (v6.0) and the latest (most recent) update to Redis (v6.2.3). By default, compatibility with v6.0 will be installed. To change this, use `rladmin` to set the upgrade policy and the default Redis version: @@ -69,12 +68,14 @@ Redis Enterprise modules have individual release numbers [and lifecycle]({{}}), the SASL-based LDAP mechanism was deprecated in favor of a new [RBAC-based approach]({{}}). As of v.6.2.4, support for the older mechanism has been removed. For help migrating to the LDAP-based mechanism, see [Migrate to role-based LDAP]({{}}). + +- Following the EOL declaration of Open stack swift, it was removed as a target for backup and export. ## Features and enhancements ### Internode encryption -Internode encryption (INE) encrypts all communication between nodes in a cluster; it is available for the control plan (the admin console) and the data plane (Redis clients, the OSS Cluster API, and the REST API): +Internode encryption (INE) encrypts all communication between nodes in a cluster; it is available for the control plan and the data plane:  {{This diagram shows how internode encryption secures communication on the control plane and the dataplane.}}{{< /image >}} @@ -90,12 +91,16 @@ Data plane internode encryption is available for new or fully upgraded clusters. You can enable data plane internode encryption by: -- Enabling it for individual databases - -- Setting the TBD policy: +- Setting the cluster policy to enable data plane internode encryption by default for new databases + + ``` shell + rladmin tune cluster data_internode_encryption + ``` + +- Enabling it for individual existing databases ``` shell - rladmin command TBD + rladmin tune db data_internode_encryption enabled ``` ### Internal certificate management @@ -110,7 +115,7 @@ The leaf certificates expire regularly; they're automatically rotated before exp Redis Enterprise Software supports all new commands, except [RESET](https://redis.io/commands/reset) and [FAILOVER](https://redis.io/commands/failover). (Redis Enterprise takes a different approach to connectivity; it also separates control plane operations from data plane operations.) -To learn more about Redis Enterprise Software compatibility with open source Redis, see [In v6.0.20]({{}}) +To learn more about Redis Enterprise Software compatibility with open source Redis, see [In Redis Enterprise compatibility with open source]({{}}) ### Redis modules @@ -122,18 +127,14 @@ Redis Enterprise Software v6.2.4 includes the following Redis modules: - [RedisGraph v2.4.7]({{}}) - [RedisTimeSeries v1.4.10]({{}}) -The upgrade package includes general availability (GA) releases of each module. - ### Internode encryption for modules - -Before enabling data plane internode encryption for existing databases using modules, make sure you've upgraded the module to at least the version shown earlier. + +To utilize data plane encryption for existing databases with modules, update the module to the latest version prior to enabling data plane encryption. To add or upgrade modules to your databases, see [these instructions] ({{}}) ### Module-related enhancements Added the capability to update current module arguments for an existing database. - In earlier versions, you could do this only when upgrading a module. - To learn more, see [rladmin upgrade]({{}}). ## Resolved issues @@ -146,11 +147,11 @@ To learn more, see [rladmin upgrade]({{}}) version to the latest -RS56122 - Fixed a bug that was causing AOF files to grow when the replicas of two Active-Active database became disconnected during full synchronization +- RS56122 - Fixed a bug that was causing AOF files to grow when the replicas of two Active-Active database became disconnected during full synchronization -RS58184 - Fixed a bug when trying to create an Active-Active database with expired syncer certificates; participating clusters were creating replicas even though the create operation failed. +- RS58184 - Fixed a bug when trying to create an Active-Active database with expired syncer certificates; participating clusters were creating replicas even though the create operation failed. -RS48988 - Add the username description in the log upon an unauthorized REST API request +- RS48988 - Add the username description in the log upon an unauthorized REST API request ## Known limitations From a79044557c5e59e3e3b1ad1ffe50ce6aa5f7a0c4 Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Mon, 30 Aug 2021 07:57:10 -0700 Subject: [PATCH 12/16] Fixing build break. --- content/rs/release-notes/rs-6-2-4-august-2021.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/content/rs/release-notes/rs-6-2-4-august-2021.md b/content/rs/release-notes/rs-6-2-4-august-2021.md index 04f1d71f6d6..27993192b96 100644 --- a/content/rs/release-notes/rs-6-2-4-august-2021.md +++ b/content/rs/release-notes/rs-6-2-4-august-2021.md @@ -26,7 +26,7 @@ You can [upgrade to v6.2.4]({{}} Keep the following in mind: -- Upgrades from versions earlier than v6.0 are not supported. +- Upgrades from versions earlier than v6.0 are not supported - The new internode encryption feature requires port 3342 to be open on all machines in the cluster. @@ -69,13 +69,13 @@ Redis Enterprise modules have individual release numbers [and lifecycle]({{}}). -- Following the EOL declaration of Open stack swift, it was removed as a target for backup and export. +- [OpenStack Object Storage](https://wiki.openstack.org/wiki/Swift) ("Swift") has reached end-of-life. Consequently, you can no longer use ObjectStack Swift as a target for database backup or export operations. ## Features and enhancements ### Internode encryption -Internode encryption (INE) encrypts all communication between nodes in a cluster; it is available for the control plan and the data plane:  +Internode encryption (INE) encrypts all communication between nodes in a cluster; it is available for the control plan and the data plane, as shown in the following diagram.  {{This diagram shows how internode encryption secures communication on the control plane and the dataplane.}}{{< /image >}} @@ -115,7 +115,7 @@ The leaf certificates expire regularly; they're automatically rotated before exp Redis Enterprise Software supports all new commands, except [RESET](https://redis.io/commands/reset) and [FAILOVER](https://redis.io/commands/failover). (Redis Enterprise takes a different approach to connectivity; it also separates control plane operations from data plane operations.) -To learn more about Redis Enterprise Software compatibility with open source Redis, see [In Redis Enterprise compatibility with open source]({{}}) +To learn more, see Redis Enterprise Software [compatibility with open source]({{}}). ### Redis modules @@ -129,7 +129,9 @@ Redis Enterprise Software v6.2.4 includes the following Redis modules: ### Internode encryption for modules -To utilize data plane encryption for existing databases with modules, update the module to the latest version prior to enabling data plane encryption. To add or upgrade modules to your databases, see [these instructions] ({{}}) +To utilize data plane encryption for existing databases with modules, update the module to the latest version prior to enabling data plane encryption. + +For help, see [Upgrade the module for a database]({{}}). ### Module-related enhancements From 87d3a928abdf140be451da79c08a485f931b876d Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Mon, 30 Aug 2021 09:41:54 -0700 Subject: [PATCH 13/16] More tweaks/fixes. --- content/rs/release-notes/rs-6-2-4-august-2021.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/rs/release-notes/rs-6-2-4-august-2021.md b/content/rs/release-notes/rs-6-2-4-august-2021.md index 27993192b96..fd4e64f5f43 100644 --- a/content/rs/release-notes/rs-6-2-4-august-2021.md +++ b/content/rs/release-notes/rs-6-2-4-august-2021.md @@ -75,9 +75,7 @@ Redis Enterprise modules have individual release numbers [and lifecycle]({{}}{{< /image >}} +Internode encryption (INE) encrypts all communication between nodes in a cluster; it is available for the control plan and the data plane.  #### Control plane internode encryption From 931d700e2bb130d509074e75f80dfcfa2cf0159a Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Mon, 30 Aug 2021 10:57:50 -0700 Subject: [PATCH 14/16] Editorial feedback/tweaks --- .../rs/release-notes/rs-6-2-4-august-2021.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/content/rs/release-notes/rs-6-2-4-august-2021.md b/content/rs/release-notes/rs-6-2-4-august-2021.md index fd4e64f5f43..0367b5c6374 100644 --- a/content/rs/release-notes/rs-6-2-4-august-2021.md +++ b/content/rs/release-notes/rs-6-2-4-august-2021.md @@ -40,7 +40,7 @@ The default behavior of the `upgrade db` command has changed. It is now control This is the default value for Redis Enterprise Software. -- When set to `latest`, the policy creates new databases and upgrades existing ones to be compatible with latest (most recent) version of open source Redis, which was the default behavior of earlier versions of Redis Enterprise Software. It is not longer the default behavior. +- When set to `latest`, the policy creates new databases and upgrades existing ones to be compatible with the latest (most recent) version of open source Redis, which was the default behavior of earlier versions of Redis Enterprise Software. This is no longer the default behavior. Setting the upgrade policy to `latest` ensures that the most recent Redis features are available to new databases and ones that are upgraded. It also requires more frequent upgrades, as open source Redis is updated more frequently than Redis Enterprise Software. @@ -61,7 +61,7 @@ Redis Enterprise Software v5.6.0 will reach end of life (EOF) on October 31, 202 To learn more, see the Redis Enterprise Software [product lifecycle]({{}}), which details the release number and the end-of-life schedule for Redis Enterprise Software. -Redis Enterprise modules have individual release numbers [and lifecycle]({{}}). +Redis Enterprise modules have individual release numbers [and lifecycles]({{}}). ### Deprecation notices @@ -75,17 +75,17 @@ Redis Enterprise modules have individual release numbers [and lifecycle]({{}}) from `Active/Inactive` to `Enabled/Disabled` +- RS39954 - Changed the UI status indication for the +[default user]({{}}) from `Active/Inactive` to `Enabled/Disabled` - RS42626 - Increased the max length for modules commands from 23 characters to 64 characters -- RS54732 - Fixed incorrect reporting of number database connections, which caused the number of connections to be reports as a 20 digit number +- RS54732 - Fixed incorrect reporting of number database connections, which caused the number of connections to be reported as a 20 digit number -- RS52265 - Fixed excessive log lines reporting when Active-Active database is on featureset `0`. We recommend [upgrading the featureset]({{}}) version to the latest +- RS52265 - Fixed excessive log lines reporting when an Active-Active database is on featureset `0`. We recommend [upgrading the featureset]({{}}) version to the latest -- RS56122 - Fixed a bug that was causing AOF files to grow when the replicas of two Active-Active database became disconnected during full synchronization +- RS56122 - Fixed a bug that was causing AOF files to grow when the replicas of two Active-Active databases became disconnected during full synchronization - RS58184 - Fixed a bug when trying to create an Active-Active database with expired syncer certificates; participating clusters were creating replicas even though the create operation failed. @@ -156,4 +157,3 @@ To learn more, see [rladmin upgrade]({{}}) from v6.0.20 have been fixed. - From e322c0e503a746c50e98c0ec1ba02dcc41b0ae2e Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Mon, 30 Aug 2021 11:04:38 -0700 Subject: [PATCH 15/16] Even more editorial fixes and tweaks. --- content/rs/release-notes/rs-6-2-4-august-2021.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/rs/release-notes/rs-6-2-4-august-2021.md b/content/rs/release-notes/rs-6-2-4-august-2021.md index 0367b5c6374..89a5e86d864 100644 --- a/content/rs/release-notes/rs-6-2-4-august-2021.md +++ b/content/rs/release-notes/rs-6-2-4-august-2021.md @@ -103,13 +103,13 @@ You can enable data plane internode encryption by: ### Internal certificate management -Internode encryption relies on internal certificates signed by a unique, private CA certificate created for your deployment. The private CA generates and signs leaf certificates for internode encryption only. It's generated when you install or upgrade to Redis Enterprise 6.2.4. it's used only within the cluster and is not exposed outside of the cluster. +Internode encryption relies on internal certificates signed by a unique, private CA certificate created for your deployment. The private CA generates and signs leaf certificates for internode encryption only. It's generated when you install or upgrade to Redis Enterprise 6.2.4. It's used only within the cluster and is not exposed outside of the cluster. The leaf certificates expire regularly; they're automatically rotated before expiration and alerts are issued as needed. ### Open source Redis compatibility -[Redis 6.2](https://raw.githubusercontent.com/redis/redis/6.2/00-RELEASENOTES) introduced new commands, feature improvements, security fixes; it addresses many customer requests. +[Redis 6.2](https://raw.githubusercontent.com/redis/redis/6.2/00-RELEASENOTES) introduced new commands, feature improvements, and security fixes; it addresses many customer requests. Redis Enterprise Software supports all new commands, except [RESET](https://redis.io/commands/reset) and [FAILOVER](https://redis.io/commands/failover). (Redis Enterprise takes a different approach to connectivity; it also separates control plane operations from data plane operations.) From a34d64f1e58b12ae38dbf02ae351fc701e2cab2d Mon Sep 17 00:00:00 2001 From: Lance Leonard Date: Mon, 30 Aug 2021 17:23:04 -0700 Subject: [PATCH 16/16] Added missing flag in console sample. --- content/rs/release-notes/rs-6-2-4-august-2021.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rs/release-notes/rs-6-2-4-august-2021.md b/content/rs/release-notes/rs-6-2-4-august-2021.md index 89a5e86d864..516efe1f28a 100644 --- a/content/rs/release-notes/rs-6-2-4-august-2021.md +++ b/content/rs/release-notes/rs-6-2-4-august-2021.md @@ -92,7 +92,7 @@ You can enable data plane internode encryption by: - Setting the cluster policy to enable data plane internode encryption by default for new databases ``` shell - rladmin tune cluster data_internode_encryption + rladmin tune cluster data_internode_encryption enabled ``` - Enabling it for individual existing databases