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 取消 主从配置
相关推荐
xidianhuihui35 分钟前
go install报错: should be v0 or v1, not v2问题解决
开发语言·后端·golang
架构师沉默37 分钟前
Java优雅使用Spring Boot+MQTT推送与订阅
java·开发语言·spring boot
tuokuac39 分钟前
MyBatis 与 Spring Boot版本匹配问题
java·spring boot·mybatis
zhysunny1 小时前
05.原型模式:从影分身术到细胞分裂的编程艺术
java·原型模式
DebugKitty2 小时前
C语言14-指针4-二维数组传参、指针数组传参、viod*指针
c语言·开发语言·算法·指针传参·void指针·数组指针传参
Bio Coder2 小时前
R语言中 read.table 和 read.delim 之间的区别
开发语言·r语言
草履虫建模2 小时前
RuoYi-Vue 项目 Docker 容器化部署 + DockerHub 上传全流程
java·前端·javascript·vue.js·spring boot·docker·dockerhub
皮皮林5512 小时前
强烈建议你不要再使用Date类了!!!
java
做一位快乐的码农3 小时前
基于Spring Boot和Vue电脑维修平台整合系统的设计与实现
java·struts·spring·tomcat·电脑·maven
77qqqiqi3 小时前
mp核心功能
java·数据库·微服务·mybatisplus