IBM / operator-for-redis-cluster

IBM Operator for Redis Cluster
https://ibm.github.io/operator-for-redis-cluster
MIT License
60 stars 34 forks source link

Update Optimal Replica Placement Logic #76

Closed 4n4nd closed 1 year ago

4n4nd commented 1 year ago

Add logic to check for zones with most available replicas

Resolves #74

Current logic:

Let's assume we have 4 zones and we have a cluster with 3 primaries and 2 replication. So 9 pods will be scheduled across the cluster.

Step 1: Pods scheduled Zones: Z0 Z1 Z2 Z3
Scheduled pods: 2 2 2 3
Step 2: Primaries assigned Zones: Z0 Z1 Z2 Z3
Available pods: 1 1 1 3
Shard-0 pods: 1 0 0 0
Shard-1 pods: 0 1 0 0
Shard-2 pods: 0 0 1 0
Step 3: Replicas assigned for Shards-0/1 Zones: Z0 Z1 Z2 Z3
Available pods: 0 0 0 2
Shard-0 pods: 1 1 1 0
Shard-1 pods: 1 1 0 1
Shard-2 pods: 0 0 1 0

We can see here the operator does not have any other option but to schedule both the pods for Shard-2 in Z3.

New logic:

Step 1: Pods scheduled Zones: Z0 Z1 Z2 Z3
Scheduled pods: 2 2 2 3
Step 2: Primaries assigned Zones: Z0 Z1 Z2 Z3
Available pods: 1 1 1 3
Shard-0 pods: 1 0 0 0
Shard-1 pods: 0 1 0 0
Shard-2 pods: 0 0 1 0

Step 3: Replica assignment Shard-0

Here assignment will start from the zone that has the highest availability (Z3) Zones: Z0 Z1 Z2 Z3
Available pods: 1 1 0 2
Shard-0 pods: 1 0 1 1
Shard-1 pods: 0 1 0 0
Shard-2 pods: 0 0 1 0

Step 3: Replica assignment Shard-1

Zones: Z0 Z1 Z2 Z3
Available pods: 0 1 0 1
Shard-0 pods: 1 0 1 1
Shard-1 pods: 1 1 0 1
Shard-2 pods: 0 0 1 0

Step 4: Replica assignment Shard-2

Zones: Z0 Z1 Z2 Z3
Available pods: 0 0 0 0
Shard-0 pods: 1 0 1 1
Shard-1 pods: 1 1 0 1
Shard-2 pods: 0 1 1 1
cin commented 1 year ago

Sorry for the delay in testing this @4n4nd. I'll try to carve out some time this afternoon to test.