redis的哨兵模式和Redis cluster

目录

[一. redis的主从复制](#一. redis的主从复制)

[二. 哨兵模式](#二. 哨兵模式)

[2.1 定义](#2.1 定义)

[2.2 作用](#2.2 作用)

[2.3 配置实例](#2.3 配置实例)

[三. Redis cluster](#三. Redis cluster)

[3.1 定义](#3.1 定义)

[3.2 作用](#3.2 作用)

[3.3 配置实例](#3.3 配置实例)

[1. 新建集群文件目录](#1. 新建集群文件目录)

[2. 准备可执行文件到每个文件夹](#2. 准备可执行文件到每个文件夹)

[3. 开启群集功能](#3. 开启群集功能)

[4. 启动redis节点](#4. 启动redis节点)

[5. 查看是否启动成功](#5. 查看是否启动成功)

[6. 启动集群](#6. 启动集群)

[7. 测试集群](#7. 测试集群)

[四. 命令行配置](#四. 命令行配置)


一. redis的主从复制

复制代码
#主服务器
vim /apps/redis/etc/redis.conf
requirepass 123456

#从服务器
vim /apps/redis/etc/redis.conf
replicaof 192.168.52.105 6379
masterauth 123456
systemctl restart redis

#主服务器
redis-cli -a 123456 info replication

二. 哨兵模式

2.1 定义

Redis 哨兵模式主要用于实现 Redis 的高可用性。

2.2 作用

  1. 主从切换:当主节点(Master)出现故障时,哨兵会自动将一个从节点(Slave)提升为新的主节点,确保服务不中断。

  2. 监控:哨兵持续监控 Redis 主节点和从节点的健康状态,检测节点是否在线或出现故障。

  3. 通知:当检测到故障或主从切换时,哨兵可以通过配置的方式通知管理员或其他系统。

  4. 配置管理:哨兵会自动更新客户端的主节点地址,确保客户端始终连接到正确的主节点。

2.3 配置实例

实验设备

复制代码
Ubuntu---192.168.52.105(主服务器)
Ubuntu1---192.168.52.31和Ubuntu2---192.168.52.107(从服务器)

#主服务器
vim /data/redis-6.2.6/sentinel.conf
bind 0.0.0.0
logfile "/apps/redis/log/sentinel.log"

#修改sentinel monitor mymaster 127.0.0.1 6379 2为
sentinel monitor mymaster 192.168.52.105 6379 2

sentinel auth-pass 123456
sentinel down-after-milliseconds mymaster 3000


#从服务器
vim /apps/redis/etc/redis.conf
masterauth 123456
replicaof 192.168.52.105 6379

#查看
redis-cli
info
复制代码
#主服务器
vim /data/redis-6.2.6/sentinel.conf

sentinel monitor mymaster 192.168.52.105 6379 2

sentinel auth-pass mymaster 123456
复制代码
#从服务器
echo  "requirepass 123456" >> /apps/redis/etc/redis.conf 
systemctl restart redis
复制代码
在主
cd /data/redis-6.2.6/
cp sentinel.conf /apps/redis/etc/
cd /apps/redis/etc/
chown redis:redis sentinel.conf

scp sentinel.conf 192.168.52.31:/apps/redis/etc/
scp sentinel.conf 192.168.52.107:/apps/redis/etc/

在从
cd /apps/redis/etc/
chown redis:redis sentinel.conf

#必须先从主服务器开始,然后再是从服务器
cat  >> /lib/systemd/system/redis-sentinel.service  <<eof
[Unit]
Description=Redis Sentinel
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-sentinel /apps/redis/etc/sentinel.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
eof

systemctl daemon-reload 
systemctl start redis-sentinel.service

tail sentinel.conf

三. Redis cluster

3.1 定义

Redis Cluster 是 Redis 官方提供的分布式解决方案,主要用于实现 Redis 的高可用性和数据分片。

3.2 作用

  1. 数据分片:Redis Cluster 将数据自动分片到多个节点上,每个节点只存储部分数据,从而支持更大规模的数据集。

  2. 高可用性:每个分片(Shard)都有主节点和从节点,当主节点出现故障时,从节点会自动提升为主节点,确保服务不中断。

  3. 自动故障转移:Redis Cluster 会自动检测节点故障,并进行主从切换,无需人工干预。

  4. 数据一致性:Redis Cluster 使用异步复制来保证数据的一致性,同时支持部分同步(Partial Resynchronization)以减少数据丢失。

  5. 客户端透明访问:客户端可以连接到任意节点,Redis Cluster 会自动将请求路由到正确的节点。

3.3 配置实例

1. 新建集群文件目录

复制代码
cd  /apps/redis/
mkdir -p redis-cluster/redis600{1..6}

2. 准备可执行文件到每个文件夹

复制代码
cd redis-cluster/
for i in {1..6}
do
cp /data/redis-6.2.6/redis.conf /apps/redis/redis-cluster/redis600$i
cp /data/redis-6.2.6/src/redis-cli /data/redis-6.2.6/src/redis-server /apps/redis/redis-cluster/redis600$i
done

#查看
tree

3. 开启群集功能

复制代码
cd /apps/redis/redis-cluster/redis6001/
vim redis.conf
bind 0.0.0.0							#默认监听所有网卡  
protected-mode no						#修改,关闭保护模式
port 6001								#修改,redis监听端口,
daemonize yes							#开启守护进程,以独立进程启动  如果是 systemd 启动不需要修改
cluster-enabled yes						#取消注释,开启群集功能
cluster-config-file nodes-6001.conf		#取消注释,群集名称文件设置
cluster-node-timeout 15000				#取消注释群集超时时间设置
appendonly yes							#修改,开启AOF持久化
daemonize yes                           #开启后台启动

#将 redis6001 目录下的 redis.conf 配置文件复制到 redis6002 到 redis6006 目录中。
cd /apps/redis/redis-cluster/redis6001
for i in {2..6}
do
\cp -f  ./redis.conf   /apps/redis/redis-cluster/redis600${i}
done



#修改端口号
sed  -i   's/6001/6002/'   /apps/redis/redis-cluster/redis6002/redis.conf
sed  -i   's/6001/6003/'   /apps/redis/redis-cluster/redis6003/redis.conf
sed  -i   's/6001/6004/'   /apps/redis/redis-cluster/redis6004/redis.conf
sed  -i   's/6001/6005/'   /apps/redis/redis-cluster/redis6005/redis.conf
sed  -i   's/6001/6006/'   /apps/redis/redis-cluster/redis6006/redis.conf

4. 启动redis节点

复制代码
systemctl stop redis

for d in {1..6}
do
cd /apps/redis/redis-cluster/redis600$d
redis-server redis.conf
done

5. 查看是否启动成功

复制代码
ps aux|grep redis

6. 启动集群

复制代码
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

7. 测试集群

复制代码
redis-cli -p 6001  -c
#查看节点的哈希槽编号范围
cluster slots			
复制代码
#生成数据测试
set name zhangsan
#查看name键的槽编号
cluster keyslot name

四. 命令行配置

命令 解释
info replication 查看主从状态
repliacaof 或者 ( slaveof ) 添加主从配置 例子: repliacaof 192.168.91.100 6379
CONFIG SET masterauth 123456 临时设置密码
repliacaof masterip masterport 临时添加主设置
REPLICAOF no one 取消 主从配置
相关推荐
酷炫码神几秒前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
驭渊的小故事18 分钟前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客42 分钟前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1881 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn1 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su2 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
传奇开心果编程2 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw2 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
电子云与长程纠缠2 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
cspttty3 小时前
2027风险管理岗准备路线:数学与应用数学如何补齐金融、SQL与Python
开发语言·python·金融