redis 集群

本文详细介绍了如何配置和管理Redis集群,包括主从复制、数据分片、集群创建、节点添加与移除、故障修复等关键步骤,展示了Redis集群在数据高可用性和水平扩展方面的实践。

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

哨兵机制配置的主从复制默认,每台机器上都存在所有数据的备份。水平扩展不太方便。

redis 集群不光实现了主从复制,还实现了数据的分开存储。一个集群中可以有多个主从复制模式。一个主从复制模式就存储一块数据,另外一个主从复制存储另外的数据。

redis 集群配置的要求 一个集群中最少要有三队主从复制复制模式。一对主从复制模式需要一主一备,最小的一个redis集群需要几台主机?6台。

查看当前进程

image.png

杀死之前的进程

[root@localhost ~]# kill -9 1576 1581 1586 1591 1596 1601 1779

再查看下当前进程

[root@localhost zhucong]# ps -ef|grep redis

image.png

进入到 /opt 目录下,创建文件夹 cluster,并创建子文件夹 7001 , 7002 , 7003 , 7004 , 7005 ,7006

[root@localhost zhucong]# cd ../../
[root@localhost opt]# mkdir cluster
[root@localhost opt]# ls
cluster  containerd  nginx-1.19.0.tar.gz  redis-5.0.4  redis-5.0.4.tar.gz
[root@localhost opt]# cd cluster
[root@localhost cluster]# mkdir 7001 7002 7003 7004 7005 7006
[root@localhost cluster]# ls
7001  7002  7003  7004  7005  7006
[root@localhost cluster]#

这几个子文件加复制配置文件。

port 7001
cluster-enabled yes
cluster-config-file nodes7001.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid
属性名说明
port端口号
cluster-enabled是否开启redis集群模式
cluster-config-file当前节点的集群的配置文件名称,这个文件不需要我们往文件中写东西,他的作用是在集群启动之后记录记录集群的一些信息,以便当前节点挂了重启之后能把原先的集群信息读回来。
cluster-node-timeout集群节点的超时时间
appendonly开启AOF日志模式
daemonize配置后台启动
pidfile记录当前节点运行起来的进程号

配置7001的配置文件

[root@localhost cluster]# vim 7001/redis.conf

输入i , 粘贴上面的配置信息

image.png

配置7002的配置文件

[root@localhost cluster]# vim 7002/redis.conf

按esc,:%s/7001/7002/g 把端口号改为 7002

:wq 保存退出

image.png

配置7003的配置文件

[root@localhost cluster]# vim 7003/redis.conf

按esc,:%s/7001/7003/g 把端口号改为 7003

:wq 保存退出

image.png

依次把7004、7005、7006的进行配置,操作都是把配置信息复制,把端口号改为对应的端口号,保存退出。

配置完成之后。

启动7001到7006所有的redis服务:

image.png

查看下当前进程

image.png

每个服务进程后面都有 [cluster] , 这就是以集群模式开启redis服务。现在这6个命令还没有形成一个整体。

查看集群管理的命令

image.png

执行创建集群的命令

redis-cli --cluster create 192.168.25.10:7001 192.168.25.10:7002 192.168.25.10:7003 192.168.25.10:7004 192.168.25.10:7005 192.168.25.10:7006 --cluster-replicas 1

image.png

redis中 集群中插槽slot的意思:

redis 集群中共有16384个插槽。这些插槽你可以自己分配到不同的主从复制模式中 ,来达到把数据分

开存储的目的。

image.png

上面最后一行的 Can I set the above configuration? (type ‘yes’ to accept): yes 我能使用上面的配置吗?yes就是接受

image.png

现在集群已经创建好了。

集群管理的命令

查看集群的状态

以集群的方式连接集群的节点

比如连接7001节点

[root@localhost cluster]# redis-cli -c -h 192.168.25.10 -p 7001

重定向到7002的5798的插槽上了

image.png

查看集群的状态

cluster info

image.png

cluster_state:ok 集群正常

cluster_slots_assigned:16384 集群的插槽数量

查看集群节点信息

cluster nodes

image.png

这里停掉 7001主机的服务,重启7001的客户端,重启7006的客户端

image.png

查看集群状态

image.png

查看集群节点信息

image.png

添加集群节点

拷贝 7006到7007中

[root@localhost cluster]# cp -r 7006 7007
[root@localhost cluster]# vim 7007/redis.conf

image.png

启动7007的服务

image.png

添加一个主机 192.168.25.10:7007 添加为主机:

redis-cli --cluster add-node 192.168.25.10:7007 192.168.25.10:7001

image.png

新节点被正确添加了

主机创建之后,需要分配插槽才能存储数据。

分配插槽命令:

redis-cli --cluster reshard 192.168.25.10:7004

image.png

image.png

可以看到7007有插槽了

image.png

测试一下

image.png

添加备机也可以

redis-cli --cluster add-node 192.168.25.10:7008 192.168.25.10:7002 --cluster-master-id f64c83e30c6751fe443b3da2148936ca5cda3ca1 #复制的是7007的id
[root@localhost 7008]# cd ../7007
[root@localhost 7007]# ls
appendonly.aof  nodes7007.conf  redis.conf
[root@localhost 7007]# clear
[root@localhost 7007]# cd ../7008
[root@localhost 7008]# ls
redis.conf
[root@localhost 7008]# vim redis.conf
[root@localhost 7008]# redis-server redis.conf
91273:C 21 Mar 2021 03:01:20.927 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
91273:C 21 Mar 2021 03:01:20.927 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=91273, just started
91273:C 21 Mar 2021 03:01:20.927 # Configuration loaded
[root@localhost 7008]# ps -ef|grep redis
root      82389      1  0 00:04 ?        00:01:30 redis-server *:7002 [cluster]
root      82399      1  0 00:04 ?        00:01:30 redis-server *:7003 [cluster]
root      82408      1  0 00:05 ?        00:01:28 redis-server *:7004 [cluster]
root      82417      1  0 00:05 ?        00:01:28 redis-server *:7005 [cluster]
root      83514      1  0 00:26 ?        00:01:21 redis-server *:7006 [cluster]
root      85571      1  0 01:08 ?        00:00:58 redis-server *:7001 [cluster]
root      86647      1  0 01:29 ?        00:00:48 redis-server *:7007 [cluster]
root      91274      1  0 03:01 ?        00:00:00 redis-server *:7008 [cluster]
root      91285  91086  0 03:01 pts/0    00:00:00 grep --color=auto redis
[root@localhost 7008]# redis-cli --cluster help


[root@localhost 7008]# redis-cli -c -h 192.168.25.10 -p 7005

[root@localhost 7008]# redis-cli --cluster add-node 192.168.25.10:7008 192.168.25.10:7002 --cluster-slave --cluster-master-id f64c83e30c6751fe443b3da2148936ca5cda3ca1

[root@localhost 7008]# redis-cli -c -h 192.168.25.10 -p 7005
192.168.25.10:7005> cluster nodes
dcb403413167205fe555041f7050dccb381aef77 :0@0 master,fail,noaddr - 1616266331987 1616266330945 0 disconnected
4a30d80d3693d21429643ac18f8140008efc5d5f 192.168.25.10:7001@17001 slave 48e51281061027ccf52fafbdd4084dc0110993b8 0 1616267373789 7 connected
aae5f453bc049c67c73040551674ef9a66486f61 192.168.25.10:7003@17003 master - 0 1616267373696 3 connected 11073-16383
35ddfc2a0097c82637ca281e9d29bfce98d2846d 192.168.25.10:7005@17005 myself,slave aae5f453bc049c67c73040551674ef9a66486f61 0 1616267371000 5 connected
ed43781efc73f601ab31882ff84ad2364bdc4d0f 192.168.25.10:7008@17008 slave f64c83e30c6751fe443b3da2148936ca5cda3ca1 0 1616267373000 8 connected
f64c83e30c6751fe443b3da2148936ca5cda3ca1 192.168.25.10:7007@17007 master - 0 1616267373611 8 connected 0-149 10923-11072
48e51281061027ccf52fafbdd4084dc0110993b8 192.168.25.10:7006@17006 master - 0 1616267373618 7 connected 150-5460
ca40cc0b0b4c534baa8119bbf882739901de482f 192.168.25.10:7004@17004 slave 640b6258f2dc610defe5588090c8acbc646711d4 0 1616267371604 4 connected
640b6258f2dc610defe5588090c8acbc646711d4 192.168.25.10:7002@17002 master - 0 1616267371706 2 connected 5461-10922
192.168.25.10:7005> quit

结束 7002 7004的进程

修复集群命令

redis-cli --cluster fix 192.168.25.10:7005
f84ad2364bdc4d0f 192.168.25.10:7008@17008 slave f64c83e30c6751fe443b3da2148936ca5cda3ca1 0 1616267373000 8 connected
f64c83e30c6751fe443b3da2148936ca5cda3ca1 192.168.25.10:7007@17007 master - 0 1616267373611 8 connected 0-149 10923-11072
48e51281061027ccf52fafbdd4084dc0110993b8 192.168.25.10:7006@17006 master - 0 1616267373618 7 connected 150-5460
ca40cc0b0b4c534baa8119bbf882739901de482f 192.168.25.10:7004@17004 slave 640b6258f2dc610defe5588090c8acbc646711d4 0 1616267371604 4 connected
640b6258f2dc610defe5588090c8acbc646711d4 192.168.25.10:7002@17002 master - 0 1616267371706 2 connected 5461-10922
192.168.25.10:7005> quit

结束 7002 7004的进程

修复集群命令

redis-cli --cluster fix 192.168.25.10:7005
### Redis 集群的搭建与配置 #### 一、Redis 集群简介 Redis 是一种高性能的键值存储系统,支持多种据结构操作。通过集群模式可以实现分布式存储和高可用性。Redis 集群允许多个 Redis 实例协同工作,提供更高的吞吐量和更强的据持久化能力。 --- #### 二、环境准备 在开始之前,需确认以下条件已满足: - 所有服务器的操作系统版本一致(如 CentOS 7 或 Windows),并安装了相同版本的 Redis 软件。 - 已关闭防火墙或开放必要的端口(默认 Redis 使用 6379 及其衍生端口)。 - 每台服务器上至少有两个 Redis 实例运行,分别作为主节点和从节点[^1]。 --- #### 三、具体步骤 ##### 1. 下载并解压 Redis 文件 下载指定版本的 Redis 压缩包(如 Redis 6.2.5 或更高版本),将其解压到目标路径下。例如,在 Linux 中执行以下命令: ```bash wget http://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5.tar.gz cd redis-6.2.5 make ``` ##### 2. 创建多个实例目录 为每个 Redis 实例创建独立的工作目录,并复制 `redis.conf` 至对应文件夹中。例如: ```bash mkdir -p /service/redis/{6379,6380} cp redis.conf /service/redis/6379/ cp redis.conf /service/redis/6380/ ``` ##### 3. 修改配置文件 编辑每个实例下的 `redis.conf` 文件,设置不同的监听端口号和其他必要参。以下是关键配置项: - 设置绑定 IP 地址:`bind 0.0.0.0` - 关闭保护模式:`protected-mode no` - 开启集群功能:`cluster-enabled yes` - 指定集群配置文件位置:`cluster-config-file nodes-{port}.conf` - 设定日志级别:`loglevel notice` ##### 4. 启动 Redis 实例 依次启动各个 Redis 实例。例如: ```bash redis-server /service/redis/6379/redis.conf redis-server /service/redis/6380/redis.conf ``` 如果是在多台物理机上部署,则需要远程登录每台机器重复上述过程[^2]。 ##### 5. 构建集群拓扑 利用 `redis-cli` 的集群管理工具完成初始化操作。假设当前存在六个节点分布在三台主机上,则可输入如下指令构建集群关系: ```bash redis-cli --cluster create \ 192.168.x.y:6379 192.168.x.z:6379 ... \ --replicas 1 ``` 其中 `--replicas` 参表示每个主节点分配几个副本[^4]。 ##### 6. 验证集群状态 最后可以通过以下方式验证集群是否正常运作: ```bash redis-cli -c -h {任意IP} -p {任一口号} CLUSTER INFO CLUSTER NODES PING SET key value GET key ``` --- #### 四、注意事项 - 如果使用 Docker 容器来部署 Redis 集群,请确保容器间网络互通良好。 - 对于 Windows 平台上的开发测试场景,可通过批处理脚本来简化服务启动流程[^3]。 --- #### 五、示例代码片段 下面展示了一个简单的 Python 程序用于连接至 Redis 集群并向其中写入一条记录: ```python import redis r = redis.StrictRedisCluster(startup_nodes=[{"host": "127.0.0.1", "port": "6379"}], decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值