目录
[1.1 redis集群是什么?](#1.1 redis集群是什么?)
[1.2 redis集群的特点](#1.2 redis集群的特点)
[2.1 节点服务器](#2.1 节点服务器)
[2.2 安装redis](#2.2 安装redis)
[5.1 集群创建命令](#5.1 集群创建命令)
[5.2 集群状态确认](#5.2 集群状态确认)
[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的身份继续运行