2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este artigo será baseado na construção de uma instância redis de modo [pseudo] autônomo no ambiente k8s. Como o desempenho de IO do armazenamento compartilhado é relativamente baixo, o armazenamento compartilhado é usado para backup de dados e os dados do Redis são armazenados na forma de hostpath. Isso ajuda a melhorar o desempenho de IO do Redis. Este artigo explicará como usar dois contêineres. a forma mestre-escravo de redis para implementar um redis autônomo e altamente disponível.
K8s versão k8s-1.29.4, o ambiente é construído em uma sala de informática de telecomunicações, com um total de seis nós. Cada nó possui um disco SSD que não é do sistema montado no caminho /data/. Há armazenamento compartilhado NAS, que usa Alibaba Cloud NAS e usa uma linha dedicada com largura de banda de linha dedicada de 500 MB.
1. Configure o redis no modo mestre-escravo. A leitura e gravação de dados do redis mestre cai no disco SSD local e os dados do redis escravo caem no armazenamento NAS compartilhado externo.
2. Em seguida, crie uma configuração statefulset, coloque dois contêineres, um contêiner como o redis principal, monte-o no hostpath, crie um diretório com o nome do host e armazene o arquivo rdb. Outro contêiner serve como redis escravo, e o caminho nas é montado para criar um diretório com o nome do host e armazenar o arquivo rdb.
3. Ajuste o parâmetro de persistência de dados salvo do redis e ajuste o tempo de download de dados para um parâmetro menor para garantir que os dados atualizados sejam armazenados no arquivo rdb o mais rápido possível.
4. Sempre que o pod for agendado ou reiniciado, copie o arquivo rdb armazenado no nas para o caminho do host e inicie o redis.
Nota: Isso é feito para permitir que o redis mestre obtenha processamento de dados de negócios de alto desempenho, e o redis escravo é responsável pela persistência dos dados. Pode haver os seguintes problemas: 1. Quando o IO de leitura e gravação de dados do mestre é muito alto. , o redis escravo monta nas. O tempo de download de dados será maior.
A configuração contém três arquivos: o arquivo de configuração redis mestre, o arquivo de configuração redis escravo e um script simples que executa diferentes operações com base na função de execução.
redis-master:conf é o arquivo de configuração principal do redis. A memória está configurada para 256M, a porta de configuração é 6379, a senha de configuração é redis#123 e o caminho de armazenamento é/data/redis.
redis.conf: No arquivo de configuração redis, configure a memória para 256M, configure a porta para 6380, configure a senha: redis#123, o caminho de armazenamento é /data/redis-2 e configure os dados a serem sincronizados a partir do porta 6379 e ajuste o tempo de armazenamento para Se houver 10 alterações de dados em 60 segundos, o armazenamento será realizado.
run.sh: A função principal é determinar a função e criar um diretório com base no nome do host e, em seguida, conectar-se suavemente ao diretório de armazenamento. Esta etapa serve principalmente para armazenar os dados redis de cada serviço em seu próprio diretório. Ao criar um novo redis, isso não causará conflitos de diretório no nó.
apiVersion: v1
kind: ConfigMap
metadata:
name: defaultapp-redis-standalone-config
namespace: default
labels:
appname: default-app
app: defaultapp-redis-standalone-config
data:
redis-master.conf: |
port 6379
maxmemory 256mb
requirepass redis#123
dir /data/redis
redis.conf: |
port 6380
maxmemory 256mb
requirepass redis#123
save 3600 1 300 5 60 10
dir /data/redis-2
replicaof 127.0.0.1 6379
masterauth redis#123
run.sh: |
#!/bin/sh
role=$1
hname=$(hostname)
if [ $role == "master" ];then
echo "run redis master"
ls /etc/redis/ -l
[ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
[ -d /data ] || mkdir /data
ln -s /home/redis/$hname /data/redis
if [ -f /home/redis-2/$hname/dump.rdb ];then
cp -vf /home/redis-2/$hname/dump.rdb /data/redis/
else
echo "[info] no bak dump.rdb"
fi
redis-server /etc/redis/redis-master.conf
else
echo "run redis slave"
ls /etc/redis/ -l
[ -d /home/redis-2/$hname ] || mkdir -p /home/redis-2/$hname
[ -d /data ] || mkdir /data
ln -s /home/redis-2/$hname /data/redis-2
redis-server /etc/redis/redis.conf
fi