redis分布式集群

本文详细介绍了如何在有限的机器资源下,通过不同端口搭建Redis 5.0.8的分布式集群,包括环境配置、启动脚本、集群创建、槽位分配、数据存取、节点扩容与缩容等关键步骤。

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

搭建一个redis 分布式集群,机器有限,采用不同端口,使用版本 redis-5.0.8

服务器

模拟了7台服器,3个主节点4个从节点。6台服务器比较好,3主3从,多建了一台。

ip
127.0.0.1:6390
127.0.0.1:6391
127.0.0.1:6392
127.0.0.1:6393
127.0.0.1:6394
127.0.0.1:6395
127.0.0.1:63906

3个主从节点构成分布式,单个主从节点内部高可用,每个单节点数据只有一部分,整个集群数据是完整的

环境搭建

  • 配置
    redis.conf配置如下
 # 修改为yes
daemonize yes
#数据存储目录
dir /root/redis-cluster/6390/data
# 修改为 0.0.0.0
bind 127.0.0.1 
# 密码配置,可忽略
requirepass ikamg
masterauth ikang

port 6390
pidfile /var/run/redis_6390.pid
# 开启集群模式
cluster-enabled yes
# 每个集群节点都需要一个配置文件,每个节点处于集群中的角色要告知其他所有节点,这个文件是由redis自己维护的,只需要进行配置即可
cluster-config-file nodes-6390.conf
# 超时时间,超时则认为master宕机,随后进行主备切换
cluster-node-timeout 5000
# 开启AOF
appendonly yes

配置6份配置文件

  • 启动脚本
    start-redis.sh
redis-server /root/redis-cluster/6390/redis.conf
redis-server /root/redis-cluster/6391/redis.conf
redis-server /root/redis-cluster/6392/redis.conf
redis-server /root/redis-cluster/6393/redis.conf
redis-server /root/redis-cluster/6394/redis.conf
redis-server /root/redis-cluster/6395/redis.conf
redis-server /root/redis-cluster/6396/redis.conf
  • 启动
./start-redis.sh  

在这里插入图片描述
启动成功

  • 创建集群

Redis 3.x创建分布式集群需要在一个ruby的环境下,在Redis的src目录下执行:redis-trib.rbn, 此处使用 Redis 5.0,不需要ruby 环境,使用 redis-cli cluster 即可

redis-cli --cluster create 127.0.0.1:6390 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 127.0.0.1:6396 --cluster-replicas 1

在这里插入图片描述
在这里插入图片描述
创建成功,槽位全部分配,平均分配,主从关系已确定

redis 槽位

  • 槽位一共16384个,用来存储集群中所有数据,数据存储位置是由hash(key)%16384 计算结果就是存储的槽位
  • 槽位必须保证完整,副本没有槽位的,当主挂点后副本变为从,主槽位归副本所有
  • 如果主挂掉,且没有可用副本,此时槽位不完整,集群不可用
  • 超过半数以上主挂掉,不管副本是否完整,集群不可用
  • 槽位分布
M: c6a0f6579d032c3655977adbbe155cf2c35501ee 127.0.0.1:6390
   slots:[0-16383] (5461 slots) master
M: 8f1b48b38e31072db126c18385638b088b21fcf2 127.0.0.1:6391
   slots:[5461-10922] (5462 slots) master
M: 277b33cdad19aebd54c789dbe00f1037f111fa07 127.0.0.1:6392
   slots:[10923-16383] (5461 slots) master
S: d331b6fff4b31901b6d865d9115c762cee195db7 127.0.0.1:6393
   replicates 277b33cdad19aebd54c789dbe00f1037f111fa07
S: 36c40c11bc07994eb522311050fdea8351135e11 127.0.0.1:6394
   replicates c6a0f6579d032c3655977adbbe155cf2c35501ee
S: 7948767ef8358d9f1e7094936e7f33e5201d5a48 127.0.0.1:6395
   replicates c6a0f6579d032c3655977adbbe155cf2c35501ee
S: 4dec11e45d58d9533b5ab2af7f3a3ff295290cd0 127.0.0.1:6396
   replicates 8f1b48b38e31072db126c18385638b088b21fcf2
  • 数据存取
127.0.0.1:6390> set a 1
-> Redirected to slot [15495] located at 127.0.0.1:6392
OK
127.0.0.1:6392> set b 2
-> Redirected to slot [3300] located at 127.0.0.1:6390
OK
127.0.0.1:6390> set c 3
-> Redirected to slot [7365] located at 127.0.0.1:6391
OK
127.0.0.1:6391> 
127.0.0.1:6391> get a 
-> Redirected to slot [15495] located at 127.0.0.1:6392
"1"
127.0.0.1:6392> get b 
-> Redirected to slot [3300] located at 127.0.0.1:6390
"2"
127.0.0.1:6390> get c
-> Redirected to slot [7365] located at 127.0.0.1:6391
"3"
127.0.0.1:6391> 
  • 写入a=1时:被存储到第 15495槽位,127.0.0.1:6392 slots:[10923-16383], 被存储在 6392上,查询时也是从6392 查询
  • 集群没有数据库概念,select 失效,keys * 只能查看登陆节点信息

节点扩容

新增 6380、6381 两个节点,6380为主节点,6381为从

  • 新建主节点
  • 分配槽位
  • 配置主节点
  • 新增节点
# 127.0.0.1:6380 任意一个新增节点
# 127.0.0.1:6390 任意一个可用节点 
redis-cli --cluster add-node 127.0.0.1:6380 127.0.0.1:6390 cluster nodes 
  • 分配槽位
#按照节点分配,从那些节点分出一部分槽点给新建节点
redis-cli --cluster reshard 127.0.0.1:6390 --cluster-from c6a0f6579d032c3655977adbbe155cf2c35501ee, 277b33cdad19aebd54c789dbe00f1037f111fa07, 8f1b48b38e31072db126c18385638b088b21fcf2 --cluster-to 99f55dfe4bd4e621760efa79089b51519ae4474d --cluster-slots 4096 --cluster-yes
# 另一种分配方式, 将原有的所有slot进行总量分配
redis-cli --cluster reshard 127.0.0.1:6390 --cluster-from all --cluster-to ac9a38f82c78b7c6f283e1f05c08c8c32726d7dd --cluster-slots 4096 --cluster-yes

在这里插入图片描述

  • 新增节点分配主节点
redis-cli --cluster add-node 127.0.0.1:6381 127.0.0.1:6390 --cluster-slave --cluster-master-id 99f55dfe4bd4e621760efa79089b51519ae4474d

在这里插入图片描述
分配成功

节点缩容

集群新增了 6380,6381 两个节点,把两个节点删除,

  • 先删除从节点6381
  • 转移主节点槽位
  • 删除主节点6380
  • 删除从节点
# 登陆任意节点  127.0.0.1:6390 
redis-cli --cluster del-node 127.0.0.1:6390 e1b0e6fdd23a0ef776cc0893d9bc44adeb1fe5f7
  • 转移槽位
# 转移到其他节点--cluster-from 从哪里转,--cluster-to 到哪 --cluster-slots 槽位个数
redis-cli --cluster reshard 127.0.0.1:6390 --cluster-from 99f55dfe4bd4e621760efa79089b51519ae4474d --cluster-to 277b33cdad19aebd54c789dbe00f1037f111fa07 --cluster-slots 1365 --cluster-yes

redis-cli --cluster reshard 127.0.0.1:6390 --cluster-from 99f55dfe4bd4e621760efa79089b51519ae4474d --cluster-to c6a0f6579d032c3655977adbbe155cf2c35501ee --cluster-slots 1365 --cluster-yes

redis-cli --cluster reshard 127.0.0.1:6390 --cluster-from 99f55dfe4bd4e621760efa79089b51519ae4474d --cluster-to 8f1b48b38e31072db126c18385638b088b21fcf2 --cluster-slots 1365 --cluster-yes

在这里插入图片描述

  • 删除主节点
redis-cli --cluster del-node 127.0.0.1:6390  99f55dfe4bd4e621760efa79089b51519ae4474d

删除成功

集群写操作

  • 客户端向主节点6390写入数据
  • 主节点6390 写入成功后向客户端返回写入成功
  • 主节点6390 先从节点同步数据

从上面过程得知,redis集群,保证了AP,数据是弱一致性,强调最终一致性,可能会导致数据丢失。集群内部出现脑裂时,导致数据丢失。

总结

  • 每个主节点必须要有一个从节点,槽位分布在主节点的,如果一旦启动一个主节点崩溃,槽位丢失,数据不完整,导致服务不可用
  • 数据存储,根据key 的哈希值与槽位取模存储到不同槽位
  • 集群创建后,自动分配槽位。
<think>好的,我需要帮助用户在Linux环境下搭建Redis分布式集群。首先,我得回想一下Redis集群的基本概念。根据引用[1],Redis集群Redis分布式运行模式,通过分片实现数据自动分区和管理,提高可用性和扩展性。用户需要的是部署与配置的具体步骤,所以应该分步骤说明。 首先,环境准备。用户需要在多台服务器或虚拟机上有Linux系统,并且安装Redis。可能需要提到安装Redis的步骤,比如通过源码编译或者包管理器安装。确保所有节点的Redis版本一致,引用[2]提到使用5.0.9版本,所以最好建议用户使用相同或兼容版本。 接下来是修改配置文件。每个节点需要不同的配置文件,设置端口、集群模式、持久化文件等。需要指导用户编辑redis.conf,开启集群模式,设置cluster-config-file,这部分需要具体参数示例,比如port 6379,cluster-enabled yes等。 然后是启动所有节点的Redis服务。用户需要逐个启动每个实例,或者用脚本批量启动。这里可能需要给出启动命令的例子,比如redis-server /path/to/redis.conf。 之后是创建集群。引用[2]中提到了使用redis-cli --cluster create命令,并带有具体的IP和端口,以及副本数。需要解释命令中的参数,比如--cluster-replicas 1表示每个主节点有一个从节点。用户需要替换示例中的IP和端口为自己的实际地址,同时注意防火墙设置,确保节点间通信。 创建完成后,验证集群状态。使用redis-cli --cluster check命令检查节点是否正常,主从关系是否正确。引用[4]提到在从服务器执行info replication查看角色,所以可能需要指导用户如何验证主从配置。 最后,可能还需要说明如何删除集群,比如引用[3]提到的关闭服务并删除相关文件,但用户当前的问题可能不需要这部分,不过可以放在注意事项里。 需要注意的问题包括:端口开放、配置文件正确、版本一致、数据目录权限等。可能还要提醒用户备份数据,处理可能出现的错误,比如节点无法加入集群时的排查步骤。 现在需要将以上步骤结构化,用清晰的中文分步骤说明,并确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,不过在这个问题中可能数学公式较少,但如果有变量或代码示例需要正确格式化。代码块需要用三个反引号包裹,并注明语言。同时,生成相关问题,参考用户提供的示例中的问题形式,比如关于性能优化、节点故障处理等。</think>### Linux Redis分布式集群部署与配置教程 #### 一、环境准备 1. **服务器要求**:至少6台Linux服务器(或虚拟机),3台为主节点,3台为从节点(最小集群配置)[^1]。 2. **安装Redis**:在所有节点安装相同版本的Redis(建议≥5.0,示例使用5.0.9[^2]): ```bash wget http://download.redis.io/releases/redis-5.0.9.tar.gz tar xzf redis-5.0.9.tar.gz cd redis-5.0.9 make && make install ``` #### 二、配置文件修改 1. **创建配置目录**: ```bash mkdir -p /opt/redis/cluster/700{0..5} # 示例端口7000-7005 ``` 2. **编辑配置文件**(以7000端口为例): ```conf port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes daemonize yes ``` 其他节点需修改`port`和`cluster-config-file`名称。 #### 三、启动Redis服务 在所有节点执行: ```bash redis-server /opt/redis/cluster/700X/redis.conf # X为端口号 ``` 验证进程: ```bash ps -ef | grep redis ``` #### 四、创建集群 使用`redis-cli`命令创建集群(需替换实际IP): ```bash redis-cli --cluster create \ 192.168.1.10:7000 192.168.1.11:7001 192.168.1.12:7002 \ 192.168.1.13:7003 192.168.1.14:7004 192.168.1.15:7005 \ --cluster-replicas 1 ``` - `--cluster-replicas 1`:表示每个主节点有1个从节点。 #### 五、验证集群状态 1. **检查集群节点**: ```bash redis-cli -h 192.168.1.10 -p 7000 cluster nodes ``` 2. **查看主从关系**(从节点执行)[^4]: ```bash redis-cli -p 7003 info replication ``` #### 六、注意事项 1. **防火墙开放端口**:需开放Redis端口(如7000-7005)和集群总线端口(Redis端口+10000,如17000-17005)。 2. **数据持久化**:配置文件已开启`appendonly`,数据会写入`appendonly.aof`和`dump.rdb`[^3]。 3. **删除集群方法**:关闭所有节点服务后,删除`nodes-*.conf`、`appendonly.aof`和`dump.rdb`文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值