Replicação mestre-escravo Redis, modo sentinela, cluster

Um, replicação mestre-escravo Redis

1. Conceito de replicação mestre-escravo 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 é unilateral e só pode ser do nó mestre para o nó escravo.
Por padrão, cada servidor Redis é o 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.

2. A função da replicação mestre-escravo Redis

(1) Redundância de dados: a replicação mestre-escravo realiza backup dinâmico de dados, que é um método de redundância de dados além da persistência.

(2) Recuperação de falha: quando o nó mestre tem um problema, o nó escravo pode fornecer serviços para obter uma recuperação rápida de falha; na verdade, é uma espécie de redundância de serviço.

(3) Balanceamento de carga: Com base na replicação mestre-escravo, com a separação de leitura e gravação, o nó mestre pode fornecer o serviço de gravação e o nó escravo pode fornecer o serviço de leitura (ou seja, o aplicativo se conecta ao nó mestre ao gravar dados Redis, e o aplicativo se conecta ao ler dados Redis. Nós escravos) para compartilhar a carga do servidor; especialmente no cenário de escrever menos e ler mais, compartilhar a carga de leitura por vários nós escravos pode aumentar muito a simultaneidade de o servidor Redis.

(3) Pedra angular de 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 a alta disponibilidade do Redis.

3. O processo de replicação mestre-escravo

(1) Se um processo da máquina escrava for iniciado, ele enviará um comando de "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 (execute a operação rdb), e o mestre também gravará todos os comandos para modificar os dados e armazene-os em cache no arquivo de dados em.

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

(4) Depois que a máquina mestre recebe a conexão da máquina do lado escravo, ela envia seu arquivo de dados completo para a máquina do lado escravo. Se o Mater receber solicitações de sincronização de vários escravos ao mesmo tempo, o mestre iniciará um processo em segundo plano para salvar O arquivo de dados é então enviado a todas as máquinas escravas para garantir que todas as máquinas escravas estejam normais.

4. Construir replicação mestre-escravo Redis

(1) Configuração do ambiente

Hospedeiro sistema operacional IP Pacote de instalação
mestre cetos7 192.168.177.8 redis-5.0.7.tar.gz
escravo1 centos7 192.168.177.11 redis-5.0.7.tar.gz
escravo2 centos7 192.168.177.18 redis-5.0.7.tar.gz

(2) Instale o redis

systemctl stop firewalld
setenforce 0

yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz -C /opt/

cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install

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/

(3) Modificar o arquivo de configuração redis do nó mestre

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改bind 项,0.0.0.0监听所有网段
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

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

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改bind 项,0.0.0.0监听所有网卡
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
replicaof 192.168.177.8 6379		#288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

(5) Verifique o efeito mestre-escravo

a. Observe o log no nó mestre

tail -f /var/log/redis_6379.log 

Insira a descrição da imagem aqui
b. Verifique o nó escravo no nó mestre

redis-cli info replication

Insira a descrição da imagem aqui

Dois, modo sentinela Redis

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

1. O princípio do modo sentinela

É um sistema distribuído utilizado para monitorar cada servidor da estrutura mestre-escravo, quando ocorre uma falha, um novo mestre é selecionado por meio de um mecanismo de votação e todos os escravos são conectados ao novo mestre. Portanto, o número de todo o cluster executando sentinelas não deve ser inferior a 3 nós.

2. O papel do modo sentinela

(1) Monitoramento: O sentinela verificará constantemente se o nó mestre e o nó escravo estão operando normalmente.

(2) Failover automático: quando o nó mestre não funciona normalmente, o sentinela inicia uma operação de failover automático. Ele atualiza um dos nós escravos do nó mestre com falha para o novo nó mestre e permite que outros nós escravos copiem o novo um nó mestre.

(3) Notificação (lembrete): O sentinela pode enviar o resultado do failover para o cliente.

3. A estrutura do modo sentinela

(1) Nódulo sentinela: O sistema sentinela consiste em um ou mais nódulos sentinela.O nó sentinela é um nó redis especial e não armazena dados.
(2) Nó de dados: Tanto o nó mestre quanto o nó escravo são nós de dados.
O início da sentinela depende do modo mestre-escravo, então você deve instalar o modo mestre-escravo antes de fazer o modo sentinela. Todos os nós precisam implantar o modo sentinela. O modo sentinela monitorará se todos os nós de trabalho do Redis estão normais. Quando o Mestre aparece Quando há um problema, porque outros nós perderam contato com o nó mestre, eles votarão. Mais da metade dos votos é considerado que há um problema com este Mestre, e então a sala de sentinela será notificada , e então um dos Slaves será selecionado como o novo Master.

4. Construir Modo Sentinela

(1) Configuração do ambiente

Hospedeiro sistema operacional IP Pacote de instalação
mestre centos7 192.168.177.8 redis-5.0.7.tar.gz
escravo1 centos7 192.168.177.11 redis-5.0.7.tar.gz
escravo2 centos7 192.168.177.18 redis-5.0.7.tar.gz

(2) Modifique o arquivo de configuração do redis (mestre-escravo)

systemctl stop firewalld
setenforce 0

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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

(3) Inicie o modo sentinela (mestre e escravo)

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

(4) Simulação de falha

Ver o número do processo do redis-server

ps aux | grep redis

Insira a descrição da imagem aqui
Mate o ID do processo do redis-server no nó mestre
Insira a descrição da imagem aqui

(5) Resultado da verificação

tail -f /var/log/sentinel.log

Insira a descrição da imagem aqui

redis-cli -p 26379 INFO Sentinel

Insira a descrição da imagem aqui

Três, modo de cluster redis (Cluster Redis)

1. O conceito de cluster

O cluster é composto por vários nós (Nó) 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 informações de status do nó mestre.

2. O papel dos clusters

(1) Partição de dados: a partição de dados (ou fragmentação de dados) é a função central do cluster.
O cluster dispersa dados para vários nós. Por um lado, ele ultrapassa o limite de tamanho de memória da 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, que melhora muito a capacidade de resposta do cluster.
A limitação do tamanho da memória autônoma do Redis é mencionada na introdução da persistência e da replicação mestre-escravo; por exemplo, se a memória autônoma for muito grande, a operação de bifurcação de bgsave e bgrewriteaof pode causar o bloqueio do processo principal e pode ser possível quando o host é comutado no ambiente mestre-escravo. Como resultado, o nó escravo não pode fornecer serviços por um longo tempo e o buffer de replicação do nó mestre pode estourar durante a 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 sentinela); quando qualquer nó falha, o cluster ainda pode fornecer serviços externos.

3. Fragmentação de dados do cluster Redis

(1) O cluster Redis introduz o conceito de slots de hash. O
cluster Redis tem 16384 slots de hash (numerados de 0-16383)
. Cada nó no cluster é responsável por uma parte do slot de hash.
Cada chave é verificada por CRC16 e, em seguida, 16384 é usado para determinar o restante. Qual slot de hash colocar, use esse valor para encontrar o nó correspondente ao slot correspondente e, em seguida, pule automaticamente para o nó correspondente para operações de acesso
(2) Pegue um cluster composto por 3 nós como exemplo:
o nó A contém slots de hash 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) O cluster do modelo de replicação mestre-escravo do cluster Redis
tem três nós A, B e C Se o nó B falhar , todo o cluster ficará indisponível devido à falta de slots na faixa de 5461-10922.
Adicione um nó escravo A1, B1 e C1 para cada nó. Todo o cluster consiste em três nós mestre e três nós escravos. Após a falha do nó B, o cluster elege o nó mestre com B1 como o nó principal para continuar servindo. Quando B e B1 falharem, o cluster ficará indisponível
Insira a descrição da imagem aqui

4. Construir modo de cluster redis

Um cluster redis geralmente requer 6 nós, 3 mestres e 3 escravos. Por conveniência, todos os nós são executados no mesmo servidor. Use os números de porta para distinguir, os três números de porta do nó mestre são: 1701, 1702, 1703 e os números de porta do nó escravo correspondentes são 1704, 1705, 1706

cd /etc/redis/
mkdir -p redis-cluster/redis170{1..6}

for i in {1. .6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis170$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis170$i
done
 
#开启群集功能:
#其他5个文件夹的配置文件以此类推修改
cd /etc/redis/redis-cluster/redis1701
vim redis.conf
#bind 127.0.0.1         #69行,注释掉bind项,默认监听所有网卡
protected-mode no       #88行,修改,关闭保护模式
port 1701               #92行,修改redis监听端口
daemonize yes           #136行,开启守护进程,以独立进程启动
appendonly yes          #699行,修改,开启AOF持久化
cluster-enabled yes     #832行,取消注释,开启群集功能
cluster-config-file nodes-1701.conf    #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000             #846行,取消注释群集超时时间设置

写一个for循环将1701的文件复制给1702~1706,
for i in {2..6}
do
/usr/bin/cp -f /etc/redis/redis-cluster/redis1701/redis.conf /etc/redis/redis-cluster/redis170$i/redis.conf
done
#之后稍微修改文件即可

# 启动redis节点
分别进入那六个文件夹,执行命令: redis-server redis.conf,来启动redis节点
cd /etc/redis/redis-cluster/redis1701
redis-server redis.conf

for d in {1..6}
do
cd /etc/redis/redis-cluster/redis170$d
redis-server redis.conf
done

ps -ef | grep redis

#启动集群
redis-cli --cluster create 127.0.0.1:1701 127.0.0.1:1702 127.0.0.1:1703 127.0.0.1:1704 127.0.0.1:1705 127.0.0.1:1706 --cluster-replicas 1

#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候需要输入yes 才可以创建。
-replicas 1       #表示每个主节点有1个从节点。

#测试群集
redis-cli -p 1701 -c              #加-c参数,节点之间就可以互相跳转
127.0.0.1:1701> cluster slots     #查看节点的哈希槽编号范围

127.0.0.1:1701> set name zhangsan
-> Redirected to slot [5798] located at 127.0.0.1: 1703
OK

127.0.0.1:1701> cluster keyslot name    #查看name键的槽编号
(integer) 5798

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/tefuiryy/article/details/114302873
Recomendado
Clasificación