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 取消 主从配置
相关推荐
Winn~5 分钟前
JVM垃圾回收器-ZGC
java·jvm·算法
chicpopoo7 分钟前
Python打卡DAY46
开发语言·python
灏瀚星空9 分钟前
Python数学可视化:3D参数曲面与隐式曲面绘制技术
开发语言·python·3d
程序员小假25 分钟前
说一说 SpringBoot 中 CommandLineRunner
java·后端
Java Fans27 分钟前
如何在Windows本机安装Python并确保与Python.NET兼容
开发语言·windows·python
sky_ph35 分钟前
JAVA-GC浅析(一)
java·后端
爱coding的橙子36 分钟前
每日算法刷题Day24 6.6:leetcode二分答案2道题,用时1h(下次计时20min没写出来直接看题解,节省时间)
java·算法·leetcode
岁忧40 分钟前
(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)
java·c++·算法·leetcode·职场和发展·go
天天摸鱼的java工程师1 小时前
@Autowired 注入失效?
java·后端
sss191s1 小时前
校招 Java 面试基础题目解析学习指南含新技术实操要点
java·python·面试