Construção do cluster Redis e erro MOVED

Por que criar um cluster Redis

Como um único nó pode falhar
, ele travará ao processar um grande número de solicitações simultâneas.
Se um único nó estiver inativo, os dados são facilmente perdidos

Então, para criar um cluster redis
Insira a descrição da imagem aqui

Redis tem três modos de cluster

Modo mestre-escravo

  • O banco de dados mestre pode realizar operações de leitura e gravação. Quando as operações de leitura e gravação causam alterações de dados, os dados serão sincronizados automaticamente com o banco de dados escravo
  • O banco de dados escravo geralmente é somente leitura e recebe dados sincronizados do banco de dados mestre
  • Um mestre pode ter vários escravos, mas um escravo só pode corresponder a um mestre
  • O escravo desliga e não afeta a leitura e escrita dos demais escravos e do mestre.Após a reinicialização, os dados serão sincronizados do mestre.
  • Depois que o mestre trava, ele não afeta a leitura do escravo, mas o redis não fornece mais serviços de gravação. Depois que o mestre for reiniciado, o redis fornecerá serviços de gravação externos novamente
  • Depois que o mestre desligar, ele não irá selecionar novamente um mestre no nó escravo

Modo sentinela

  • O modo sentinela é baseado no modo mestre-escravo. Se houver apenas um nó Redis, sentinela não tem significado
  • Quando o mestre desligar, o sentinela irá selecionar um dos escravos como mestre e modificar seus arquivos de configuração.Os arquivos de configuração de outros escravos também serão modificados.Por exemplo, o atributo escravo irá apontar para o novo mestre.
  • Quando o mestre for reiniciado, ele não será mais o mestre, mas sim um escravo para receber os dados de sincronização da
    sentinela do novo mestre. Como também é um processo que pode travar, a sentinela também iniciará múltiplos para formar um agrupamento sentinela
  • Quando várias sentinelas são configuradas, as sentinelas também são monitoradas automaticamente
  • Quando a senha é configurada no modo mestre-escravo, o sentinela também modifica de forma síncrona as informações de configuração no arquivo de configuração, então você não precisa se preocupar com isso.
    Um grupo de sentinela ou sentinela pode gerenciar vários Redis mestre-escravo, e várias sentinelas também podem monitorar o mesmo redis.
  • O Sentinel é melhor não ser implantado na mesma máquina do Redis, caso contrário, depois que o servidor Redis travar, o sentinela também travará

Modo de cluster

  • Interconexão de rede de vários nós de redis e compartilhamento de dados
  • Todos os nós são um mestre e um escravo (ou um mestre e vários escravos), que nunca fornecem serviços, apenas servem como backup
  • Não suporta o processamento de várias chaves ao mesmo tempo (como MSET / MGET), porque o redis precisa distribuir uniformemente as chaves em cada nó
  • Criar valores-chave ao mesmo tempo com alta simultaneidade reduzirá o desempenho e causará comportamento imprevisível
  • Suporta adição e exclusão online de nós
  • O cliente pode se conectar a qualquer nó mestre para leitura e gravação

Fragmentação de dados de cluster

  • Não introduziu HASH consistente, mas introduziu o conceito de slot de hash (slot de hash)
  • 16384 slots de hash por cluster
  • Depois que cada chave é verificada pelo CRC16, o slot hash é usado para determinar o slot
  • Cada nó do cluster é responsável por uma parte do slot hash

pode vir! Mostrar! !

Estamos usando o modo de cluster

  1. O modo sentinela pode atender basicamente às necessidades de produção geral e possui alta disponibilidade. Mas quando a quantidade de dados é muito grande para um servidor armazenar, o modo mestre-escravo ou modo sentinela não pode atender à demanda. Nesse momento, os dados armazenados precisam ser fragmentados e armazenados em várias instâncias do Redis. O surgimento do modo cluster é para resolver o problema da capacidade limitada de um único Redis, e os dados do Redis são distribuídos para várias máquinas de acordo com certas regras.
  2. Pode-se dizer que o cluster é uma combinação dos modos sentinela e mestre-escravo. A função mestre-escravo e de resseleção mestre pode ser realizada por meio do cluster, portanto, se você configurar duas cópias e três fragmentos, precisará de seis instâncias do Redis. Como os dados do Redis são alocados para máquinas diferentes no cluster de acordo com certas regras, quando a quantidade de dados é muito grande, novas máquinas podem ser adicionadas para expansão.
  3. Para usar um cluster, você só precisa abrir a configuração habilitada para cluster no arquivo de configuração do redis. Cada cluster requer pelo menos três bancos de dados principais para funcionar normalmente e é muito conveniente adicionar nós.

Parâmetros experimentais

O IP dos seis servidores é
20.0.0.11
20.0.0.12
20.0.0.21
20.0.0.22
20.0.0.23
20.0.0.24

Configuração experimental

Todos os seis hosts precisam instalar o redis

[root@localhost ~]# yum -y install gcc gcc-c++ make
[root@localhost ~]# mkdir /bao
[root@localhost ~]# cd /bao
[root@localhost bao]# rz -E
rz waiting to receive.
[root@localhost bao]# tar zxvf redis-5.0.7.tar.gz 
[root@localhost bao]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make install PREFIX=/usr/local/redis
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin

Modifique o arquivo de configuração

[root@localhost utils]# vim /etc/redis/6379.conf
70 #bind 127.0.0.1	##注释掉监听地址
89 protected-mode no	##关闭保护模式
93 port 6379	##端口还是6379
137 daemonize yes	##独立启动进程
700 appendonly yes	##开启aof持久化
833 cluster-enabled yes	##开启群集功能,取消注释
841 cluster-config-file nodes-6379.conf	##群集文件名称,取消注释
847 cluster-node-timeout 15000	##群集超时时间设置,取消注释
[root@localhost utils]# vim /etc/redis/6379.conf 
[root@localhost utils]# cd /var/lib/redis/6379/
[root@localhost 6379]# service redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost 6379]# ls
appendonly.aof  dump.rdb  nodes-6379.conf

Instale o rvm e o RUBY em um servidor principal

[root@localhost 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3	##密钥文件导入
[root@localhost 6379]# cd /bao/
[root@localhost bao]# rz -E
rz waiting to receive.
[root@localhost bao]# ls
redis-5.0.7  redis-5.0.7.tar.gz  rvm-installer.sh
[root@localhost bao]# chmod +x rvm-installer.sh 
[root@localhost bao]# ./rvm-installer.sh		##这个下的太慢了,我直接拿的下好的
[root@localhost bao]# ./rvm-installer.sh
[root@localhost bao]# source /etc/profile.d/rvm.sh
[root@localhost bao]# rvm list known		##列出可安装版本
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.10]
[ruby-]2.5[.8]
[ruby-]2.6[.6]
[ruby-]2.7[.1]
ruby-head

# for forks use: rvm install ruby-head-<name> --url https://github.com/github/ruby.git --branch 2.2

# JRuby
jruby-1.6[.8]
jruby-1.7[.27]
jruby-9.1[.17.0]
jruby[-9.2.13.0]
jruby-head

# Rubinius
rbx-1[.4.3]
rbx-2.3[.0]
rbx-2.4[.1]
rbx-2[.5.8]
rbx-3[.107]
rbx-4[.20]
rbx-5[.0]
rbx-head

# TruffleRuby
truffleruby[-20.2.0]

# Opal
opal

# Minimalistic ruby implementation - ISO 30170:2012
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
mruby-1.3.0
mruby-1[.4.1]
mruby-2.0.1
mruby-2[.1.1]
mruby[-head]

# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]

# Topaz
topaz

# MagLev
maglev-1.0.0
maglev-1.1[RC1]
maglev[-1.2Alpha4]
maglev-head

# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head

# IronRuby
ironruby[-1.1.3]
ironruby-head

[root@localhost bao]# rvm install 2.4.1		##安装 2.4.1版本
[root@localhost bao]# ruby -v	##查看版本信息
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
[root@localhost bao]#  gem install redis	##再次安装 redis

Configure o cluster no servidor mestre.
Aqui você pode ver os nós mestre e escravo.

[root@localhost network-scripts]# redis-cli --cluster create 20.0.0.11:6379 20.0.0.12:6379 20.0.0.21:6379 20.0.0.22:6379 20.0.0.23:6379 20.0.0.24:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 20.0.0.23:6379 to 20.0.0.11:6379
Adding replica 20.0.0.24:6379 to 20.0.0.12:6379
Adding replica 20.0.0.22:6379 to 20.0.0.21:6379
M: 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff 20.0.0.11:6379
   slots:[0-5460] (5461 slots) master
M: da81b568b82ec8d2e65967a4c3ed6550aa59b42d 20.0.0.12:6379
   slots:[5461-10922] (5462 slots) master
M: 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff 20.0.0.21:6379
   slots:[10923-16383] (5461 slots) master
S: 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff 20.0.0.22:6379
   replicates 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff
S: da81b568b82ec8d2e65967a4c3ed6550aa59b42d 20.0.0.23:6379
   replicates 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff
S: da81b568b82ec8d2e65967a4c3ed6550aa59b42d 20.0.0.24:6379
   replicates da81b568b82ec8d2e65967a4c3ed6550aa59b42d
Can I set the above configuration? (type 'yes' to accept): yes		##手敲yes

Verificação experimental

Iniciar verificação

[root@localhost network-scripts]# redis-cli -h 20.0.0.11 -p 6379 -c
20.0.0.11:6379> set gundam EXIA
OK
20.0.0.11:6379> keys *
1) "gundam"


[root@localhost network-scripts]# redis-cli -h 20.0.0.23 -p 6379 -c	##另一台机器,验证“主从”
20.0.0.23:6379> keys *
1) "gundam"
20.0.0.23:6379> get gundam
"EXIA"

Verificar exclusão automática

[root@localhost network-scripts]# redis-cli -h 20.0.0.11 -p 6379 -c
20.0.0.11:6379> EXPIRE gundam 5		##五秒后删除这个键
(integer) 1
##五秒后
20.0.0.11:6379> keys *
(empty list or set)

##另一台机器
20.0.0.23:6379> keys *	##另一台机器也没了
(empty list or set)

Erro MOVIDO

Se este erro ocorrer ao criar a chave, saia e adicione a opção -c ao inserir, -c significa iniciar o modo de cluster
(erro) MOVED 5798 127.0.0.1:7001

redis-cli -h 20.0.0.12 -p 6379 -c

Nota: Se um mestre estiver inativo, o escravo correspondente se tornará o mestre sobre os dois e o serviço será usado normalmente. Se o mestre e o escravo correspondentes forem desativados, seu cluster desaparecerá ...

Acho que você gosta

Origin blog.csdn.net/Ora_G/article/details/108490235
Recomendado
Clasificación