ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Redis集群的三种方式(二)!

Redis集群的三种方式(二)!

原创 Linux操作系统 作者:老男孩Linux 时间:2025-11-27 13:56:38 0 删除 编辑

   哨兵模式部署

   | 准备3个Redis实例

  (可以直接基于上一节搭建的主从复制环境即可)

  | 创建sentinel的配置文件,数据,日志存储目录

mkdir /oldboyedu/softwares/redis16379
cat > /oldboyedu/softwares/redis16379/sentinel.conf <<EOF
bind 10.0.0.112 127.0.0.1port 16379dir /oldboyedu/data/redis16379
sentinel monitor oldboyedu_master 10.0.0.112 16370 1sentinel down-after-milliseconds oldboyedu_master 5000sentinel auth-pass oldboyedu_master oldboyedu
EOF

  配置文件参数说明如下:

  | 启动sentinel进程并查看日志

  启动sentinel进程

redis-sentinel /oldboyedu/softwares/redis16379/sentinel.conf &> /oldboyedu/logs/redis16379/sentinel.log &

  查看日志信息

tail -100f /oldboyedu/logs/redis16379/sentinel.log

  | 手动停止主库运行,模拟主库宕机

  手动将主库宕机,观察从库被sentinel实现了自动切换

redis-cli -p 16370 -a oldboyedu SHUTDOWN# 由于我们将主库服务停了,因此无法再次连接主库了redis-cli -p 16370 -a oldboyedu INFO REPLICATION  
redis-cli -p 16371 -a oldboyedu INFO REPLICATION

  查看sentinel的日志信息,不难发现有记录切换的过程,如下所示

tail -100f /oldboyedu/logs/redis16379/sentinel.log

  | 手动修复宕机的主库,sentinel会自动发现

  修复之后,之前宕机的主库会自动加入集群并成为slaves节点

redis-server /oldboyedu/softwares/redis16370/redis.conf 
redis-cli -p 16370 -a oldboyedu INFO REPLICATION

  温馨提示:除了提到上面的变化外,还有一点变化就是配置文件也修改了,每个"slave"节点都新增了以下两行:

  (本案例只有"redis16370"和"redis16372"这两个实例的配置文件是slave节点,因此这两个节点中是存在的!)

# tail -3 /oldboyedu/softwares/redis16370/redis.conf# Generated by CONFIG REWRITEuser default on #4208512d2963b999e0ef7a467cb42671c30be4d629ec75536a0eb6db15ee0d90 ~* &* +@allreplicaof 10.0.0.112 16371# tail -3 /oldboyedu/softwares/redis16372/redis.conf# Generated by CONFIG REWRITEuser default on #4208512d2963b999e0ef7a467cb42671c30be4d629ec75536a0eb6db15ee0d90 ~* &* +@allreplicaof 10.0.0.112 16371

  Cluster模式部署

  | 实验环境说明

  在生产环境中,如果部署6个redis实例,一般会放到3台硬件服务器

  在企业规划中,一个分片被分配到两个不同的物理机,防止硬件主机宕机造成的整个分片数据丢失

  温馨提示:

  本案例为了实验方便,就直接将6个Redis实例放在同一个节点上,对应的端口号为:63790-63795

  | 创建多Redis实例使用的配置文件,数据,日志目录

mkdir -pv /oldboyedu/softwares/redis1000{0..5}mkdir -pv /oldboyedu/data/redis1000{0..5}mkdir -pv /oldboyedu/logs/redis1000{0..5}

  | 为各个Redis实例创建配置文件

# 创建"redis10000"实例的配置文件cat > /oldboyedu/softwares/redis10000/redis.conf <<EOF
port 10000daemonize yes
pidfile /oldboyedu/data/redis10000/redis.pid
loglevel notice
logfile /oldboyedu/logs/redis10000/redis.log
dbfilename dump.rdbdir /oldboyedu/data/redis10000
bind 10.0.0.112 127.0.0.1# 配置RDB持久化策略save 900 1save 300 10save 60 10000# 配置AOF持久化appendonly yes
appendfsync everysec# 配置Redis Cluster模式protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000EOF# 创建"redis10001"实例的配置文件cat > /oldboyedu/softwares/redis10001/redis.conf <<EOF
port 10001daemonize yes
pidfile /oldboyedu/data/redis10001/redis.pid
loglevel notice
logfile /oldboyedu/logs/redis10001/redis.log
dbfilename dump.rdbdir /oldboyedu/data/redis10001
bind 10.0.0.112 127.0.0.1# 配置RDB持久化策略save 900 1save 300 10save 60 10000# 配置AOF持久化appendonly yes
appendfsync everysec# 配置Redis Cluster模式protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000EOF# 创建"redis10002"实例的配置文件cat > /oldboyedu/softwares/redis10002/redis.conf <<EOF
port 10002daemonize yes
pidfile /oldboyedu/data/redis10002/redis.pid
loglevel notice
logfile /oldboyedu/logs/redis10002/redis.log
dbfilename dump.rdbdir /oldboyedu/data/redis10002
bind 10.0.0.112 127.0.0.1# 配置RDB持久化策略save 900 1save 300 10save 60 10000# 配置AOF持久化appendonly yes
appendfsync everysec# 配置Redis Cluster模式protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000EOF# 创建"redis10003"实例的配置文件cat > /oldboyedu/softwares/redis10003/redis.conf <<EOF
port 10003daemonize yes
pidfile /oldboyedu/data/redis10003/redis.pid
loglevel notice
logfile /oldboyedu/logs/redis10003/redis.log
dbfilename dump.rdbdir /oldboyedu/data/redis10003
bind 10.0.0.112 127.0.0.1# 配置RDB持久化策略save 900 1save 300 10save 60 10000# 配置AOF持久化appendonly yes
appendfsync everysec# 配置Redis Cluster模式protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000EOF# 创建"redis10004"实例的配置文件cat > /oldboyedu/softwares/redis10004/redis.conf <<EOF
port 10004daemonize yes
pidfile /oldboyedu/data/redis10004/redis.pid
loglevel notice
logfile /oldboyedu/logs/redis10004/redis.log
dbfilename dump.rdbdir /oldboyedu/data/redis10004
bind 10.0.0.112 127.0.0.1# 配置RDB持久化策略save 900 1save 300 10save 60 10000# 配置AOF持久化appendonly yes
appendfsync everysec# 配置Redis Cluster模式protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000EOF# 创建"redis10005"实例的配置文件cat > /oldboyedu/softwares/redis10005/redis.conf <<EOF
port 10005daemonize yes
pidfile /oldboyedu/data/redis10005/redis.pid
loglevel notice
logfile /oldboyedu/logs/redis10005/redis.log
dbfilename dump.rdbdir /oldboyedu/data/redis10005
bind 10.0.0.112 127.0.0.1# 配置RDB持久化策略save 900 1save 300 10save 60 10000# 配置AOF持久化appendonly yes
appendfsync everysec# 配置Redis Cluster模式protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000EOF

  配置参数说明:

  温馨提示:

  1、Redis的端口号范围在10000~55535之间。这是因为当我们启动各个redis实例后,会监听在对应redis实例的端口上加10000;

  2、由于上面我使用了"protected-mode no"指令,表示不开启安全模式,如果设置为"YES",尽管配置了"requirepass"和"masterauth"这两个配置项,我们在将redis节点加入到集群时依旧会报错哟!

  3、Redis cluster模式无需像redis sentinel模式那样有一个专门的监控模式;

  | 启动各个Redis实例

redis-server /oldboyedu/softwares/redis10000/redis.conf
redis-server /oldboyedu/softwares/redis10001/redis.conf
redis-server /oldboyedu/softwares/redis10002/redis.conf
redis-server /oldboyedu/softwares/redis10003/redis.conf
redis-server /oldboyedu/softwares/redis10004/redis.conf
redis-server /oldboyedu/softwares/redis10005/redis.conf

  | 将节点加入集群管理

redis-cli --cluster create 10.0.0.112:10000 10.0.0.112:10001 10.0.0.112:10002 10.0.0.112:10003 10.0.0.112:10004 10.0.0.112:10005 --cluster-replicas 1

  注意:这里需要自己手动输入yes,如果超时了还没有输入,则会自动退出,需要再次创建!

  看到以下信息说明创建redis缓存库成功:

  | 查看集群的状态

# 查看集群的状态redis-cli -p 10005 CLUSTER NODES# 查看master节点的状态redis-cli -p 10005 CLUSTER NODES | grep "master"# 查看slave节点的状态redis-cli -p 10005 CLUSTER NODES | grep "slave"

  每项的含义如下:

  各flags的含义 (上面所说数据项3):

   温馨提示:

  1、如果有"myself"字样,说明你正在连接的是哪个节点;

  2、注意观察槽位编号信息,比如"10.0.0.112:10000 master"被分配到的槽位号是"0-5460",而"10.0.0.112:10001"被分配到的槽位号是"5461-10922","10.0.0.112:10002 master"被分配到的槽位号是"10923-16383";

  3、每个redis实例都有其独有的id编号,比如"10.0.0.112:10000 master"的编号为"eefe41adf0a9dc823ef56183881bfa14f10571b9",这有点类似于MySQL的"server_uuid";

  总结:在本教程中,我们通过一些示例学习了如何去部署Redis的三种集群,你学会了吗?


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3103693/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
老男孩it教育——致力于帮助有志向的年轻人通过努力学习获得体面的工作和生活。专注于Linux云计算运维、Python全栈开发、网络安全、新媒体运营、容器云架构师、MySQL数据库、go语言的培训。学习可call:18710030740

注册时间:2019-11-06

  • 博文量
    389
  • 访问量
    1010388