Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Migrar o Redis Cluster para o Oracle Cloud Infrastructure Cache
Introdução
Este tutorial fornece um processo passo a passo para migrar o cache do Cluster Redis com sharding usando a ferramenta pyredis-dump
. pyredis-dump
é uma ferramenta baseada em Python projetada para simplificar o dumping e a restauração de dados do Redis. O procedimento se aplica a um dos seguintes cenários de migração:
- Qualquer outra nuvem para a Oracle Cloud Infrastructure (OCI).
- On-premises para OCI.
- OCI para OCI.
Embora este tutorial se concentre principalmente na migração de um Cluster Redis on-premises para a OCI sem uma arquitetura master-slave, a mesma abordagem também pode ser aplicada a ambientes que usam uma configuração master-slave Redis.
O que é o Redis?
-
O Redis é um armazenamento de estrutura de dados em memória de código aberto que pode ser usado como um banco de dados NoSQL, cache, broker de mensagens e mecanismo de streaming, conhecido por sua velocidade e acesso a dados de baixa latência.
-
O Redis suporta várias estruturas de dados, como Strings, Hashes, Listas, Conjuntos, Conjuntos Classificados, Streams etc.
-
O Redis oferece persistência de dados opcional, permitindo que os dados sejam salvos no disco, garantindo a durabilidade dos dados mesmo que o servidor seja reiniciado.
-
O Redis fornece recursos para escalabilidade horizontal (Cluster Redis) e alta disponibilidade (Redis Sentinel - Uma arquitetura master slave).
-
Podemos configurar um Cluster Redis com uma mistura de alta disponibilidade, como o Redis Sentinel.
O que é o Cluster Redis?
O Redis Cluster oferece alta disponibilidade e dimensionamento horizontal. Ele divide os dados em shards, distribuídos entre vários nós. Cada shard tem um nó primário e réplicas para tolerância a falhas. Isso permite que o Redis Cluster lide com conjuntos de dados maiores e maior throughput de gravação.
A imagem a seguir mostra um cluster de 3 nós contendo 3 nós como principal (M1, M2 e M3), com cada nó tendo subordinado como (S1, S2 e S3). A configuração do subordinado é opcional para fornecer mais alta disponibilidade.
O Redis Cluster não usa hashing consistente, mas uma forma diferente de sharding, onde cada chave é conceitualmente parte do que chamamos de slot de hash. Existem 16384 slots de hash no Redis Cluster. Cada nó em um Cluster Redis é responsável por um subconjunto dos slots de hash; portanto, por exemplo, você pode ter um cluster com 3 nós, em que:
- O nó A contém slots de hash de 0 a 5500.
- O nó B contém slots de hash de 5501 a 11000.
- O nó C contém slots de hash de 11001 a 16383.
O que é o OCI Cache?
-
O cluster OCI Cache for Redis é um serviço Redis totalmente gerenciado que fornece recursos de armazenamento em cache de alto desempenho e baixa latência para acelerar os aplicativos.
-
Ele suporta acesso a dados em tempo real armazenando dados acessados com frequência na memória, o que reduz a carga em sistemas de back-end e melhora a capacidade de resposta geral.
-
Ele suporta dois modos de cluster, clusters fragmentados e clusters não fragmentados.
-
Os clusters não fragmentados são configurados com um nó principal e um ou mais nós de réplica, com os dados duplicados em cada nó.
-
Os clusters com shards têm três ou mais shards, com os dados divididos entre os shards do cluster, de modo que cada shard contenha parte dos dados. Cada shard é como um cluster, com um nó primário e até quatro nós de réplica.
-
Os clusters com sharding não têm pontos finais principais ou de réplica no nível do cluster, como os clusters não com sharding. Em vez disso, cada shard tem um ponto final privado que você pode usar ao estabelecer conexão com o cluster.
Objetivos
-
Crie um cluster com sharding de três nós em um Redis local versão
7.4.2
. -
Crie um cluster com sharding de três nós no OCI Cache versão
7.0.0
. -
Migre dados de cache do local para o OCI.
Pré-requisitos
-
Acesso a uma tenancy do OCI.
-
Assine a região do OCI.
-
Provisionar compartimento na tenancy.
-
Criar VCN e sub-rede.
Tarefa 1: Configurar Cluster Redis de Origem em uma Configuração Local
-
Configure hosts locais. Crie três máquinas virtuais (VMs) locais ou host físico usando RHEL8.
- Redis_Node1:
10.0.0.151
- Redis_Node2:
10.0.0.164
- Redis_Node3:
10.0.0.205
- Redis_Node1:
-
Abra a porta em todos os nós.
Cada nó do Cluster Redis requer de 1 a 3 conexões TCP abertas com base na configuração. A porta TCP Redis normal usada para atender clientes, por exemplo,
6379
, mais a porta obtida pela adição de 10000 à porta de dados, portanto, 16379 para cluster e 26379 para Sentinel. Certifique-se de abrir todas as portas em seu firewall; caso contrário, os nós do cluster Redis não poderão se comunicar. Execute os comandos a seguir.$firewall-cmd --permanent --add-port=6379/tcp ( For master/slave replication and clint connection) $firewall-cmd --permanent --add-port=16379/tcp ( For Redis Cluster ) $firewall-cmd --reload
-
Instale o software Redis em todos os nós. Execute o comando a seguir para fazer download do Redis Community Edition 7.4 mais recente para RHEL8. Instale o software Redis em todos os três nós usando o usuário root.
$mkdir /redis $wget http://download.redis.io/redis-stable.tar.gz $tar xvzf redis-stable.tar.gz $cd redis-stable $make redis-cli $make BUILD_TLS=yes $cp src/redis-cli /usr/local/bin/ $cp redis-server /usr/local/bin/ $redis-cli -v
-
Prepare o arquivo de configuração Redis em todos os nós.
Recomenda-se configurar um Cluster Redis de três nós com pelo menos uma réplica (subordinada) por mestre e Sentinel para alta disponibilidade. Neste exemplo, criamos três clusters de nós sem réplicas. Para configurar um Cluster Redis, temos que preparar o arquivo de configuração do cluster chamado
redis.conf
em todos os três nós na pasta/redis
.$cd /redis $vi redis.conf port 6379 timeout 0 protected-mode no tcp-keepalive 300 pidfile "/redis/redis-server.pid" logfile "/redis/redis-server.log" requirepass "pass123" dbfilename "dump.rdb" appendonly no masterauth "pass123" cluster-enabled yes cluster-config-file /redis/nodes.conf cluster-node-timeout 5000
-
Inicie o servidor Redis em todos os nós. Execute o comando a seguir para iniciar o servidor Redis em todos os três nós.
[root@instance-20250224-0709 redis]# redis-server 814355:C 16 Apr 2025 15:30:35.171 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 814355:C 16 Apr 2025 15:30:35.171 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 814355:C 16 Apr 2025 15:30:35.171 * Redis version=7.4.2, bits=64, commit=00000000, modified=0, pid=814355, just started 814355:C 16 Apr 2025 15:30:35.171 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 814355:M 16 Apr 2025 15:30:35.171 * Increased maximum number of open files to 10032 (it was originally set to 1024). 814355:M 16 Apr 2025 15:30:35.172 * monotonic clock: POSIX clock_gettime _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis Community Edition .-`` .-```. ```\/ _.,_ ''-._ 7.4.2 (00000000/0) 64 bit ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 814355 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | https://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 814355:M 16 Apr 2025 15:30:35.172 * Server initialized 814355:M 16 Apr 2025 15:30:35.173 * Loading RDB produced by version 7.4.2 814355:M 16 Apr 2025 15:30:35.173 * RDB age 9 seconds 814355:M 16 Apr 2025 15:30:35.173 * RDB memory usage when created 2.18 Mb 814355:M 16 Apr 2025 15:30:35.173 * Done loading RDB, keys loaded: 1, keys expired: 0. 814355:M 16 Apr 2025 15:30:35.173 * DB loaded from disk: 0.000 seconds 814355:M 16 Apr 2025 15:30:35.173 * Ready to accept connections tcp
Inicia o servidor Redis usando um arquivo de configuração específico e o executa em segundo plano.
$redis-server /redis/redis.conf &
-
Criar Cluster Redis. Para criar um Cluster Redis de todos os três servidores Redis iniciados acima, execute o comando a seguir em Node1.
# redis-cli --cluster create 10.0.0.151:6379 10.0.0.164:6379 10.0.0.205:6379 -a pass123 output: >>> Performing hash slots allocation on 3 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 M: a89cae61ea55xxxxxxxxxxx8ea31c70b0dc290 10.0.0.151:6379 slots:[0-5460] (5461 slots) master M: b914e2031ceaxxxxxxxxxxxa6d7d5d67fa748 10.0.0.164:6379 slots:[5461-10922] (5462 slots) master M: 9e71454df3f0cbexxxxxxxxxxx6ddc34177f7465 10.0.0.205:6379 slots:[10923-16383] (5461 slots) master [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
Podemos ver a Chave de Compartilhamento para nós:
- Nó-1 (
10.0.0.151
)0-5460
- Nó-2 (
10.0.0.164
)5461-10922
- Nó-3 (
10.0.0.205
)10923-16383
- Nó-1 (
-
Conecte-se ao Cluster Redis usando o utilitário cliente Redis e valide os nós do cluster.
A interface de linha de comando Redis (também conhecida como redis-cli) é um programa de terminal que envia comandos e lê respostas do servidor Redis. O Redis-cli é instalado automaticamente como parte da instalação do Redis.
-
Execute o comando
$redis-cli -a pass123 -p 6379 -c
para estabelecer conexão com o host local. -
Execute o comando
$redis-cli -a pass123 -p 6379 -h 10.0.0.151 -c
para estabelecer conexão do controle remoto.
127.0.0.1:6379> cluster nodes b914e2031cea8bxxxxxxxxxxxe9a6d7d5d67fa748 10.0.0.164:6379@16379 master - 0 1740409776706 2 connected 5461-10922 a89cae61ea553420c7xxxxxxxxxxx8ea31c70b0dc290 10.0.0.151:6379@16379 myself,master - 0 1740409775000 1 connected 0-5460 9e71454df3f0cbvxxxxxxxxxxx46ddc34177f7465 10.0.0.205:6379@16379 master - 0 1740409776000 3 connected 10923-16383 127.0.0.1:6379>
-
-
Execute a operação Data Manipulation Language (DML) no cluster.
Em um ambiente de Cluster Redis, os dados (operação de leitura/gravação) são redirecionados automaticamente para o nó apropriado com base no slot de hash derivado da chave de shard.
$redis-cli -a pass123 -p 6379 -c 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name Dharmesh -> Redirected to slot [5798] located at 10.0.0.164:6379 OK 10.0.0.164:6379> set age 40 -> Redirected to slot [741] located at 10.0.0.151:6379 OK 10.0.0.151:6379> set gender M -> Redirected to slot [15355] located at 10.0.0.205:6379 OK 127.0.0.1:6379> KEYS * 1) "name" 2) "age" 3) "gender" >SAVE 10.0.0.205:6379> exit
Salve para garantir a persistência de dados em um Cluster Redis em
/redis/dump.rdb
, você pode usar snapshots do Banco de Dados Redis (RDB) ou AOF (Anexar Arquivos Somente). O RDB cria snapshots do banco de dados na memória em intervalos especificados, enquanto o AOF registra todas as operações de gravação, permitindo a reconstrução do banco de dados em caso de falha.
Tarefa 2: Configurar o Cluster Redis de Destino no Cache do OCI
-
Faça log-in na Console do OCI, navegue até Database, OCI Cache e clique em Clusters.
-
Selecione o respectivo compartimento e clique em Criar Cluster.
-
Selecione o Nome do cluster, Criar no compartimento e a versão do mecanismo de Cache do OCI.
-
Selecione Modo de cluster, Contagem de shards, Nó por Shard e Memória por nó.
-
Selecione VCN e Sub-rede.
-
Verifique e clique em Criar cluster.
Depois que o provisionamento do cluster do OCI for concluído, ele deverá se parecer com a imagem a seguir. Podemos ver três nós de cluster e Ponto final privado.
Tarefa 3: Criar Conexão com o Cluster de Cache do OCI
O OCI Cache é SaaS; não haverá acesso direto ao host Redis. Para estabelecer conexão com o OCI Cache, precisamos criar uma instância de salto ou um host do OCI Bastion na sub-rede pública para acesso seguro a clusters dentro da mesma VCN e sub-rede.
Provisionar Bastion/Jump no OCI
-
Vá para a Console do OCI, navegue até Identidade e Segurança e clique em Bastions.
-
Selecione compartimento, VCN, sub-rede, lista de permissões de blocos CIDR e clique em Criar bastion.
-
Execute o comando a seguir para instalar o Redis no jump host.
sudo su - mkdir /redis wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make redis-cli make BUILD_TLS=yes cp src/redis-cli /usr/local/bin/ cp redis-server /usr/local/bin/ $redis-cli -v
-
Conecte-se a um dos nós de cluster do jump host e valide os nós.
Connect Cluster Node1 $redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbxxxxxxxxxxxo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c Connect Cluster Node2 $redis-cli -h aaantxkdlyarjuuzfc5qgic3xxxxxxxxxxxxa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c Connect Cluster Node3 $redis-cli -h aaantxkdlyarjuuzfc5qgic3xxxxxxxxxxxfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c Validate OCI cluster Nodes: > cluster nodes b89bf86956a0ce19e6b4xxxxxxxxxxxcd41d0b78dd 10.0.15.21:6379@16379,aaantxkdlyarjuuzfc5qgicxxxxxxxxxxxvo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com master - 0 1740462307292 2 connected 5462-10922 ba2253bcdb56f2e5227xxxxxxxxxxx9672cb527eab 10.0.5.150:6379@16379,aaantxkdlyarjuuzfc5qgic3xdbxxxxxxxxxxxvo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com master - 0 1740462305276 0 connected 10923-16383 b59af7d22e86c5600xxxxxxxxxxxe17bf34ca5aab 10.0.61.100:6379@16379,aaantxkdlyarjuuzfc5qgicxxxxxxxxxxxa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com myself,master - 0 1740462305000 1 connected 0-5461
Podemos ver a Chave de Compartilhamento:
- Cluster-1 (1-1)
0-5461
- Cluster-2 (2-1)
5462-10922
- Cluster-3 (3-1)
5462-10922
- Cluster-1 (1-1)
Tarefa 4: Migrar Dados do On-Premises para o cluster do OCI usando o Utilitário Pyredis-dump
-
Instale o utilitário pyredis-dump no host jump/bastion.
$cd /redis/ $yum install git $git clone https://github.com/tkote/pyredis-dump.git $cd /redis/pyredis-dump $python -m pip install redis $python3 pyredis-dump.py -h
-
Verifique a conexão com o cluster Redis local do jump/bastion host.
[root@jump ~]# redis-cli -a pass123 -p 6379 -h 10.0.0.151 -c Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.0.0.151:6379> [root@jump ~]# redis-cli -a pass123 -p 6379 -h 10.0.0.164 -c Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.0.0.164:6379> [root@jump ~]# redis-cli -a pass123 -p 6379 -h 10.0.0.205 -c Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.0.0.205:6379>
-
Exportar dump do cluster de origem. Conecte-se a cada nó mestre Redis do jump host e crie um dump remoto. O dump será criado no jump host no local especificado.
-
Faça dump do mestre Node1.
# python3 pyredis-dump.py -H 10.0.0.151 dump -o /redis/dump/rdump1 -w pass123 dumping to '/redis/dump/rdump1' connecting to {'db': 0, 'host': '10.0.0.151', 'port': 6379, 'ssl': None, 'password': 'pass123'} 1 keys, bulk_size: 1000, watch_keys: False dumped 1 records elapsed time: 0.399 seconds
-
Faça dump do mestre Node2.
# python3 pyredis-dump.py -H 10.0.0.164 dump -o /redis/dump/rdump2 -w pass123 dumping to '/redis/dump/rdump2' connecting to {'db': 0, 'host': '10.0.0.164', 'port': 6379, 'ssl': None, 'password': 'pass123'} 1 keys, bulk_size: 1000, watch_keys: False dumped 1 records elapsed time: 0.004 seconds
-
Faça dump do mestre Node3.
# python3 pyredis-dump.py -H 10.0.0.205 dump -o /redis/dump/rdump3 -w pass123 dumping to '/redis/dump/rdump3' connecting to {'db': 0, 'host': '10.0.0.205', 'port': 6379, 'ssl': None, 'password': 'pass123'} 1 keys, bulk_size: 1000, watch_keys: False dumped 1 records elapsed time: 0.006 seconds
-
-
Antes de importar dados, limpe o cluster de destino no OCI Cache e certifique-se de que não haja dados em nenhum dos nós do cluster.
OCI Cluster Node1 # redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjxxxxxxxxxxxaj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com --tls > flushall OK OCI Cluster Node2 # redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjxxxxxxxxxxxj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com --tls > flushall OK OCI Cluster Node3 # redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjkxxxxxxxxxxx6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com --tls > flushall OK
-
Importar dump para o cluster de destino no OCI Cache. Conecte-se a cada cluster do OCI e importe o dump para o respectivo cluster com base na Chave de shard da origem e do destino. O dump de exportação do mestre Node1 que tem
shard key 0-5460
deve ser importado para o mestre node1 do cluster de destino, respectivamente.Precisamos importar o dump nas etapas a seguir; caso contrário, ele falhará.
-
Importar dump de Node1 para o OCI Cluster1-1.
# python3 pyredis-dump.py -S -H aaantxkdlyarjuuzfxxxxxxxxxxxk5bfeaa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com restore -i /redis/dump/rdump1 restore from '/redis/dump/rdump1' connecting to {'db': 0, 'host': 'aaantxkdlyarjuuzfcxxxxxxxxxxxkjk5bfeaa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com', 'port': 6379, 'ssl': True} restored 1 records elapsed time: 0.023 seconds
-
Importar dump de Node2 para o OCI Cluster2-1.
# python3 pyredis-dump.py -S -H aaantxkdlyarjuuzfc5xxxxxxxxxxxfeaa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com restore -i /redis/dump/rdump2 restore from '/redis/dump/rdump2' connecting to {'db': 0, 'host': 'aaantxkdlyarjuuzfc5xxxxxxxxxxxk5bfeaa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com', 'port': 6379, 'ssl': True} restored 1 records elapsed time: 0.024 seconds
-
Importar dump de Node3 para o OCI Cluster3-1.
# python3 pyredis-dump.py -S -H aaantxkdlyarjuuzfc5qgixxxxxxxxxxxfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com restore -i /redis/dump/rdump3 restore from '/redis/dump/rdump3' connecting to {'db': 0, 'host': 'aaantxkdlyarjuuzfc5xxxxxxxxxxx5bfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com', 'port': 6379, 'ssl': True} restored 1 records elapsed time: 0.030 seconds [root@instance-20250223-1032 pyredis-dump]#
-
-
Validar dados no OCI. Depois que os dados forem importados com sucesso em cada nó do cluster, conecte-se a qualquer nó do cluster do OCI e verifique os dados.
Connect Cluster Node1 $redis-cli -h aaantxkdlyarjuuzfc5qgic3xdbckjk5bfxxxxxxxxxxx65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com --tls -c 6379> get name -> Redirected to slot [5798] located at aaantxkdlyarjxxxxxxxxxxx3xdbckjk5bfeaa5vo6aj65pokndqtnwa-2-1.redis.us-ashburn-1.oci.oraclecloud.com:6379 "Dharmesh" 6379> get age -> Redirected to slot [741] located at aaantxkdlyarjuuxxxxxxxxxxxbckjk5bfeaa5vo6aj65pokndqtnwa-1-1.redis.us-ashburn-1.oci.oraclecloud.com:6379 "40" 6379> get gender -> Redirected to slot [15355] located at aaantxkdlyarjxxxxxxxxxxxxxdbckjk5bfeaa5vo6aj65pokndqtnwa-3-1.redis.us-ashburn-1.oci.oraclecloud.com:6379 "M" 6379>
Links Relacionados
Confirmações
- Autor - Dharmesh Patel (Arquiteto de Nuvem Principal, Oracle North America Cloud Services - NACIE)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Migrate Redis Cluster to Oracle Cloud Infrastructure Cache
G33022-02
Copyright ©2025, Oracle and/or its affiliates.