DIA 72 redis replicação mestre-escravo de alta disponibilidade, sentinela, cluster de cluster

Alta disponibilidade do Redis

O que é alta disponibilidade

Em servidores web, alta disponibilidade refere-se ao tempo em que o servidor pode ser acessado normalmente, e a medida é por quanto tempo os serviços normais podem ser fornecidos (99,9%, 99,99%, 99,999%, etc.).

No entanto, no contexto do Redis, o significado de alta disponibilidade parece ser mais amplo. Além de garantir o fornecimento de serviços normais (como separação mestre-escravo, tecnologia de recuperação rápida de desastres), também é preciso considerar a expansão de capacidade de dados e segurança de dados sem perda, etc.

Tecnologia de alta disponibilidade do Redis

No Redis, as tecnologias para alcançar alta disponibilidade incluem principalmente persistência, replicação mestre-escravo, sentry e clusters de cluster. A seguir, descrevemos suas funções e quais problemas eles resolvem.

  • Persistência: A persistência é o método de alta disponibilidade mais simples (às vezes nem classificado como método de alta disponibilidade) Sua principal função é o backup de dados, ou seja, armazenar dados no disco rígido para garantir que os dados não sejam perdidos devido ao processo saída.

  • Replicação mestre-escravo: a replicação mestre-escravo é a base do Redis altamente disponível. Sentinelas e clusters são baseados na replicação mestre-escravo para obter alta disponibilidade. A replicação mestre-escravo realiza principalmente backup (e sincronização) de dados em várias máquinas, bem como balanceamento de carga e recuperação de falhas simples para operações de leitura.

    • Defeitos: A recuperação de falhas não pode ser automatizada; as operações de gravação não podem ter balanceamento de carga; a capacidade de armazenamento é limitada por uma única máquina.
  • Sentinel: Com base na replicação mestre-escravo, o Sentinel implementa a recuperação automática de falhas. (O mestre está inoperante, encontre um escravo para se tornar o novo mestre e o nodo sentinela irá monitorá-lo)

    • Defeitos: As operações de gravação não podem ter balanceamento de carga; a capacidade de armazenamento é limitada por uma única máquina.
  • Cluster de cluster: por meio do clustering, o Redis resolve o problema de que as operações de gravação não podem ter balanceamento de carga e a capacidade de armazenamento é limitada por uma única máquina e realiza uma solução de alta disponibilidade relativamente completa. (6 conjuntos iniciam, em pares, 3 mestres e 3 escravos)

Replicação mestre-escravo do Redis

A replicação mestre-escravo refere-se à cópia dos dados de um servidor Redis para outros servidores Redis. O primeiro é chamado de nó mestre (mestre) e o último é chamado de nó escravo (escravo); a replicação de dados é unidirecional, apenas do nó mestre para o nó escravo.

Por padrão, cada servidor Redis é um nó mestre; e um nó mestre pode ter vários nós escravos (ou nenhum nó escravo), mas um nó escravo só pode ter um nó mestre

O papel da replicação mestre-escravo

  • Redundância de dados: a replicação mestre-escravo implementa backup dinâmico de dados, que é um método de redundância de dados diferente da persistência.
  • Recuperação de falhas: Quando há um problema com o nó mestre, o nó escravo pode fornecer serviços para obter uma rápida recuperação de falhas; na verdade, é um tipo de redundância de serviço.
  • Balanceamento de carga: com base na replicação mestre-escravo, combinada com separação de leitura e gravação, o nó mestre pode fornecer serviços de gravação e os nós escravos podem fornecer serviços de leitura (ou seja, o aplicativo se conecta ao nó mestre ao gravar dados Redis , e o aplicativo se conecta ao nó escravo ao ler dados do Redis) para compartilhar a carga do servidor; especialmente no cenário de escrever menos e ler mais, compartilhar a carga de leitura por meio de vários nós escravos pode aumentar muito a simultaneidade do servidor Redis.
  • A pedra angular da alta disponibilidade: além das funções acima, a replicação mestre-escravo também é a base para a implementação de sentinelas e clusters, portanto, a replicação mestre-escravo é a base para alta disponibilidade do Redis

 Processo de replicação mestre-escravo

(1) Se um processo de máquina escrava for iniciado, ele enviará um comando de sincronização para a máquina mestre para solicitar uma conexão síncrona.

(2) Quer seja a primeira conexão ou reconexão, a máquina mestre iniciará um processo em segundo plano para salvar o instantâneo de dados no arquivo de dados (executar operação rdb) e o mestre também registrará todos os comandos para modificar os dados e o cache no meio do arquivo de dados.

(3) Depois que o processo em segundo plano concluir a operação de cache, a máquina mestre enviará o arquivo de dados para a máquina escrava, a máquina escrava salvará o arquivo de dados no disco rígido e, em seguida, carregará na memória e, em seguida, o mestre máquina modificará todos os arquivos de dados A operação também é enviada para a máquina escrava. Se o escravo falhar e causar um tempo de inatividade, ele se reconectará automaticamente após retornar ao normal.

(4) Após a máquina mestre receber a conexão da máquina escrava, ela envia seu arquivo de dados completo para a máquina escrava. Se o mestre receber solicitações de sincronização de vários escravos ao mesmo tempo, o mestre iniciará um processo em segundo plano para salve o arquivo de dados e, em seguida, envie-o para todas as máquinas escravas, certifique-se de que todas as máquinas escravas estejam normais.

Criar replicação mestre-escravo do Redis

master 192.168.137.10
slave1 192.168.137.15
slave2 192.168.137.20

4.1 Todos os servidores criam banco de dados redis

关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
 
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
 
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
 
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status	
			
#重启redis服务
/etc/init.d/redis_6379 restart

Desligue o firewall e baixe o ambiente dependente

 Descompacte o pacote e compile

 Instalar no diretório especificado

 Execute o arquivo de script fornecido pelo pacote

 Quando isso acontecer, digite vim ./install_server.sh 

 

 fazer link suave

 Inicie o serviço redis e verifique

 4.2 Modifique o arquivo de configuração do Redis (operação do nó mestre)

vim /etc/redis/6379.conf
bind 0.0.0.0      #70行,修改监听地址为0.0.0.0
daemontze yes     #137行,开启守护进程
logfile/var/log/redis_6379.1og   #172行,指定日志文件目录
dir/var/lib/redis/6379           #264行,指定工作目录
appendonly yes                   #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart

 

 4.3 Modifique o arquivo de configuração do Redis (operação do nó escravo)

vim /etc/redis/6379.conf 
 
bind 0.0.0.0         #70行,修改监听地址为0.0.0.0
daemonize yes        #137行,开启守护进程
logfile/var/log/redis 6379.1og    #172行,指定日志文件目录
dir/var/lib/redis/6379            #264行,指定工作目录
replicaof 192.168.137.10 6379#288行,指定要同步的Master节点IP和端口
appendonly yes     #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 

 A configuração do nó escravo é semelhante à do nó mestre. Use o comando scp para transmissão remota e modifique-o

scp /etc/redis/6379.conf 192.168.137.15:/etc/redis
scp /etc/redis/6379.conf 192.168.137.20:/etc/redis

 Insira dois servidores escravos para modificar

vim /etc/redis/6379.conf 
replicaof 192.168.137.10 6379#288行,指定要同步的Master节点IP和端口
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 查看主从服务器是否连接

4.4 Verifique o efeito mestre-escravo

Exibir logs no nó mestre

tail /var/log/redis_6379.log
Replica 192.168.137.15:6379 asks for synchronization
Replica 192.168.137.20:6379 asks for synchronization

Verifique os nós escravos no nó mestre

redis-cli info replication

2. Modo sentinela do Redis

O método da tecnologia de comutação mestre-escravo é: quando o servidor está inativo, é necessário alternar manualmente uma máquina escrava para a máquina mestre, o que requer intervenção manual, que não só é demorada e trabalhosa, mas também causa o serviço ficar indisponível por um período de tempo. Para resolver as deficiências da replicação mestre-escravo, existe um mecanismo sentinela

Função principal do Sentinel: Com base na replicação mestre-escravo, o Sentinel apresenta failover automático do nó mestre.

1. O papel do modo sentinela

  • Monitoramento: O Sentry verifica constantemente se os nós mestre e escravo estão funcionando corretamente.
  • Failover automático: quando o nó mestre falha ao funcionar normalmente, o Sentinel iniciará uma operação de failover automático. Ele atualizará um dos nós escravos do nó mestre com falha para um novo nó mestre e permitirá que outros nós escravos copiem o novo nó mestre. .
  • Notificação (lembrete): o Sentinel pode enviar o resultado do failover para o cliente.

2. A estrutura sentinela consiste em duas partes, nós sentinela e nós de dados

  • Nó sentinela: o sistema sentinela consiste em um ou mais nós sentinelas. O nó sentinela é um nó redis especial que não armazena dados. O número de nós deve ser um número ímpar maior ou igual a 3.
  • Nós de dados: os nós mestre e escravo são nós de dados.

 

3. Mecanismo de failover

Monitoramento periódico pelo nó sentinela para descobrir se o nó mestre falhou

  • Cada nó sentinela enviará um comando ping para o nó mestre, nó escravo e outros nós sentinela a cada 1 segundo para detecção de pulsação. Se o nó mestre não responder dentro de um determinado período de tempo ou responder com uma mensagem de erro, a sentinela considerará o nó mestre offline subjetivamente (unilateralmente). Quando mais da metade dos nós sentinelas pensam que o nó mestre está offline subjetivamente, ele está offline objetivamente.
  • .Quando o nodo mestre falhar, o nodo sentinela implementará o mecanismo de eleição através do algoritmo Raft (algoritmo de eleição) para eleger em conjunto um nodo sentinela como o líder responsável pelo tratamento do failover e notificação do nodo mestre. Portanto, o número de clusters executando Sentinels não deve ser inferior a 3 nós.
  • O failover é realizado pelo nó sentinela líder, o processo é o seguinte:

    • Atualize um nó escravo para um novo nó mestre e deixe que outros nós escravos apontem para o novo nó mestre;
    • Se o nó mestre original se recuperar, ele se tornará um nó escravo e apontará para o novo nó mestre;
    • Notifique o cliente de que o nó primário foi substituído.


É importante observar que o objetivo off-line é um conceito exclusivo do nó mestre; se o nó escravo e o nó sentinela falharem, depois de serem subjetivamente off-line pelo sentinela, não haverá operações objetivas off-line e de failover subsequentes

4. Eleição do nó mestre

  • Filtre os nós escravos não íntegros (offline) que não respondem às respostas de ping do sentinela.
  • Selecione o nó escravo com a configuração de prioridade mais alta no arquivo de configuração. (prioridade de réplica, valor padrão é 100)
  • Selecione o nó escravo com o maior deslocamento de replicação, ou seja, a replicação mais completa.

O início da sentinela depende do modo mestre-escravo, portanto o modo mestre-escravo deve ser instalado antes de fazer o modo sentinela

5. Crie o modo sentinela redis

master 192.168.137.10
slave1 192.168.137.15
slave2 192.168.137.20
sentinel-1: 1992.168.137.30
sentinel-2: 1992.168.137.40
sentinel-3: 1992.168.137.50

5.1 Instalar o serviço redis em todos os servidores do Sentinel

关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
 
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
 
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
 
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status	
			
#重启redis服务
/etc/init.d/redis_6379 restart

5.2 mestre e escravo implantam a replicação mestre-escravo do Redis

Modifique o arquivo de configuração do nó mestre

vim /etc/redis/6379.conf
bind 0.0.0.0      #70行,修改监听地址为0.0.0.0
daemontze yes     #137行,开启守护进程
logfile/var/log/redis_6379.1og   #172行,指定日志文件目录
dir/var/lib/redis/6379           #264行,指定工作目录
appendonly yes                   #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart

 Modifique o arquivo de configuração do nó escravo

vim /etc/redis/6379.conf 
 
bind 0.0.0.0         #70行,修改监听地址为0.0.0.0
daemonize yes        #137行,开启守护进程
logfile/var/log/redis 6379.1og    #172行,指定日志文件目录
dir/var/lib/redis/6379            #264行,指定工作目录
replicaof 192.168.137.10 6379#288行,指定要同步的Master节点IP和端口
appendonly yes     #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 
​

5.3 Modifique o arquivo de configuração sentinel.conf do nó sentinela (todas as operações do nó sentinela)

Modifique o arquivo de configuração do nó sentinela 192.168.52.200 aqui e use o comando scp para passá-lo para os outros dois nós sentinela

vim /opt/redis-5.0.7/sentinel.conf
 
protected-mode no                  #17行,关闭保护模式
port 26379                         #21行,Redis哨兵默认的监听端口
daemonize yes                      #26行,指定sentine1为后台启动
logfile "/var/log/sentinel.log"     #36行,指定日志存放路径
dir "/var/lib/redis/6379"           #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.137.10 6379 2
#84行,修改指定该哨兵节点监控192.168.137.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 3000
#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000
#146行,同一个sentine1对同一个master两次failover之间的间隔时间(180秒)
 
#远程传续将配置文件传输给其他哨兵服务器
scp /opt/redis-5.0.7/sentinel.conf 192.168.137.30:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/sentinel.conf 192.168.137.40:/opt/redis-5.0.7/

5.4 Iniciar o modo sentinela

#所有哨兵服务器执行
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

5.5 Exibir mensagens sentinela no nó sentinela

redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.239.10:6379,slaves=2,sentinels=3
[1]+  完成                  redis-sentinel sentinel.conf

5.6 Simulação de falha

#在master节点查看redis-server进程号
ps -ef | grep redis
 
#杀死master节点redis-server进程
kill -9 21981

Verifique se o mestre foi transferido para o servidor escravo no nó sentinela

tail -f /var/log/sentinel.log

Verifique se a conversão foi bem-sucedida no Sentinel

redis-cli -p 26379 info sentinel

5.7 Recuperação de falhas

#主节点
rm -rf /var/run/redis_6379.pid  #删除pid文件如果pid文件不删除则服务起不来
/etc/init.d/redis_6379 start  #启动服务
netstat -natp |grep 6379  
#主服务器查看
redis-cli info replication

3. Modo de cluster Redis

Cluster, ou seja, cluster Redis, é uma solução de armazenamento distribuído introduzida pelo Redis3.0.

O cluster consiste em vários nós (Nodes) e os dados do Redis são distribuídos entre esses nós. Os nós do cluster são divididos em nós mestres e nós escravos: apenas o nó mestre é responsável pela manutenção das solicitações de leitura e gravação e informações do cluster; os nós escravos apenas replicam os dados e as informações de status do nó mestre

1. O papel do cluster pode ser resumido em dois pontos

(1) Particionamento de dados: O particionamento de dados (ou fragmentação de dados) é a função principal do cluster.
O cluster distribui dados para vários nós. Por um lado, ele ultrapassa o limite do tamanho da memória de máquina única do Redis e a capacidade de armazenamento é bastante aumentada; por outro lado, cada nó mestre pode fornecer serviços externos de leitura e gravação, o que melhora muito a capacidade de resposta do cluster.
O tamanho da memória autônoma do Redis é limitado, o que foi mencionado na introdução de persistência e replicação mestre-escravo; Como resultado, o nó escravo não pode fornecer serviços por muito tempo e o buffer de replicação do nó mestre pode estourar durante o fase de replicação completa.

(2) Alta disponibilidade: o cluster oferece suporte à replicação mestre-escravo e failover automático do nó mestre (semelhante ao Sentinel); quando qualquer nó falha, o cluster ainda pode fornecer serviços externos.
 

2. Fragmentação de dados do cluster Redis

  • O cluster Redis apresenta o conceito de slots de hash
  • O cluster Redis tem 16384 slots de hash (numerados de 0 a 16383)
  • Cada nó do cluster é responsável por uma parte dos hash slots
  • Depois que cada chave passar na verificação CRC16, pegue o restante de 16384 para determinar qual slot de hash colocar. Por meio desse valor, encontre o nó correspondente ao slot correspondente e, em seguida, salte direta e automaticamente para o nó correspondente para operações de acesso

Tome um cluster composto por 3 nós como exemplo

  • O nó A contém slots de hash de 0 a 5460

  • O nó B contém slots de hash 5461 a 10922

  • O nó c contém slots de hash 10923 a 16383

3. Crie o modo de cluster Redis

Um cluster redis geralmente requer 6 nós, 3 mestres e 3 escravos

tipo de servidor Sistema e endereço IP Componentes que precisam ser instalados
master1 192.168.137.10 redis-5.0.7.tar.gz
master2 192.168.137.15 redis-5.0.7.tar.gz
master3 192.168.137.20 redis-5.0.7.tar.gz
escravo1 192.168.137.30 redis-5.0.7.tar.gz
escravo2 192.168.137.40 redis-5.0.7.tar.gz
escravo3 192.168.137.50 redis-5.0.7.tar.gz

3.1 Inicializar o ambiente Instalar redis em cada host

关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
 
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
 
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
 
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status	
			
#重启redis服务
/etc/init.d/redis_6379 restart

3.2 Habilitar a função de cluster

Modifique qualquer arquivo de configuração do servidor

vim /opt/redis-5.0.7/redis.conf
 
bind 192.168.137.10                       #69行,注释掉bind项,改为自己
protected-mode no                         #88行,修改,关闭保护模式
port 6379                                 #92行redis默认监听端口,
daemonize yes                             #136行,开启守护进程,以独立进程启动
appendonly yes                            #700行,修改,开启AOF持久化
cluster-enabled yes                       #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf       #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000                #846行,取消注释群集超时时间设置
 
#远程传输完要修改监听地址为自己
scp /opt/redis-5.0.7/redis.conf 192.168.137.15:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.20:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.30:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.40:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.50:/opt/redis-5.0.7/

3.3 Inicie o nó redis

Todos os nós são executados

cd /opt/redis-5.0.7/
redis-server redis.conf   #启动redis节点

3.4 Iniciar o cluster

Qualquer nó começa

redis-cli --cluster create 192.168.137.10:6379 192.168.137.15:6379 192.168.137.20:6379 192.168.137.30:6379 192.168.137.40:6379 192.168.137.50:6379 --cluster-replicas 1
#六个示例分为三组,每组一主一从,前面的做主节点后面的做从节点下面交互的时候需要输入yes才可以创建 --replicas 1表示每个主节点有一个从节点

3.5 Cluster de teste

redis-cli -h 192.168.137.10 -p 6379 -c           #加-c参数,节点之间可以互相跳转
192.168.239.10:6379> cluster slots               #查看节点哈希槽编号范围
1) 1) (integer) 5461
   2) (integer) 10922                            #哈希槽编号范围
   3) 1) "192.168.137.10"  
      2) (integer) 6379                          #主节点ip和端口
      3) "093fd0ff72272a5b3c91b01fbcc106184971b818"
   4) 1) "192.168.137.40" 
      2) (integer) 6379                          #从节点ip和端口
      3) "97b3832b9be3df6455f3ba34269a92ee07bd46e3"
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "192.168.137.15"
      2) (integer) 6379
      3) "03523dfb1c9efd1da17f9380e94276c171ef2041"
   4) 1) "192.168.137.30"
      2) (integer) 6379
      3) "33bb54b95acfcb61960317f3eaaf19f74fd5cafa"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "192.168.137.20"
      2) (integer) 6379
      3) "a0515c00438a99c928e16bd0ec704013e74cc2e7"
   4) 1) "192.168.137.50"
      2) (integer) 6379
      3) "efbb3e371167be32d67462e496ba538ee94fad07"

Acho que você gosta

Origin blog.csdn.net/weixin_57560240/article/details/131040700
Recomendado
Clasificación