redis哨兵模式docker-compose搭建一主两从三哨兵模式
1.我们先准备服务器10.4.2.13
2.我们然后在/root下创建目录
3.创建挂载目录
[root@node1 redis-sentinel]# mkdir -p ./master/conf
[root@node1 redis-sentinel]# mkdir -p ./master/data
[root@node1 redis-sentinel]#
[root@node1 redis-sentinel]# mkdir -p ./slave1/conf
[root@node1 redis-sentinel]# mkdir -p ./slave1/data
[root@node1 redis-sentinel]# mkdir -p ./slave2/conf
[root@node1 redis-sentinel]# mkdir -p ./slave2/data
[root@node1 redis-sentinel]# mkdir -p ./sentinel1/conf
[root@node1 redis-sentinel]# mkdir -p ./sentinel2/conf
[root@node1 redis-sentinel]# mkdir -p ./sentinel3/conf
4.创建挂载文件 (ip自行根据自己的替换)
master:
vim master/conf/redis.conf
bind 0.0.0.0
masterauth "FjockDaLAq"
requirepass "FjockDaLAq"
dir "/data"
replica-announce-ip "10.4.2.13"
replica-announce-port 6382
slave1
vim slave1/conf/redis.conf
replica-read-only yes
replicaof 10.4.2.13 6382
masterauth "FjockDaLAq"
requirepass "FjockDaLAq"
dir "/data"
slave-announce-ip 10.4.2.13
slave-announce-port 6380
slave2
vim slave2/conf/redis.conf
replica-read-only yes
replicaof 10.4.2.13 6382
masterauth "FjockDaLAq"
requirepass "FjockDaLAq"
dir "/data"
slave-announce-ip 10.4.2.13
slave-announce-port 6381
sentinel1
/sentinel1/conf/sentinel.conf
vim sentinel.conf
port 26379
dir "/data"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.4.2.13 6382 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 5000
requirepass "FjockDaLAq"
sentinel auth-pass mymaster FjockDaLAq
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 70
sentinel announce-ip "10.4.2.13"
sentinel announce-port 26379
# Generated by CONFIG REWRITE
user default on #db059fe5c615826121937429d355e3aef078595000181bd8b8c0db44be94c970 ~* &* +@all
sentinel myid c2cb92d165c055405b11134ee02cc5ddb4bf5e14
sentinel current-epoch 6
sentinel known-replica mymaster 10.4.2.13 6381
sentinel known-replica mymaster 10.4.2.13 6380
sentinel known-sentinel mymaster 10.4.2.13 26381 84231902ad587b77e94781f42f7c2736e34abd92
sentinel known-sentinel mymaster 10.4.2.13 26380 68b75d986db92c0f9eb314379ab7b208325b1379
sentinel2
/sentinel2/conf/sentinel.conf
vim sentinel.conf
port 26379
dir "/data"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.4.2.13 6382 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 5000
sentinel auth-pass mymaster FjockDaLAq
requirepass "FjockDaLAq"
sentinel announce-ip "10.4.2.13"
sentinel announce-port 26380
# Generated by CONFIG REWRITE
user default on #db059fe5c615826121937429d355e3aef078595000181bd8b8c0db44be94c970 ~* &* +@all
sentinel myid 68b75d986db92c0f9eb314379ab7b208325b1379
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 0
sentinel current-epoch 6
sentinel known-replica mymaster 10.4.2.13 6380
sentinel known-replica mymaster 10.4.2.13 6381
sentinel known-sentinel mymaster 10.4.2.13 26381 84231902ad587b77e94781f42f7c2736e34abd92
sentinel known-sentinel mymaster 10.4.2.13 26379 c2cb92d165c055405b11134ee02cc5ddb4bf5e14
sentinel3
/sentinel3/conf/sentinel.conf
vim sentinel.conf
port 26379
dir "/data"
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.4.2.13 6382 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 5000
sentinel auth-pass mymaster FjockDaLAq
#sentinel config-epoch mymaster 2
#sentinel leader-epoch mymaster 2
requirepass "FjockDaLAq"
sentinel announce-ip "10.4.2.13"
sentinel announce-port 26381
# Generated by CONFIG REWRITE
user default on #db059fe5c615826121937429d355e3aef078595000181bd8b8c0db44be94c970 ~* &* +@all
sentinel myid 84231902ad587b77e94781f42f7c2736e34abd92
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 0
sentinel current-epoch 6
sentinel known-replica mymaster 10.4.2.13 6380
sentinel known-replica mymaster 10.4.2.13 6381
sentinel known-sentinel mymaster 10.4.2.13 26380 68b75d986db92c0f9eb314379ab7b208325b1379
sentinel known-sentinel mymaster 10.4.2.13 26379 c2cb92d165c055405b11134ee02cc5ddb4bf5e14
5.编辑docker-compose.yml
version: '3'
services:
redis-master:
image: redis:6.2.6
container_name: redis_master #master节点
volumes:
- ./master/conf/redis.conf:/etc/redis/redis.conf
- ./master/data:/data
command: /bin/bash -c "redis-server /etc/redis/redis.conf"
environment:
- TZ=Asia/Shanghai
- LANG=en_US.UTF-8
ports:
- "6382:6379"
networks:
- midware_default
redis-slave1:
image: redis:6.2.6
container_name: redis_slave_1 #slave1节点
depends_on:
- redis-master
volumes:
- ./slave1/conf/redis.conf:/etc/redis/redis.conf
- ./slave1/data:/data
command: /bin/bash -c "redis-server /etc/redis/redis.conf"
environment:
- TZ=Asia/Shanghai
- LANG=en_US.UTF-8
ports:
- "6380:6379"
networks:
- midware_default
redis-slave2:
image: redis:6.2.6
container_name: redis_slave_2 #slave2节点
volumes:
- ./slave2/conf/redis.conf:/etc/redis/redis.conf
- ./slave2/data:/data
command: /bin/bash -c "redis-server /etc/redis/redis.conf"
depends_on:
- redis-slave1
environment:
- TZ=Asia/Shanghai
- LANG=en_US.UTF-8
ports:
- "6381:6379"
networks:
- midware_default
redis-sentinel1:
image: redis:6.2.6
container_name: redis_sentinel_1 #sentinel1节点
depends_on:
- redis-slave2
ports:
- "26379:26379"
volumes:
- ./sentinel1/conf:/usr/local/etc/redis
command: /bin/bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf"
networks:
- midware_default
redis-sentinel2:
image: redis:6.2.6
container_name: redis_sentinel_2 #sentinel2节点
ports:
- "26380:26379"
depends_on:
- redis-sentinel1
volumes:
- ./sentinel2/conf:/usr/local/etc/redis
command: /bin/bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf"
redis-sentinel3:
image: redis:6.2.6
container_name: redis_sentinel_3 #sentinel3节点
ports:
- "26381:26379"
depends_on:
- redis-sentinel2
volumes:
- ./sentinel3/conf:/usr/local/etc/redis
command: /bin/bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf"
networks:
- midware_default
networks:
midware_default:
driver: bridge
6.拉取镜像docker pull redis:6.2.6
7.启动docker-compose up -d
8.查看服务 docker ps |grep redis
9.搭建完成!!!!
10.redis一主两从的三哨兵模式有什么好处???
Redis 一主两从的三哨兵模式是一种在 Redis 高可用性部署中常用的架构,它包含一个主节点(Master)和两个从节点(Slave),以及三个哨兵(Sentinel)节点。这种模式具有以下几个好处:
高可用性:通过使用主从复制机制,当主节点发生故障时,其中一个从节点可以自动接管主节点的角色,成为新的主节点。哨兵节点负责监视主节点的状态,当主节点不可用时,它会自动发现并选举新的主节点,从而实现快速的故障切换和自动恢复,提高系统的可用性。
数据冗余:通过配置两个从节点,数据可以在多个节点上进行复制和存储。当主节点发生故障时,数据仍然可以从其中一个从节点获取,不会丢失。
负载均衡:在正常情况下,主节点负责处理写操作,从节点负责处理读操作。这样可以分担主节点的负载,提高系统的吞吐量和性能。
故障检测和自动恢复:哨兵节点负责监视主节点和从节点的状态,并在发现故障时采取相应的措施。它可以自动发现新的主节点,将从节点切换为主节点,并通知其他哨兵和客户端进行更新,从而实现故障检测和自动恢复的功能。
简化配置和管理:通过使用三个哨兵节点,可以简化 Redis 集群的配置和管理。哨兵节点负责监控和管理主从节点的状态,自动进行主节点的选举和故障切换,减少了手动干预的需求。
需要注意的是,哨兵模式并不能解决所有的故障场景,如多个节点同时发生故障或网络分区等情况。对于更高级别的高可用性需求,可以考虑使用 Redis 的集群模式(Redis Cluster)或其他分布式存储系统。
总之,Redis 一主两从的三哨兵模式通过主从复制和哨兵节点的监控、故障检测和自动恢复功能,提供了较高的可用性和数据冗余,同时简化了配置和管理。这种部署模式适用于对 Redis 数据的高可用性和读写性能有较高要求的场景。
11.Redis 一主两从的三哨兵模式原理
Redis 一主两从的三哨兵模式基于 Redis 的主从复制机制和 Sentinel 哨兵的监控和自动故障切换功能。以下是该模式的工作原理:
主从复制:在一主两从的配置中,主节点负责处理写操作,从节点负责处理读操作。主节点将写入的数据同步复制到从节点,从节点与主节点保持数据的一致性。主从复制使用全量复制和增量复制的方式,确保从节点与主节点的数据保持同步。
哨兵监控:三个 Sentinel 哨兵节点负责监控主节点和从节点的状态。哨兵节点通过发送心跳检测来监测节点的健康状态,包括主节点和从节点的故障、上线和下线等情况。哨兵节点之间通过消息通信来共享监控信息。
故障检测和切换:当哨兵节点检测到主节点不可用时,它会发起故障检测流程。首先,哨兵节点会对主节点进行选举,选择一个从节点作为新的主节点。然后,哨兵节点会通知其他哨兵和客户端,告知主节点切换的结果。客户端可以更新连接信息以连接到新的主节点。
自动故障切换:在故障切换过程中,哨兵节点会将从节点切换为新的主节点,并将其他从节点重新配置为复制新的主节点。这样一来,系统可以在主节点故障后继续提供读写服务。
哨兵选举:在哨兵节点进行主节点选举时,它们会通过投票和协商的方式决定新的主节点。哨兵节点之间使用 Raft 算法来保证选举的一致性和可靠性。
通过以上机制,一主两从的三哨兵模式可以实现 Redis 高可用性的部署。当主节点发生故障时,其中一个从节点会被选举为新的主节点,从而实现快速的故障切换和自动恢复。哨兵节点负责监控节点状态、发起选举和通知其他节点,确保整个系统的可用性和数据一致性。
需要注意的是,哨兵模式需要在客户端配置哨兵节点的信息,以便客户端能够获取到正确的主节点信息。哨兵节点也需要在配置文件中指定监控的主节点和从节点的信息。
总结起来,一主两从的三哨兵模式利用主从复制和哨兵的监控和故障切换功能,实现了 Redis 的高可用性和自动故障恢复。它是一种常见且可靠的 Redis 高可用性部署方案。