redis 集群搭建

目录

1.redis集群简介

[1.1 redis集群是什么?](#1.1 redis集群是什么?)

[1.2 redis集群的特点](#1.2 redis集群的特点)

2.环境准备

[2.1 节点服务器](#2.1 节点服务器)

[2.2 安装redis](#2.2 安装redis)

3.配置节点

4.启动节点

5.创建集群

[5.1 集群创建命令](#5.1 集群创建命令)

[5.2 集群状态确认](#5.2 集群状态确认)

6.集群测试

[6.1 数据存储](#6.1 数据存储)

[6.2 故障转移](#6.2 故障转移)

1.redis集群简介

1.1 redis集群是什么?

Redis 集群是 Redis 的一种分布式部署方式,旨在实现数据的水平扩展和高可用性。通过将数据分散存储在多个节点上,Redis 集群能够处理更大的数据集并提供更高的并发访问能力。

1.2 redis集群的特点

redis 集群主要有以下特点:

分片:

  • 数据在不同节点之间分布,使用哈希槽(hash slots)来管理。
  • 默认情况下,Redis 集群支持 16384 个哈希槽,数据根据键值进行分配。

高可用性:

  • 每个主节点可以有一个或多个从节点,从节点负责备份主节点的数据。
  • 当主节点故障时,从节点可以自动提升为主节点,确保服务持续可用。

动态扩展:

  • 可以在运行时添加或移除节点,以适应变化的负载需求。

读写分离:

  • 可以配置从节点处理读请求,而主节点处理写请求,以提高性能。

2.环境准备

2.1 节点服务器

本文章集群使用虚拟机实现,系统为ubuntu18.04,由于资源有限,所以只是用两台虚拟机实现,仅供参考:

|-----------------|----------------|
| 地址 | 节点 |
| 192.168.145.136 | 6381、6382、6383 |
| 192.168.145.137 | 6384、6385、6386 |

注意:虚拟机之间必须能够相互通信,可以使用ping命令测试。

2.2 安装redis

在ubuntu上下载redis:将以下代码依次在终端中执行

bash 复制代码
sudo apt-get install lsb-release curl gpg
bash 复制代码
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
bash 复制代码
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
bash 复制代码
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
bash 复制代码
sudo apt-get update
bash 复制代码
sudo apt-get install redis

如果是在其他系统上安装redis,可以到redis官网查看如何下载........

本文章使用的redis版本为7.2.5

3.配置节点

△:只演示一台虚拟机的操作,其他的操作一样。

redis安装成功后会在 /etc 目录下生成子目录 redis ,redis的默认配置文件 redis.conf 会存放在这里。我们可以不用这个配置文件,自己新建配置文件。

在 redis 目录下新建目录 cluster :

在 cluster 目录下新建子目录:

目录名称自定义。

随便在一个子目录中新建配置文件 redis.conf 并在配置文件中添加下图内容:

bash 复制代码
# redis 节点端口,自定义
port 6381
# 后台运行
daemonize yes
# 守护模式
protected-mode no
# 开启集群模式
cluster-enabled yes
cluster-config-file "nodes-6381.conf"
cluster-node-timeout 5000
appendonly yes
masterauth "111111"
databases 1

注意:各个节点端口不同,集群配置文件名称自定义...

4.启动节点

执行以下命令启动每个节点,注意配置文件的地址:

bash 复制代码
// 这里的配置文件指向你的配置文件的位置
sudo redis-server /etc/redis/cluster/6381/redis.conf

使用命令 ps -ef|grep redis-server 查看进程可以看到每个端口后面都有【 cluster 】,这表明该端口的redis实例是集群节点:

5.创建集群

启动完全部节点后就可以创建集群了

5.1 集群创建命令

执行下列命令便可创建集群:

bash 复制代码
// ip地址跟端口号按实际情况设置
// --cluster-replicas 1 表示为每个master节点配置一个slave
redis-cli --cluster create 192.168.145.136:6381 192.168.145.136:6382 192.168.145.136:6383 192.168.145.137:6384 192.168.145.137:6385 192.168.145.137:6386 --cluster-replicas 1

5.2 集群状态确认

集群创建完成后,需要确认集群是否处于正常状态。

集群主要查看 集群整体信息、槽位分配、节点信息。

在确认集群状态之前,需要连接其中一个节点。

bash 复制代码
// 因为之前没有设置 requirepass,所以不需要输入密码
// 一定要指定集群的一个端口,否则会连接默认的6379端口
redis-cli -p 6381 -c

5.2.1 集群信息

集群信息主要包含 集群状态、被分配的槽位数量、正常槽位数量、部分故障槽位数量、完全故障槽位数量、已识别节点数量、master节点数量......

查看集群信息的命令:

bash 复制代码
cluster info

执行上述命令后会出现下图内容:

5.2.2 集群槽位分配

redis集群有16384个槽位,这些槽位会分给master节点,slave节点不会参数槽位的分配。

查看槽位分配的命令:

bash 复制代码
cluster slots

槽位分配内容:

5.2.3 集群节点信息

节点信息会显示各个节点的id、节点性质、节点状态、节点端口。

6.集群测试

确认集群正常运行后,我们可以对集群进行测试,确保集群能够正常使用已经某一个master节点发生故障时,其slave节点会 顶替master 节点,实现故障转移。

6.1 数据存储

redis作为一个基于内存的高性能数据库,最主要就是存储数据。redis集群作为redis的分布式部署方式,最终目的是提高redis读写性能,所以需要测试集群是否可以正常读写数据。

连接redis之后,在控制台中执行简单的读写命令:

执行简单的数据读写命令后,如果如上图一样执行成功,说明该redis集群可以正常使用。

6.2 故障转移

redis集群有一特点便是故障转移,当主节点出现故障时,集群会自动检测并进行故障转移,将从节点提升为主节点,从节点会继承之前主节点的所有槽位,之前出现故障的主节点即使重新运行,因为它已经被替代了,所以会以从节点的身份回归集群中。

下面连接一个master节点,并使用 shutdown 命令将该节点关闭。

连接6381端口的节点并关闭它,查看它的slave节点6386的变化。

关闭前:

关闭后:可以看到端口号为6386的redis节点已经变成了master

重新启动后:原来的6381端口的redis节点不会变回master,而是以slave的身份继续运行

相关推荐
你的微笑,乱了夏天10 分钟前
linux centos 7 安装 mongodb7
数据库·mongodb
远游客071312 分钟前
centos stream 8下载安装遇到的坑
linux·服务器·centos
工业甲酰苯胺21 分钟前
分布式系统架构:服务容错
数据库·架构
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain2 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship2 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站2 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶2 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
LIKEYYLL2 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3213 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵