Redis se implementa en un modo Docker maestro y esclavo para lograr una alta disponibilidad a través del modo keepalived y centinela.

Hay dos servidores, uno es el maestro, maestro: 172.24.69.180
, el otro es el esclavo, esclavo: 172.24.69.181
dirección vip: 172.24.69.185

1. Apague el firewall

Apague el firewall en ambos servidores

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

cerrar SELinux

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

Primero, apague el firewall. Una vez que no lo apagué, el VIP no pudo derivar. Me tomó mucho tiempo encontrarlo.

2. Instalar la ventana acoplable

Instale Docker en ambos servidores
mediante instalación binaria:
1. Obtenga el paquete binario sin conexión de Docker.

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

2. Subir al servidor y descomprimir

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

3. Configure el archivo docker.service
vim /usr/lib/systemd/system/docker.service
e ingrese el siguiente contenido en el archivo

[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. Cree un directorio de montaje

创建目录
mkdir /data/docker

5. Confirme daemon.json

mkdir /etc/docker

vim /etc/docker/daemon.json

Ingrese el siguiente contenido en 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 el servicio acoplable.

systemctl daemon-reload
systemctl enable --now docker

3. Instalar redis

Ambos servidores tienen Redis instalado, pero la configuración maestro-esclavo es ligeramente diferente.
1. Extraiga la imagen

 docker pull redis:6.2.6

2. Cree un directorio de montaje

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

3. Configuración del nodo maestro, en 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 en el archivo de configuración es la contraseña para redis establecida

Configuración del nodo esclavo, en 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

esclavoof 172.24.69.180 Esta es la IP del nodo maestro

4. Docker inicia el
nodo maestro de 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

nodo esclavo

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. Después de iniciar redis, copie redis-cli al
nodo maestro en el directorio /usr/local/bin/ de la máquina host.

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

nodo esclavo

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

4. Redis maestro-esclavo + centinela + keepalived

Ambos nodos están instalados, pero la configuración es diferente.

Principio de implementación

Instale sentry y keepalived en los servidores maestro y de respaldo respectivamente. La prioridad del maestro es 100 y la prioridad de la copia de seguridad es 99. Configure vrrp_script en el servidor salve para verificar las reglas del script y verificar el estado actual de la función del esclavo. Una vez que el estado de la función redis del esclavo sea master, aumente la prioridad del esclavo de 2 a 101, para que pueda obtener permisos VIP;
cuando el servicio redis del maestro cuelgue, el centinela promoverá al esclavo al nuevo maestro, y el esclavo aumentará la prioridad cuando verifique que el El estado del rol es maestro. 2 Obtenga VIP. Cuando se inicia el servicio redis del maestro original, Sentinel lo agregará como esclavo a la replicación maestro-esclavo. Cuando el
servicio redis en el nodo esclavo que se convierte en maestro cuelga, Sentinel configurará el redis master al nodo maestro original, vrrp_script Al verificar que su redis no es el maestro, reduzca la prioridad de 2 a 99. La prioridad del maestro original es mayor que la prioridad del esclavo y el maestro original obtiene permisos VIP.

1. Configuración de Sentinel.conf.
La
ruta de configuración del nodo maestro es /data/redis/sentinel.conf. Ingrese el siguiente contenido en 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

Configure la configuración de sentinel.conf desde el nodo
, la ruta es /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 aquí está la IP del nodo maestro
172.24.69.181 es la IP del nodo esclavo

2. Inicie el
nodo maestro centinela:

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

Desde el nodo:

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. Instalar keepalived

Ambos servidores están instalados, pero la configuración es diferente.
Instalar keepalived

yum -y install keepalived 

1. Modifique el archivo de configuración
Configuración del nodo maestro:
El archivo de configuración es /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
     }
}

Configuración del nodo esclavo

! 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. Los scripts maestro y esclavo son los mismos. El contenido del script de verificación de estado es:

#!/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. Dale permiso al script.

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

4. Reiniciar keepalived

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

5. Verifique si redis es 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 si el VIP puede derivar.
Verifique en qué servidor se encuentra el VIP en este momento. Detenga manualmente el contenedor de redis en el servidor donde se encuentra el VIP para ver si el VIP puede derivar a otro servidor. Si puede derivar, reinicie el servicio detenido. Luego detenga el contenedor redis del servidor donde se encuentra el vip y vea si el vip puede derivar a otro. Si es así, será exitoso.

Vea los cambios de prioridad comprobando el estado de keepalived
Insertar descripción de la imagen aquí

Supongo que te gusta

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