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