O Redis é implantado em um modo Docker mestre e um escravo para obter alta disponibilidade por meio do modo keepalived e sentinela.

Existem dois servidores. Um é o mestre, mestre: 172.24.69.180
, o outro é o escravo, escravo: 172.24.69.181
endereço vip: 172.24.69.185

1. Desligue o firewall

Os firewalls estão desativados em ambos os servidores

systemctl disable --now firewalld
firewall-cmd --state

Desligue o SELinux

setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
sestatus

Primeiro, desligue o firewall. Como não o desliguei, o VIP não conseguiu se desviar. Levei muito tempo para encontrá-lo.

2. Instale a janela de encaixe

Instale o docker em ambos os servidores
usando a instalação binária:
1. Obtenha o pacote binário offline do docker

docker二进制包获取地址:https://download.docker.com/linux/static/stable/x86_64/

2. Faça upload para o servidor e descompacte

tar xzf docker-20.10.8.tgz
#解压缩完成后将docker目录中的所有文件复制至/usr/bin/目录下
cp docker/* /usr/bin

3. Configure o arquivo docker.service
vim /usr/lib/systemd/system/docker.service
e insira o seguinte conteúdo no arquivo

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

4. Crie um diretório de montagem

创建目录
mkdir /data/docker

5. Confirme daemon.json

mkdir /etc/docker

vim /etc/docker/daemon.json

Digite o seguinte em daemon.json:

{
    
    
    "graph": "/data/docker",
    "storage-driver": "overlay2",
    "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
    "bip": "172.7.21.1/24",
    "log-driver":"json-file",
    "log-opts":{
    
     "max-size" :"100m","max-file":"3"},
    "exec-opts": ["native.cgroupdriver=systemd"]
}

6. Inicie o serviço docker

systemctl daemon-reload
systemctl enable --now docker

3. Instale o redis

Ambos os servidores possuem o redis instalado, mas a configuração mestre-escravo é um pouco diferente.
1. Extraia a imagem

 docker pull redis:6.2.6

2. Crie um diretório de montagem

mkdir -p /data/redis/logs
mkdir -p /data/redis/data
chmod 777 /data/redis/data
chmod 777 /data/redis/logs

3. A configuração do nó mestre está em 172.24.69.180

cat > /data/redis/redis.conf << EOF
bind 0.0.0.0
daemonize no
port 6379
tcp-backlog 511
timeout 300
tcp-keepalive 60
databases 16
 
save 900 1
save 300 10
save 60 10000
 
dbfilename dump.rdb
 
loglevel notice
logfile "/var/log/redis-server.log"
dir "/data"
appendonly yes
appendfilename appendonly.aof
maxmemory-policy volatile-lru
maxmemory 6442450944
appendfsync everysec
 
requirepass pass123
masterauth pass123
EOF

pass123 no arquivo de configuração é a senha para redis set

Configuração do nó, em 172.24.69.181

cat > /data/redis/redis.conf << EOF
bind 0.0.0.0
daemonize no
port 6379
tcp-backlog 511
timeout 300
tcp-keepalive 60
databases 16
 
save 900 1
save 300 10
save 60 10000
 
dbfilename dump.rdb
 
loglevel notice
logfile "/var/log/redis-server.log"
dir "/data"
appendonly yes
appendfilename appendonly.aof
maxmemory-policy volatile-lru
maxmemory 6442450944
appendfsync everysec
 
requirepass pass123
masterauth  pass123
 
slaveof 172.24.69.180 6379        
EOF

slaveof 172.24.69.180 Este é o ip do nó mestre

4. Docker inicia o
nó mestre redis

docker run -dit --name mianredis --restart=always -v /data/redis/redis.conf:/etc/redis.conf -v /data/redis/data/:/data/ -v /data/redis/logs:/var/log -p 6379:6379 redis:6.2.6 redis-server /etc/redis.conf

nó escravo

docker run -dit --name slaveredis --restart=always -v /data/redis/redis.conf:/etc/redis.conf -v /data/redis/data/:/data/ -v /data/redis/logs:/var/log -p 6379:6379 redis:6.2.6 redis-server /etc/redis.conf

5. Após iniciar o redis, copie redis-cli para o
nó mestre no diretório /usr/local/bin/ da máquina host.

docker cp mianredis:/usr/local/bin/redis-cli /usr/local/bin/

nó escravo

docker cp slaveredis:/usr/local/bin/redis-cli /usr/local/bin/

4. Redis mestre-escravo + sentinela (sentinela) + keepalived

Ambos os nós estão instalados, mas a configuração é diferente

Princípio de implementação

Instale sentry e keepalived nos servidores mestre e de backup, respectivamente. A prioridade do mestre é 100 e a prioridade do backup é 99. Configure a regra de script de verificação vrrp_script no servidor salve para verificar o status da função atual do escravo. Uma vez o status da função redis do escravo é mestre, altere a prioridade do escravo de 2 para 101, para que ele possa obter o privilégio de vip;
quando o serviço redis do mestre desligar, o sentinela promoverá o escravo para o novo mestre, e o escravo aumentará a prioridade quando o status da função for mestre. 2 Obtenha vip, quando o serviço redis do mestre original estiver ativo, o sentinela se juntará a ele como um escravo para a replicação mestre-escravo. Quando o serviço redis estiver
ativado o nó escravo que se torna o mestre desliga, o sentinela definirá o mestre do redis como o nó mestre original, vrrp_script Ao verificar se seu redis não é o mestre, reduza a prioridade em 2 a 99. A prioridade do mestre original é maior que a prioridade do escravo e o mestre original obtém permissões VIP.

1. Configuração do Sentinel.conf.
O caminho de configuração do nó mestre
é /data/redis/sentinel.conf. Insira o seguinte conteúdo em sentinel.conf.

port 26379
dir "/var/log/sentinel"
logfile "/var/log/sentinel/26379.log"
sentinel monitor mymaster 172.24.69.180 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster pass123
sentinel announce-ip "172.24.69.180"
sentinel announce-port 26379

Defina a configuração do sentinel.conf a partir do nó
, o caminho é /data/redis/sentinel.conf

port 26379
dir "/var/log/sentinel"
logfile "/var/log/sentinel/26379.log"
sentinel monitor mymaster 172.24.69.180 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster pass123
sentinel announce-ip "172.24.69.181"
sentinel announce-port 26379

172.24.69.180 aqui é o ip do nó mestre
172.24.69.181 é o ip do nó escravo

2. Inicie o
nó mestre sentinela:

docker run -d --name main --restart=always -v /data/redis/sentinel.conf:/conf/sentinel.conf -v /data/logs/sentinel:/var/log/sentinel  -p 26379:26379 redis:6.2.6  redis-sentinel /conf/sentinel.conf

Do nó:

docker run -d --name slave --restart=always -v /data/redis/sentinel.conf:/conf/sentinel.conf -v /data/logs/sentinel:/var/log/sentinel  -p 26379:26379 redis:6.2.6  redis-sentinel /conf/sentinel.conf

5. Instale o keepalived

Ambos os servidores estão instalados, mas a configuração é diferente.
Instale o keepalived

yum -y install keepalived 

1. Modifique o arquivo de configuração
Configuração do nó mestre:
O arquivo de configuração é /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
    
    
   router_id redis-225 ##设备名称
}
vrrp_script chkmaster{
    
    
     script "/etc/keepalived/chkmaster.sh  127.0.0.1 6379 pass123" #检查当前redis是否为master
     interval 3 #每3秒检查一次
      weight -2 #当本机为master检测结果返回1,将优先级加2
}
vrrp_instance VI_redis {
    
    
    state MASTER ##当前设备为master
    interface enp4s1  ##vip绑定的网卡
    virtual_router_id 79 ##备份组id,同一备份组要一致
    priority 100 ##优先级,优先级高的成为master
    advert_int 3 ##每多少秒进行一次健康检查
    unicast_src_ip  172.24.69.180 ##(本地IP地址)
    unicast_peer {
    
    
                  172.24.69.181  ##(对端IP地址)此地址一定不能忘记
                       }
    authentication {
    
    
        auth_type PASS
        auth_pass redis
    }

    virtual_ipaddress {
    
    
        172.24.69.185/24
    }
   track_script
     {
    
     ##调用状态检查
          chkmaster
     }
}

Configuração do nó

! Configuration File for keepalived
global_defs
 {
    
    
     router_id redis-224
 }
vrrp_script chkmaster
 {
    
    
     script "/etc/keepalived/chkmaster.sh  127.0.0.1 6379 pass123" #检查当前redis是否为master
     interval 3 #每3秒检查一次
      weight -2 #当本机为master检测结果返回1,将优先级加2
  }
vrrp_instance VI_redis
{
    
    
   state BACKUP #本机的状态信息
   interface enp4s1   #vip绑定的网卡
    virtual_router_id 79 ##备份组id,同一备份组要一致
    priority 99 ##优先级,优先级高的成为master
    advert_int 3 ##每多少秒进行一次健康检查
    unicast_src_ip  172.24.69.181 ##(本地IP地址)
    unicast_peer {
    
    
                  172.24.69.180  ##(对端IP地址)此地址一定不能忘记
                       }
    authentication
    {
    
    
        auth_type PASS
        auth_pass redis
     }
     virtual_ipaddress
     {
    
    
         172.24.69.185/24
     }
     track_script
     {
    
     ##调用状态检查
          chkmaster
     }
}

2. Os scripts mestre e escravo são iguais. O conteúdo do script de verificação de status é:

#!/bin/bash
STATUS=`/usr/local/bin/redis-cli -h $1 -p $2 -a $3 info | grep role:master | wc -l`
echo $STATUS
if [ "$STATUS" -eq 0 ];then    
    exit 1
else    
    exit 0
fi

3. Dê permissões ao script

chmod -R 755 /etc/keepalived/chkmaster.sh

4. Reinicie o keepalived

systemctl daemon-reload
systemctl enable --now keepalived
systemctl stop keepalived     #关闭keepalived
systemctl start keepalived     #启动keepalived

5. Verifique se o redis está normal

#登录redis
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a pass123
#查看redis信息
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a pass123 info

6. Verifique se o vip pode desviar
Verifique em qual servidor o vip está neste momento, pare manualmente o contêiner redis no servidor onde o vip está localizado e veja se o vip pode desviar para outro servidor, se puder desviar, reinicie o serviço interrompido, então pare o container redis do servidor onde o vip está localizado e veja se o vip pode migrar para outro. Se sim, será bem sucedido.

Veja as mudanças na prioridade verificando o status do keepalived
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/javascript_good/article/details/132605070
Recomendado
Clasificación