blob: 6c8fd75ac2e75b62307c85087026db6d3ae2554f [file] [log] [blame]
.. ============LICENSE_START=======================================================
..
.. ================================================================================
.. Copyright (C) 2020 Hcl Technologies Limited.
.. ================================================================================
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
..
.. http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. ============LICENSE_END=========================================================
Important
^^^^^^^^^
The redis-cluster currently is NOT part of RIC platform & hence is completely optional.
This piece of document has been created as part of delivery item for below jira ticket
https://jira.o-ran-sc.org/browse/RIC-109
This ticket is about assessing the feasibility of redis-cluster (with data sharding)
supporting desired pod anti-affinity for high availability as per the ticket.
Overview
^^^^^^^^
This document describes the environment/conditions used to test the feasibility of Redis
cluster set-up as detailed in the above ticket. Redis Cluster is a distributed implementation
of Redis with high performance goals. More details at https://redis.io/topics/cluster-spec
Environment Set-Up
^^^^^^^^^^^^^^^^^^
The set up was tested with kubernetes v1.19 cluster with
#. Pod topology spread constraint enabled
Reference: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints
#. CEPH as the Cluster Storage Solution.
#. Three worker nodes in the kubernet cluster
Execution
^^^^^^^^^
Once environment is set-up, a redis-cluster can be set up using the helm-chart (also provided with
this commit). Once cluster is running, any master/slave of the redis instance pods can be deleted which
will be compensated automatically by new instances
At this stage the perl utility program (included with helm-chart) can be run. The helm chart installation
output generates the requirement commands to invoke.
This utility program identifies the missing anti-affinity(as per above ticket) of redis instances required
in a redis-cluster. When executed it communicates to redis nodes to switch roles (e.g. master/slave)
such that the end-state meets the desired anti-affinity.