-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Redis cluster support #17982
base: 5.next
Are you sure you want to change the base?
Redis cluster support #17982
Conversation
docker-compose.yml services:
php:
build:
context: .
args:
PHP_MODE: production
restart: unless-stopped
volumes:
- ./:/var/www/html
depends_on:
- redis-node-0
- redis-node-1
- redis-node-2
- redis-node-3
- redis-node-4
- redis-node-5
redis-node-0:
image: bitnami/redis-cluster:latest
restart: unless-stopped
environment:
ALLOW_EMPTY_PASSWORD: yes
REDIS_CLUSTER_CREATOR: yes
REDIS_CLUSTER_REPLICAS: 1
REDIS_NODES: redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5
depends_on:
- redis-node-1
- redis-node-2
- redis-node-3
- redis-node-4
- redis-node-5
redis-node-1:
image: bitnami/redis-cluster:latest
restart: unless-stopped
environment:
ALLOW_EMPTY_PASSWORD: yes
REDIS_NODES: redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5
redis-node-2:
image: bitnami/redis-cluster:latest
restart: unless-stopped
environment:
ALLOW_EMPTY_PASSWORD: yes
REDIS_NODES: redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5
redis-node-3:
image: bitnami/redis-cluster:latest
restart: unless-stopped
environment:
ALLOW_EMPTY_PASSWORD: yes
REDIS_NODES: redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5
redis-node-4:
image: bitnami/redis-cluster:latest
restart: unless-stopped
environment:
ALLOW_EMPTY_PASSWORD: yes
REDIS_NODES: redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5
redis-node-5:
image: bitnami/redis-cluster:latest
restart: unless-stopped
environment:
ALLOW_EMPTY_PASSWORD: yes
REDIS_NODES: redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5 Edit: networks:
redis-cluster-net:
ipv4_address: 172.18.0.7 |
You can run For stan you need to do a Certain stan issues can't be fixed easily, so it may be, that you need to regenerate the baselines for phpstan and psalm |
Co-authored-by: Kevin Pfeifer <info@pfiff.me>
I think the changes to |
Tests have been updated. There is a separated test for |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good. I left a few comments on test coverage.
* - `nodes` URL or IP addresses of the Redis cluster nodes. | ||
* Format: an array of strings in the form `<ip>:<port>`, like: | ||
* [ | ||
* '<ip>:<port>', | ||
* '<ip>:<port>', | ||
* '<ip>:<port>', | ||
* ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* - `nodes` URL or IP addresses of the Redis cluster nodes. | |
* Format: an array of strings in the form `<ip>:<port>`, like: | |
* [ | |
* '<ip>:<port>', | |
* '<ip>:<port>', | |
* '<ip>:<port>', | |
* ] | |
* - `nodes` When using redis-cluster, the URL or IP addresses of the | |
* Redis cluster nodes. | |
* Format: an array of strings in the form `<ip>:<port>`, like: | |
* [ | |
* '<ip>:<port>', | |
* '<ip>:<port>', | |
* '<ip>:<port>', | |
* ] |
} | ||
|
||
if ($this->_Redis instanceof RedisCluster) { | ||
foreach ($this->_Redis->_masters() as $masterNode) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should have tests for clear
+ RedisCluster.
$this->_Redis->setOption(Redis::OPT_SCAN, (string)Redis::SCAN_RETRY); | ||
} | ||
|
||
if ($this->_Redis instanceof RedisCluster) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another place where we should have some test coverage.
['host' => '172.18.0.7', 'port' => 6379], | ||
['host' => '172.18.0.2', 'port' => 6379], | ||
['host' => '172.18.0.3', 'port' => 6379], | ||
['host' => '172.18.0.5', 'port' => 6379], | ||
['host' => '172.18.0.4', 'port' => 6379], | ||
['host' => '172.18.0.6', 'port' => 6379], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need a 6 node cluster? Couldn't we make due with a 3 node cluster? No need to waste additional resources.
'172.18.0.7:6379', | ||
'172.18.0.2:6379', | ||
'172.18.0.3:6379', | ||
'172.18.0.5:6379', | ||
'172.18.0.4:6379', | ||
'172.18.0.6:6379', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we use this in setup() so we don't have two lists?
Support for Redis cluster.
I have included a test file but im not sure how to implement it to the Github actions.
To test this I have used a docker-compose file and I will put it as a comment to this PR.