Skip to content
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

feat(services/redis): add redis cluster support #2858

Merged
merged 11 commits into from
Aug 15, 2023
73 changes: 11 additions & 62 deletions .github/workflows/service_test_redis.yml
Expand Up @@ -119,31 +119,13 @@ jobs:
uses: ./.github/actions/setup
with:
need-nextest: true
- name: Configure Redis Cluster
- name: Setup Redis Cluster
shell: bash
working-directory: core
run: |

# Launch redis cluster
for no in `seq 0 5`; do \

docker run -d \
--rm \
--name redis-${no} \
--network host \
redis:latest \
--port 638${no} \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 638${no} \
--cluster-announce-bus-port 1638${no}
done

docker run --rm \
--name redis-cluster-create \
--network host \
redis:latest \
sh -c "echo yes | redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1"
cd `pwd`/src/services/redis/fixtures/redis_cluster
docker-compose up -d

- name: Test
shell: bash
Expand All @@ -161,57 +143,24 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: Copy Redis Certificate Files
- name: Setup Redis Cluster with TLS
shell: bash
working-directory: core
run: |
mkdir -p /tmp/redis
cp -r `pwd`/src/services/redis/fixtures/* /tmp/redis

- name: Configure Redis Cluster with TLS
run: |
mkdir -p /tmp/redis
cp `pwd`/src/services/redis/fixtures/ca.* `pwd`/src/services/redis/fixtures/redis.* /tmp/redis

# allow the redis docker to read these files
chmod 777 /tmp/redis/redis.crt /tmp/redis/redis.key

# Install the CA in the system

sudo cp /tmp/redis/ca.crt /usr/local/share/ca-certificates
sudo update-ca-certificates

# Launch redis cluster
for no in `seq 0 5`; do \

docker run -d \
--rm \
--name redis-${no} \
--network host \
--mount type=bind,source=/tmp/redis,target=/etc/redis/ssl \
redis:latest \
--requirepass opendal \
--masterauth opendal \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 638${no} \
--cluster-announce-bus-port 1638${no} \
--tls-protocols 'TLSv1.2' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 638${no} \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no
done

docker run --rm \
--name redis-cluster-create \
--network host \
--mount type=bind,source=/tmp/redis,target=/etc/redis/ssl \
redis:latest \
sh -c "echo yes | redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1 --tls -a opendal --cacert /etc/redis/ssl/ca.crt"
cd `pwd`/src/services/redis/fixtures/redis_cluster_tls
docker-compose up -d

- name: Setup Rust toolchain
uses: ./.github/actions/setup
Expand Down
92 changes: 92 additions & 0 deletions core/src/services/redis/fixtures/redis_cluster/docker-compose.yml
G-XD marked this conversation as resolved.
Show resolved Hide resolved
@@ -0,0 +1,92 @@
version: '3.8'

services:
redis-node-master-1:
image: redis:latest
G-XD marked this conversation as resolved.
Show resolved Hide resolved
container_name: redis-cluster-1
network_mode: host
command: "redis-server --appendonly yes \
--port 6380 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6380 \
--cluster-announce-bus-port 16380"

redis-node-master-2:
image: redis:latest
container_name: redis-cluster-2
network_mode: host
command: "redis-server --appendonly yes \
--port 6381 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6381 \
--cluster-announce-bus-port 16381"

redis-node-master-3:
image: redis:latest
container_name: redis-cluster-3
network_mode: host
command: "redis-server --appendonly yes \
--port 6382 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6382 \
--cluster-announce-bus-port 16382"

redis-node-slave-1:
image: redis:latest
container_name: redis-cluster-4
network_mode: host
command: "redis-server --appendonly yes \
--port 6383 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6383 \
--cluster-announce-bus-port 16383"

redis-node-slave-2:
image: redis:latest
container_name: redis-cluster-5
network_mode: host
command: "redis-server --appendonly yes \
--port 6384 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6384 \
--cluster-announce-bus-port 16384"

redis-node-slave-3:
image: redis:latest
container_name: redis-cluster-6
network_mode: host
command: "redis-server --appendonly yes \
--port 6385 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6385 \
--cluster-announce-bus-port 16385"

redis-cli:
image: redis:latest
network_mode: host
command: sh -c "echo yes | redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1"
depends_on:
- redis-node-master-1
- redis-node-master-2
- redis-node-master-3
- redis-node-slave-1
- redis-node-slave-2
- redis-node-slave-3
154 changes: 154 additions & 0 deletions core/src/services/redis/fixtures/redis_cluster_tls/docker-compose.yml
@@ -0,0 +1,154 @@
version: '3.8'

services:
redis-cluster-tls-master-1:
image: redis:latest
container_name: redis-cluster-tls-master-1
network_mode: host
command: "redis-server --requirepass opendal --masterauth opendal --appendonly yes \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6380 \
--cluster-announce-bus-port 16380 \
--tls-protocols 'TLSv1.2 TLSv1.3' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 6380 \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no"
volumes:
- /tmp/redis:/etc/redis/ssl/

redis-cluster-tls-master-2:
image: redis:latest
container_name: redis-cluster-tls-master-2
network_mode: host
command: "redis-server --requirepass opendal --masterauth opendal --appendonly yes \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6381 \
--cluster-announce-bus-port 16381 \
--tls-protocols 'TLSv1.2 TLSv1.3' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 6381 \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no"
volumes:
- /tmp/redis:/etc/redis/ssl/
G-XD marked this conversation as resolved.
Show resolved Hide resolved

redis-cluster-tls-master-3:
image: redis:latest
container_name: redis-cluster-tls-master-3
network_mode: host
command: "redis-server --requirepass opendal --masterauth opendal --appendonly yes \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6382 \
--cluster-announce-bus-port 16382 \
--tls-protocols 'TLSv1.2 TLSv1.3' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 6382 \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no"
volumes:
- /tmp/redis:/etc/redis/ssl/

redis-cluster-tls-slave-1:
image: redis:latest
container_name: redis-cluster-tls-slave-1
network_mode: host
command: "redis-server --requirepass opendal --masterauth opendal --appendonly yes \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6383 \
--cluster-announce-bus-port 16383 \
--tls-protocols 'TLSv1.2 TLSv1.3' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 6383 \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no"
volumes:
- /tmp/redis:/etc/redis/ssl/

redis-cluster-tls-slave-2:
image: redis:latest
container_name: redis-cluster-tls-slave-2
network_mode: host
command: "redis-server --requirepass opendal --masterauth opendal --appendonly yes \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6384 \
--cluster-announce-bus-port 16384 \
--tls-protocols 'TLSv1.2 TLSv1.3' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 6384 \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no"
volumes:
- /tmp/redis:/etc/redis/ssl/

redis-cluster-tls-slave-3:
image: redis:latest
container_name: redis-cluster-tls-slave-3
network_mode: host
command: "redis-server --requirepass opendal --masterauth opendal --appendonly yes \
--port 0 \
--cluster-enabled yes \
--cluster-config-file nodes.conf \
--cluster-node-timeout 15000 \
--cluster-announce-ip 127.0.0.1 \
--cluster-announce-port 6385 \
--cluster-announce-bus-port 16385 \
--tls-protocols 'TLSv1.2 TLSv1.3' \
--tls-replication yes \
--tls-cluster yes \
--tls-port 6385 \
--tls-cert-file /etc/redis/ssl/redis.crt \
--tls-key-file /etc/redis/ssl/redis.key \
--tls-ca-cert-file /etc/redis/ssl/ca.crt \
--tls-auth-clients no"
volumes:
- /tmp/redis:/etc/redis/ssl/

redis-cli:
image: redis:latest
network_mode: host
volumes:
- /tmp/redis:/etc/redis/ssl/
command: sh -c "echo yes | redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1 --tls -a opendal --cacert /etc/redis/ssl/ca.crt"
depends_on:
- redis-cluster-tls-master-1
- redis-cluster-tls-master-2
- redis-cluster-tls-master-3
- redis-cluster-tls-slave-1
- redis-cluster-tls-slave-2
- redis-cluster-tls-slave-3