Como começar rapidamente com VUE3.0: Vamos aprender
como usar a função redis
cluster em nodejs
. Não encontrei um artigo relativamente completo e fácil de entender, então também fiz muitos desvios durante o desenvolvimento e depuração. processo.
Este artigo irá apresentar em detalhes como construir um cluster Redis localmente, como usar o cluster no cliente e resumir e explicar os problemas e erros encontrados durante o processo de construção para evitar desvios na próxima vez e melhorar o desenvolvimento e a eficiência do trabalho.
O pano de fundo do uso do cluster é: no modo Redis singleton, com o aumento no número de usuários e visitas, o valor qps aumenta acentuadamente ??, um grande número de operações io
faz com que cpu(100%)
em um determinado momento, e pode haver tempo de inatividade a qualquer momento. Ao mesmo tempo, o processamento em lote de redis e outros métodos tratam apenas os sintomas, mas não a causa raiz, e não podem romper o gargalo do desempenho do servidor . Portanto, é imperativo usar uma solução de cluster ou adicionar instâncias Redis.
cluster geralmente se refere a um cluster de servidores, que é diferente de um sistema distribuído. Ele reúne muitos servidores para executar o mesmo serviço. Um cluster pode usar vários computadores para computação paralela para atingir alta velocidade de computação. Ele também pode usar vários computadores para backup, de modo que, se alguma máquina quebrar, todo o sistema ainda poderá funcionar normalmente. ( Antes do redis3.0, o modo sentinela era geralmente usado, mas a configuração do sentinela é um pouco complicada e o desempenho e a alta disponibilidade são médios .)
que, devido ao mecanismo de tolerância a falhas de votação, mais da metade dos os nós acreditam que um determinado nó falhou. O nó está inativo, portanto, 2 nós não podem formar um cluster, portanto, o cluster Redis requer pelo menos 3 nós.
Para garantir a alta disponibilidade do cluster, cada nó precisa ter um nó escravo (ou seja, um nó de backup), portanto Redis
requer pelo menos 6 servidores. (Três mestres e três escravos, três depósitos e três recuperações, alta disponibilidade e backup)
Claro, é impossível usarmos tantos servidores ao depurar localmente, então podemos simular a execução de 6 instâncias redis
localmente. Cluster Redis no ambiente de produção A construção é basicamente a mesma que aqui.
Você pode optar por instalá-lo no site oficial ou pode instalá-lo com a linha nomeada
#install brew install redis. #Iniciar servidor redis #Insira o cliente redis redis-cli
você deve primeiro encontrar o local do arquivo de configuração do redis
brew list redis
# Verifique o local docd /opt/homebrew/Cellar/redis/6.2.4
# Insira a versão de acordo com a localização A pasta onde o número está localizadoopen .
# Abra a pastaXcode.app
para abrir homebrew.mxcl.redis.plist
para encontrar a localização de redis.conf
, conforme mostrado. abaixo:Crie seis arquivos de configuração de serviço
cd /opt/homebrew/etc/
(o diretório do arquivo de configuração encontrado na etapa anterior)
# Precisa estar no caminho /opt/homebrew/etc/ mkdir -p redis/cluster/7000 mkdir -p redis/cluster/7001 mkdir -p redis/cluster/7002 mkdir -p redis/cluster/7003 mkdir -p redis/cluster/7004 mkdir -p redis/cluster/7005
Modifique o arquivo de configuração
O arquivo de configuração no caminho /opt/homebrew/etc/redis.conf
não precisa ser modificado. Basta copiá-lo para o diretório redis/cluster/7000
criado acima e depois. modifique-o. As etapas são as seguintes:
cd /opt/homebrew/etc/ # Insira o diretório do arquivo de configuração cp redis.conf redis/cluster/7000/7000.conf. código redis/cluster/7000/7000.conf # Abra o arquivo de configuração com um editor ou vim para modificá-lo.
7000.conf
, modifique as seguintes propriedades# Número da porta Redis (cada arquivo de configuração 7000-7005 deve ser modificado) porta 7000 # Habilite o modo cluster e execute habilitado para cluster sim # Caminho do arquivo de configuração do arquivo de configuração interno do cluster, padrão nodes-6379.conf (cada arquivo de configuração 7000-7005 deve ser modificado) arquivo de configuração cluster nodes-7000.conf # Tempo limite de comunicação entre nós cluster-node-timeout 5000 # Persistência de dados anexado apenas sim
cd de serviço redis /opt/homebrew/etc/redis/cluster # Insira o diretório do arquivo de configuração cp 7000/7000.conf 7001/7001.conf cp 7000/7000.conf 7002/7002.conf cp 7000/7000.conf 7003/7003.conf cp 7000/7000.conf 7004/7004.conf cp 7000/7000.conf 7005/7005.conf
7001.conf-7005.conf
Nota: Cada arquivo de configuração deve configurar port和cluster-config-file
diferentes. valor port和cluster-config-file
(caso contrário, o cluster não terá efeito), que é diferenciado pela porta.
O diretório do arquivo de configuração pode ser encontrado através do comando find /opt/homebrew -name nodes-7000.conf
.
Como configuramos 6 serviços, é impossível iniciá-los ou interrompê-los um por um. Você precisa usar um script de shell para
entrar no diretório /opt/homebrew/etc/redis/cluster
e criar. start.sh e pare. arquivo .sh
# arquivo start.sh#!/bin/sh servidor redis /opt/homebrew/etc/redis/cluster/7000/7000.conf & servidor redis /opt/homebrew/etc/redis/cluster/7001/7001.conf & servidor redis /opt/homebrew/etc/redis/cluster/7002/7002.conf & servidor redis /opt/homebrew/etc/redis/cluster/7003/7003.conf & servidor redis /opt/homebrew/etc/redis/cluster/7004/7004.conf & servidor redis /opt/homebrew/etc/redis/cluster/7005/7005.conf & # arquivo stop.sh #!/bin/sh redis-cli -p 7000 desligamento e redis-cli -p 7001 desligamento e redis-cli -p 7002 desligamento e redis-cli -p 7003 desligamento e redis-cli -p 7004 desligamento e redis-cli -p 7005 shutdown &
execute ./start.sh
ou ./stop.sh
para iniciar e parar o serviço.
Execute ps -ef |grep redis
para visualizar o serviço redis iniciado.
Nota: É necessário executar ./. start.sh pela primeira vez. Autorize as permissões de execução por meio de sudo chmod +x start.sh
redis-cli -p 7000 # Inicia um único cliente redis-server 7000/7000.conf # Inicia um único servidor redis-cli -p 7000 shutdown # Desliga o servidor sudo chmod +x start.sh # Habilita a permissão de execução do script # Define o relacionamento mestre-escravo redis (três mestres e três escravos) redis-cli --cluster criar --cluster-réplicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 nós do cluster #Ver o status do nó do cluster (insira um cliente para executar) informações do cluster #Ver informações do cluster (insira um cliente para executar) Ver todos os valores-chave: chaves * Exclua o valor no índice especificado: del key Limpe os dados de todo o servidor Redis: flushall Limpe todas as chaves na biblioteca atual: o
Redis.Cluster fornece a função de fragmentação automática em vários nós Redis. Use os seis servidores redis construídos anteriormente e, em seguida, inicie node redis.js
, você pode testar o efeito do cluster. ioredis
//redis.js const Redis = requer("ioredis"); cluster const = novo Redis.Cluster([ { porta: 7000, anfitrião: "127.0.0.1", }, { porta: 7001, anfitrião: "127.0.0.1", }, ]); cluster.set("foo", "barra"); cluster.get("foo", (err, res) => { //res === 'barra' });
para importar a fila de 'touro' // Cria uma instância de fila redis const instance = new Queue('custom', { prefixo: '{meuprefixo}', criarCliente(tipo) { // cluster cluster instance é igual ao cluster de retorno acima } }) //Adiciona dados à fila redis (produtor) instância.add( 'solicitar', { ... parâmetros }, { removeOnComplete: falso } .catch(e => { console.error(e) }) // Retorno de chamada do consumidor instance.process('request', 5, async (job, done) => { console.log('Obter dados consumidos atualmente:', job.data) //Executa operação assíncrona await new Promise((resolve)=>resolve()) feito() })
Há um problema ao usar a estrutura bull
para se conectar ao cluster ioredis
: toda vez que os dados push
para a fila redis
, a função de retorno de chamada correspondente pode ser acionada várias vezes. o uso ou algum problema com o próprio framework (se souber mais, seja bem-vindo a todos. Deixe uma mensagem para informar).
Alternativa ao cluster: se a sincronização e migração de dados não forem necessárias, várias instâncias redis
podem ser usadas no cliente, combinadas com Math.random()
para dividir os dados igualmente em um dos redis
, resolvendo assim o problema de hardware de instância única ( cpu
etc.) problema de gargalo.
1. Ocorre um erro ao conectar ao redis no sistema Mac?
Mensagem de erro do console: Não foi possível conectar-se ao Redis em 127.0.0.1:6379: Conexão recusada
Motivo: O servidor não foi iniciado ou falha ao iniciar
Solução: Você precisa iniciar o servidor redis primeiro
link de referência
do servidor redishttps://blog. csdn.net/qq_23347459/article/details/104257529
2. Ao iniciar o cliente, ele reporta um erro ao ler ou escrever?
Mensagem de erro: ClusterAllFailedError: Falha ao atualizar o cache de slots
Motivo: os atributos do arquivo de configuração de cluster nos arquivos de configuração em cada serviço são consistentes.
Processamento: Modificar para valor de atributo exclusivo
Link de referência 1
https://stackoverflow.com/questions/57350961/ioredis-clusterallfailederror-failed-to-refresh-slots-cache
Referência 2
https://github.com/luin/ioredis/ Issues /711
3. Falha ao executar a instrução create master-slave redis?
Instrução de execução: redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
Erro de prompt: [ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
: Ao executar a instrução create, os dados não são limpos e o cluster não é redefinido. .
Processamento: Limpar os dados E redefinir o cluster, limpar os arquivos rdb e aof,
consulte limpar os dados do redis
https://stackoverflow.com/questions/37206993/redis-server-cluster-not-working
# Pegue o serviço da porta 7000. como exemplo, repita as seguintes operações para 7001-7005 $redis-cli -p 7000 127.0.0.1:7000> flushall 127.0.0.1:7000> redefinição de cluster 127.0.0.1:7000>sair # Use find para encontrar os arquivos rdb e aof (também no diretório rdb) encontre /opt/homebrew -name dump.rdb # Execute novamente a instrução de criação com sucesso redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1: 7005
O uso do cluster redis no cliente é muito simples, em comparação, a configuração no servidor será mais complicada.
O uso específico do cliente é explicado apenas brevemente. Durante o uso, deve-se prestar atenção a questões como sincronização e migração de dados Redis.
Embora o uso de um cluster possa melhorar os recursos de serviço, suporte à replicação mestre-escravo, modo sentinela, separação leitura-gravação e distribuição uniforme da pressão no servidor, etc. No entanto, ele não possui funções automáticas de tolerância a falhas e recuperação. Se ocorrer um tempo de inatividade, algumas solicitações de leitura e gravação falharão, reduzindo a disponibilidade do sistema. Ao utilizar, analise e escolha diferentes soluções com base nas condições do negócio.
Este artigo foi reproduzido de: https://juejin.cn/post/7079928963107127327
Autor: tager