Redis哨兵集群部署!
Redis 哨兵集群介绍
Redis 哨兵(Sentinel)是一种高可用性解决方案,用于监控 Redis 主从架构中的主节点和从节点,并在主节点发生故障时自动进行故障转移。哨兵提供了监控、通知、故障转移和配置管理等功能,确保 Redis 服务的高可用性。
集群IP示例
master
192.168.1.1
slave
192.168.1.2
arbiter
192.168.1.3
镜像
redis:alpine3.16
Redis 哨兵集群优缺点
优点
1. 高可用性
Redis 哨兵集群能够自动检测主节点的故障并进行故障转移。这意味着在主节点出现问题时,系统可以迅速恢复,确保服务的连续性。
2. 自动故障转移
当主节点不可用时,哨兵会自动选择一个从节点提升为新的主节点,并重新配置其他从节点以跟随新的主节点。这一过程是自动化的,减少了人工干预的需求。
3. 监控功能
哨兵提供了对主从节点的监控功能,可以实时检查节点的健康状态。管理员可以通过哨兵进行故障通知,及时获知系统问题。
4. 易于配置
Redis 哨兵的配置相对简单,用户可以通过配置文件进行设置。哨兵支持多种配置选项,用户可以根据需求进行定制。
5. 客户端透明性
哨兵可以为客户端提供当前主节点的地址,客户端可以自动连接到新的主节点,无需手动修改配置。这简化了客户端的配置和管理。
缺点
1. 故障转移延迟
在主节点故障时,哨兵需要一定的时间来检测故障并进行故障转移。这段时间可能会导致短暂的服务中断,特别是在网络延迟或节点恢复较慢的情况下。
2. 单点故障
虽然哨兵本身可以提高高可用性,但如果哨兵实例出现故障,可能导致整个监控和故障转移机制失效。因此,建议部署多个哨兵实例以避免单点故障。
3. 配置复杂性
尽管哨兵的基本配置相对简单,但在大规模集群或复杂场景下,配置和管理可能变得复杂。例如,管理多个哨兵和 Redis 实例的网络拓扑和配置可能需要额外的精力。
4. 数据一致性
在故障转移过程中,新的主节点可能会在与原主节点的最后一次同步后接收部分写请求。这可能导致短暂的数据不一致,尤其是在故障转移时间较长的情况下。
5. 限制的功能
Redis 哨兵主要用于监控和故障转移,并不提供数据分片或负载均衡的功能。因此,在需要这些功能时,可能需要结合其他工具(如 Redis Cluster)。
部署前置服务*Docker
部署所在服务器:
master
slave
arbiter
部署文档:
创建挂载目录
部署所在服务器:
master
slave
arbiter
mkdir -p /data/docker/redis/{data,conf,sentinel} &&
mkdir -p /data/docker/redis/sentinel/{conf,data,pid,logs} &&
chmod -R 777 /data/docker/redis/
导入镜像
部署所在服务器:
master
slave
arbiter
docker load < redis.tar
启动主节点Redis容器
部署所在服务器:
master
# 写入配置文件
cat << EOF > /data/docker/redis/conf/redis.conf
daemonize no
bind 0.0.0.0
port 6379
pidfile redis_6379.pid
logfile redis_6379.log
dir ./
databases 16
dbfilename redis_6369.rdb
requirepass redispassword # 集群密码
masterauth redispassword # 集群密码
# 节点可写权限
replica-read-only no
save 900 1
save 300 100
save 60 10000
EOF
# 启动容器
docker run -d -p 6379:6379 --name redis --privileged=true --restart=always -v /etc/hosts:/etc/hosts -v /data/docker/redis/data:/data -v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf redis:alpine3.16 redis-server /etc/redis/redis.conf
启动从节点总裁节点Redis容器
部署所在服务器:
slave
arbiter
# 写入配置文件
cat << EOF > /data/docker/redis/conf/redis.conf
daemonize no
bind 0.0.0.0
port 6379
pidfile redis_6379.pid
logfile redis_6379.log
dir ./
databases 16
# 认证密码
requirepass redispassword
# 主从同步密码和master的requirepass一致
masterauth redispassword
# 指定主节点
slaveof 192.168.1.1 6379
# 节点可写权限
replica-read-only no
save 900 1
save 300 100
save 60 10000
EOF
# 启动容器
docker run -d -p 6379:6379 --name redis --privileged=true --restart=always -v /etc/hosts:/etc/hosts -v /data/docker/redis/data:/data -v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf redis:alpine3.16 redis-server /etc/redis/redis.conf
启动哨兵集群容器
部署所在服务器:
master
slave
arbiter
# 写入配置文件
cat << EOF > /data/docker/redis/sentinel/conf/redis_sentinel.conf
daemonize no
bind 0.0.0.0
port 26379
logfile /data/sentinel/logs/redis_26379.log
dir /data/sentinel/data
sentinel monitor master_point 192.168.1.1 6379 2 # 指认主节点
sentinel down-after-milliseconds master_point 3000
sentinel parallel-syncs master_point 1
sentinel failover-timeout master_point 18000
sentinel auth-pass master_point redispassword # redis集群密码
EOF
# 添加权限
chmod 777 /data/docker/redis/sentinel/conf/redis_sentinel.conf
# 启动Rdis哨兵容器
docker run -d --name redis_sentinel -p 26379:26379 --restart=always -v /etc/localtime:/etc/localtime -v /etc/hosts:/etc/hosts -v /data/docker/redis/sentinel/conf:/etc/sentinel -v /data/docker/redis/sentinel/pid:/data/sentinel/pid -v /data/docker/redis/sentinel/logs:/data/sentinel/logs -v /data/docker/redis/sentinel/data:/data/sentinel/data redis:alpine3.16 /etc/sentinel/redis_sentinel.conf --sentinel
查看集群数量
redis-cli -p 26379 SENTINEL masters
- 感谢你赐予我前进的力量