Redis集群部署指南

简介: 本章为CentOS7下Redis集群实战教程,涵盖单机安装、主从复制、哨兵高可用及分片集群搭建。通过详细步骤实现多实例部署,掌握Redis集群架构与运维技能。

本章是基于CentOS7下的Redis集群教程,包括:
单机安装Redis
Redis主从
Redis分片集群
1.单机安装Redis
首先需要安装Redis所需要的依赖:
然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:
redis-6.2.4.tar.gz
(2.3 MB)
例如,我放到了/tmp目录:
解压缩:
解压后:
进入redis目录:
运行编译命令:
如果没有出错就安装成功。然后修改redis.conf文件中的一些配置(注意是四个0,不要额外的):
启动Redis:
停止redis服务(ctrl + c也可停止):
2.Redis主从集群
2.1.集群结构
我们搭建的主从集群结构如图:
共包含三个节点,一个主两个从。这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:
IP
PORT
角色
192.168.206.129
7001
master
192.168.206.129
7002
slave
192.168.206.129
7003
slave
2.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
确保下面的配置已经更改(位置也别错)
1)创建目录
我们创建三个文件夹,名字分别叫7001、7002、7003:
如图:
2)恢复原始配置
修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。
3)拷贝配置文件到每个实例目录
然后将redis-6.2.4/redis.conf文件拷贝到三个目录中(在/tmp目录执行下列命令):
4)修改每个实例的端口、工作目录
修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在目录(在/tmp目录执行下列命令):
5)修改每个实例的声明IP(注意IP需要修改)
虚拟机本身有多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息,格式如下(下面这个只是语法说明,别执行):
每个目录都要改,我们一键完成修改(在/tmp目录执行下列命令):
2.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令(在/tmp目录执行下列命令):
启动后:
如果要一键停止,可以运行下面命令:
2.4.开启主从关系
现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
新开窗口执行下述命令,一旦ctrl +c退出后,redis服务将中断
有临时和永久两种模式:
修改配置文件(永久生效)
在redis.conf中添加一行配置:slaveof
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
注意:在5.0以后新增命令replicaof,与salveof效果一致。(注意IP需要修改)
这里我们为了演示方便,使用方式二(在/tmp目录执行下列命令)。通过redis-cli命令连接7002,执行下面命令:
执行完:exit,退出可继续执行后续命令。通过redis-cli命令连接7003,执行下面命令:
然后连接 7001节点,查看集群状态:
结果:
2.5.测试
执行下列操作以测试:
利用redis-cli连接7001,执行set num 123
利用redis-cli连接7002,执行get num,再执行set num 666
利用redis-cli连接7003,执行get num,再执行set num 888
可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。
3.搭建哨兵集群
3.1.集群结构
这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图:
三个sentinel实例信息如下:
节点
IP
PORT
s1
192.168.206.129
27001
s2
192.168.206.129
27002
s3
192.168.206.129
27003
3.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
我们创建三个文件夹,名字分别叫s1、s2、s3:
如图:
然后我们在s1目录创建一个sentinel.conf文件,添加下面的内容:
cd /tmp/s1
touch sentinel.conf
vi sentinel.conf
粘贴下述文本
解读:
port 27001:是当前sentinel实例的端口
sentinel monitor mymaster 192.168.206.129 7001 2:指定主节点信息
mymaster:主节点名称,自定义,任意写
192.168.206.129 7001:主节点的ip和端口
2:选举master时的quorum值
然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中(在/tmp目录执行下列命令):
修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003:
3.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令(在tmp目录执行):
启动后:
3.4.测试
停止7001(当前主节点),此时会在多个哨兵中选举出一个哨兵的master,如下
27001投给27002
27002投给自己
27003投给27002
因此27002变成哨兵master
主观下线变客观下线
哨兵master自己从当前集群中的slave节点中选出一个新的master,原则是:
现有slave节点执行slave of,服从新的master节点
其余哨兵得到哨兵msater的选举通知
此时我们恢复7001,会发现会做一次全量同步
新加入的节点,执行slave of服从当前master(此时是从配置文件中读取)
4.搭建分片集群
4.1.集群结构
分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下
这里我们会在同一台虚拟机中开启6个redis实例,模拟分片集群,信息如下:
IP
PORT
角色
192.168.206.129
7001
master
192.168.206.129
7002
master
192.168.206.129
7003
master
192.168.206.129
8001
slave
192.168.206.129
8002
slave
192.168.206.129
8003
slave
4.2.准备实例和配置
停止原来的所有redis服务(哨兵也要停止),同时删除之前的7001、7002、7003这几个目录,重新创建出7001、7002、7003、8001、8002、8003目录:
在/tmp下准备一个新的redis.conf文件,内容如下:
touch redis.conf
vi redis.conf
将这个文件拷贝到每个目录下:
修改每个目录下的redis.conf,将其中的6379修改为与所在目录一致:
此时可以进到任意目录查看一下,确认是否都存在相关的配置文件
4.3.启动
因为已经配置了后台启动模式,所以可以直接启动服务:
通过ps查看状态:
发现服务都已经正常启动:
如果要关闭所有进程,可以执行命令:
或者(推荐这种方式):
4.4.创建集群
更多测试细节也可查看:https://www.yuque.com/xiankanpengyouquandisitiaodongtai/diods0/fzoohtlg0r8gz6cd#ecac7084
虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。
我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。
1)Redis5.0之前(我们版本是之后,不适用这个)
Redis5.0之前集群命令都是用redis安装包下的src/redis-trib.rb来实现的。因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。
然后通过命令来管理集群:
2)Redis5.0以后
我们使用的是Redis6.2.4版本,集群管理以及集成到了redis-cli中,格式如下:
命令说明:
redis-cli --cluster或者./redis-trib.rb:代表集群操作命令
create:代表是创建集群
--replicas 1或者--cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master
运行后的样子:
这里输入yes,则集群开始创建:
通过命令可以查看集群状态(下面端口可以是集群中的任意端口都行):
其中的映射关系分析如下图
4.5.测试
尝试连接7001节点,存储一个数据:
Shell
运行代码
复制代码
1
2
3
4
5
6
7
8

连接

redis-cli -p 7001

存储数据

set num 123

读取数据

get num

再次存储

set a 1
结果悲剧了:
图片加载失败
集群操作时,需要给redis-cli加上-c参数才可以:
Shell
运行代码
复制代码
1
redis-cli -c -p 7001
这次可以了:

相关文章
|
21天前
|
运维 负载均衡 JavaScript
Nginx负载均衡故障转移(手把手教你搭建高可用Web服务)
本教程详解Nginx负载均衡与故障转移配置,通过upstream模块实现高可用反向代理。即使后端服务器宕机,Nginx也能自动切换流量,保障服务连续性,适合运维新手快速上手。
|
SQL 机器学习/深度学习 分布式计算
大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
815 1
|
开发者
ThreeJs实现小球自由落体效果
这篇文章详细介绍了如何在Three.js中利用物理引擎Cannon.js实现小球自由落体效果,包括物理世界的创建、物体的添加及同步物理状态到三维场景中的具体实现。
295 3
ThreeJs实现小球自由落体效果
|
运维 关系型数据库 分布式数据库
阿里云PolarDB:引领云原生数据库创新发展
阿里云PolarDB引领云原生数据库创新,2024云栖大会将分享其最新发展及在游戏行业的应用。PolarDB凭借弹性、高可用性、多写技术等优势,支持全球80多个站点,服务1万多家企业。特别是针对游戏行业,PolarDB助力Funplus等公司实现高效运维、成本优化和业务扩展。通过云原生能力,PolarDB推动游戏业务的全球化部署与快速响应,提升用户体验并保障数据安全。未来,PolarDB将继续探索AI、多云管理等前沿技术,为用户提供更智能的数据基础设施。
597 2
|
消息中间件 Ubuntu Java
Kafka安装部署
Kafka安装部署
|
消息中间件 JSON 大数据
大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
330 4
|
API 算法框架/工具
【threejs教程】三维物体与三维向量
【8月更文挑战第7天】threejs教程:三维物体与三维向量
374 3
【threejs教程】三维物体与三维向量
|
网络协议 Go
Swoole与Go系列教程之TCP服务的应用
TCP(传输控制协议)的出现是为了解决计算机网络中的数据可靠传输和连接管理的问题。在早期的计算机网络中,特别是在分组交换和互联网的发展初期,网络是不可靠的,存在丢包、错误和延迟等问题。
1178 0
Swoole与Go系列教程之TCP服务的应用
|
应用服务中间件 持续交付 nginx
[nginx]借助nginx实现自动获取本机IP
[nginx]借助nginx实现自动获取本机IP
312 5
|
消息中间件 监控 Kafka
【Kafka】分区副本中的 Leader 如果宕机但 ISR 却为空该如何处理
【4月更文挑战第12天】【Kafka】分区副本中的 Leader 如果宕机但 ISR 却为空该如何处理