Redis集群部署

本文详细介绍了如何在Linux环境下搭建Redis的主从复制、哨兵模式以及Cluster集群。首先,通过配置文件修改实现主从复制,并验证主从同步效果。接着,讲解了哨兵模式的作用、原理,部署步骤以及故障转移过程。最后,展示了Cluster集群的搭建过程,包括创建工作目录、修改配置文件、启动服务和测试集群稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


一、搭建Redis主从复制

1.1实验环境

在这里插入图片描述

1.2安装Redis服务

  • 三台服务器都需要安装Redis(安装步骤如:Redis基础提供参考)
  • 关闭防火墙
systemctl stop firewalld
getenforce
setenforce 0

1.3修改Redis配置文件

  • master节点服务器配置
[root@master utils]# vim /etc/redis/6379.conf  
70 bind 0.0.0.0   //修改监听地址为0.0.0.0
137 daemonize yes  //开启守护进程
172 logfile /var/log/redis_6379.log  //指定日志文件目录
264 dir /var/lib/redis/6379  //指定工作目录
700 appendonly yes   //开启AOF持久化功能
[root@master utils]# /etc/init.d/redis_6379 restart  //重启服务使配置生效

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 节点服务器slave1、slave2配置
vim /etc/redis/6379.conf
70 bind 0.0.0.0 		##修改监听地址为0.0.0.0
137 daemonize yes		##开启守护进程
172 logfile/var/log/redis_6379.log
264 dir /var/lib/redis/6379		##指定工作目录
288 replicaof 192.168.27.133 6379		##添加一条指定要同步的Master节点IP和端口
700 appendonly yes		##开启AOF持久化功能

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.4验证主从效果

[root@master utils]# tail -f /var/log/redis_6379.log   //主节点输入查看日志

在这里插入图片描述

[root@master utils]# redis-cli info replication
# Replication  //复制
role:master  //角色是master
connected_slaves:2  //连接从服务器2个
slave0:ip=192.168.27.134,port=6379,state=online,offset=1582,lag=1
slave1:ip=192.168.27.135,port=6379,state=online,offset=1582,lag=1  //master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid:26ff9ff54709807b1e568f24ee28d9f540087bc2  //切换主从的时候master节点标识会有更改	
master_replid2:0000000000000000000000000000000000000000  //复制流中的一个偏移量,master处理完写入命令后,会把命令的字节长度做累加记录,统计在该字段。该字段也是实现部分复制的关键字段
master_repl_offset:1582  //无论主从,以下内容都表示自己上次主实例repid1和复制偏移量;用于兄弟实例或级联复制,主库故障切换
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1582

在这里插入图片描述

[root@master utils]# redis-cli  //登录master创建class键
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set class lisi  
OK
127.0.0.1:6379> get class
"lisi"
master创建class,节点服务器slave1和slave2同步创建

在这里插入图片描述

在这里插入图片描述

二、哨兵模式概述及部署

  • 在主从复制的基础上起到主节点自动故障转移的作用

2.1作用及原理

2.1.1作用

  • 监控
    哨兵会不断地检查主节点和从节点是否运作正常
  • 自动故障转移
    当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点
  • 通知
    哨兵可以将故障转移的结果发送给客户端

2.1.2哨兵模式的原理

  • 它一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票介质选择新的master并将所有slave连接到新的master
  • 整个运行哨兵的集群的数量不得少于3个节点

2.1.3结构

哨兵结构由两部分组成,哨兵节点和数据节点

  • 哨兵节点
    哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据
  • 数据节点
    主节点和从节点都是数据节点

2.1.4工作过程

  • 哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,所以节点上都需要部署哨兵模式,哨兵模式会监控所有的 Redis 工作节点是否正常
  • 当Master 出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个Master,的确出现问题,然后会通知哨兵间会推选出一个哨兵来进行故障转移工作(由该哨兵来指定哪个slave 来做新的master) ,然后从slaves 中选取一个作为新的Master
  • 筛选方式是哨兵互相发送消息,并且参与投票,票多者当选,需要特别注意的是,客观下线是主节点才有的概念,即如果从节点和哨兵节点发生故障,被哨兵主观下线后,将不会再有后续的客观下线和故障转移操作(及哨兵模式只负责 Master的方面,而不管Slaves)
  • 当某个哨兵发现主服务器挂掉了,会将master 中的SentinelRedistance中的 master改为SRI_S_DOWN(主观下线),并通知其他哨兵,告诉他们发现master挂掉了,其他哨兵在接收到该哨兵发送的信息后,也会尝试去连接 master,如果超过半数(配置文件中设置的)确认master挂掉后,会将master中的sentinelRedistance 中的master改为SRI_O_DOWN(客观下线)

2.2哨兵模式部署

2.2.1实验环境

在这里插入图片描述

2.2.2修改哨兵配置文件(所有节点皆需要)

vim /opt/redis-5.0.7/sentinel.conf
17 protected-mode no		##关闭保护模式
21 port 26379		##Redis哨兵默认的监听端口
26 daemonize yes		##开启守护进程
36 logfile "/var/log/sentinel.log"		##指定日志存放路径
65 dir /var/lib/redis/6379		##指定数据库存放路径
84 sentinel monitor mymaster 192.168.35.40 6379 2	##指定哨兵节点;2:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
113 sentinel down-after-milliseconds mymaster 3000		##判定服务器down掉的时间周期,默认30000毫秒 (30秒)
146 sentinel failover- timeout mymaster 180000		##故障节点的最大超时时间为180000 (180秒)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.3启动哨兵模式

  • 节点服务器先启动主节点服务器在启动从节点服务器
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 查看哨兵信息
[root@master redis-5.0.7]# redis-cli -p 26379 info sentinel   //查看哨兵信息;哨兵端口26379
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.27.133:6379,slaves=2,sentinels=3
[1]+  完成                  redis-sentinel sentinel.conf

在这里插入图片描述

2.2.4模拟故障

[root@master redis-5.0.7]# netstat -antp | grep redis  //查看redis-server的进程号


在这里插入图片描述
在这里插入图片描述

  • 查看master哨兵日志
[root@master redis-5.0.7]# tail -f /var/log/sentinel.log

在这里插入图片描述

watch -n 1 redis-cli -p 26379 info sentinel	##先复制一个msater的会话,查看哨兵信息		##查看哨兵信息;status会从sdown->odown->ok,快速变化

在这里插入图片描述
在这里插入图片描述

* status=sdown ##s表示主观下线
* status=odown ##o即objectively客观下线

在这里插入图片描述
在这里插入图片描述

三、Cluster集群部署

  • 主节点负责读写请求和集群信息的维护,从节点只进行主节点数据和状态信息的复制

3.1搭建cluster集群

  • redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟
  • 以端口号进行区分: 3个主节点端口号: 6001/6002/6003, 对应的从节点端口号: 6004/ 6005/ 6006
  • 需要安装redis

3.2创建6个端口的工作目录

cd /opt/redis-5.0.7/utils/
./install_server.sh	##回车,直到出现以下选项,手动修改为"/usr/local/redis/bin/redis-server"
Please select the redis executable path [ ] /usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
  • 创建redis 6个端口的工作目录
[root@redis-server utils]# cd /etc/redis/
[root@redis-server redis]# mkdir -p redis-cluster/redis600{1..6}

在这里插入图片描述

[root@redis-server redis-cluster]# vim /opt/redis.sh
#!/bin/bash
for i in {1..6}
do      
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-   cluster/redis600$i
done 
[root@redis-server redis-cluster]# chmod +x /opt/redis.sh
[root@redis-server redis-cluster]# sh -x /opt/redis.sh

在这里插入图片描述
在这里插入图片描述

3.3修改6个redis的配置文件

  • 修改redis6001,其他五个端口配置文件,除端口号和文件名称除外其余修改相同,只需复制redis6001然后修改redis6002-redis6006
[root@redis-server redis-cluster]# cd /etc/redis/redis-cluster/redis6001
[root@redis-server redis6001]# vim redis.conf
69 bind 127.0.0.1		##注释掉bind项或不修改,默认监听所有网卡
	88 protected -mode no		##修改,关闭保护模式
	92 port 6001		##修改,redis监听端口
	136 daemonize yes		##开启守护进程,以独立进程启动
	832 cluster-enabled yes		## 取消注释,开启群集功能
	840 cluster-config-file nodes-6001.conf		##取消注释,群集名称文件设置
	846 cluster-node-timeout 15000		##取消注释群集超时时间设置
	699 appendonly yes  //修改,开启AOF持久化

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 复制
[root@redis-server redis6001]# cp redis.conf ../redis6002/
cp:是否覆盖"../redis6002/redis.conf"? y
[root@redis-server redis6001]# cp redis.conf ../redis6003/
cp:是否覆盖"../redis6003/redis.conf"? y
[root@redis-server redis6001]# cp redis.conf ../redis6004/
cp:是否覆盖"../redis6004/redis.conf"? y
[root@redis-server redis6001]# cp redis.conf ../redis6005/
cp:是否覆盖"../redis6005/redis.conf"? y
[root@redis-server redis6001]# cp redis.conf ../redis6006/
cp:是否覆盖"../redis6006/redis.conf"? y

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4启动服务

  • 手动启动服务,执行六次
cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf		###启动服务
  • 用脚本根据对应配置文件启动redis
[root@redis-server redis6006]# vim /opt/redis_start.sh   //根据对应配置文件启动redis
#!/bin/bash
	for d in {1..6}
	do
	cd /etc/redis/redis-cluster/redis600$d
	redis-server redis.conf
	done
[root@redis-server redis6006]# chmod +x /opt/redis_start.sh
[root@redis-server redis6006]# sh -x /opt/redis_start.sh
[root@redis-server redis6006]# ps -ef | grep redis

在这里插入图片描述

3.5加入集群

  • 六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点
  • 下面交互的时候需要输入yes才可以创建
  • -replicas 1表示每个主节点有一个从节点
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

在这里插入图片描述

3.6测试集群

[root@redis-server redis6006]# redis-cli -p 6001 -c  //加-c参数,节点之间就可以互相跳转
127.0.0.1:6001> 
127.0.0.1:6001> 
127.0.0.1:6001> cluster slots  //查看节点的哈希槽编号范围
1) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "4e3c2b42d9da4b89e8a0db17872bfd5e79dcb599"
   4) 1) "127.0.0.1"
      2) (integer) 6006
      3) "13ef83008ab718dc943e8308a4da32c2f69ad148"
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 6001
      3) "c19240916d4fa8f903ff656b8408445c1f1d4efc"
   4) 1) "127.0.0.1"
      2) (integer) 6005
      3) "8655337ebc317816b990fd4b0aa4e751b50124fc"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6003
      3