首页 > 数据库 >在Linux部署Redis Cluster集群

在Linux部署Redis Cluster集群

时间:2023-04-05 16:59:54浏览次数:46  
标签:Cluster 0.1 create Redis cluster 集群 Linux 节点

前言

本文讲述在 Linux 系统部署 Redis Cluster 实现数据分片的具体步骤。

请参考 Redis 单机部署 下载编译。

Redis Cluster是什么?

Redis Cluster 是官方提供的一种用数据分片来实现横向扩容的解决方案,由一个或多个 Redis 服务组成一个无主集群。

对 Key 使用哈希算法将数据分散倒 16384 个哈希槽,让集群中的节点一起来分摊这些槽位;每个节点都可以进行哈希运算,并且保存了所有节点与槽位的映射关系。

客户端通过直连集群任一节点发送操作指令,当操作经过节点哈希计算得出指令不应由本节点处理时,会向客户端返回 MOVED 错误,并附带正确的节点地址,客户端再访问正确的节点来完成操作。

部署步骤

编辑脚本

可以先看下目录下的 README 文档了解如何使用脚本。

echo "进入集群脚本目录" > /dev/null
cd ~/soft/redis/redis-6.2.5/utils/create-cluster/

echo "编辑脚本" > /dev/null
vim create-cluster

脚本开始部分:PORT=30000 代表创建的集群节点端口号从 30000 开始;NODES=6 代表集群节点总数为 6;REPLICAS=1 代表每个节点包含一个副本/从节点,那就意味着集群由 3 个主节点分摊槽位并提供服务,每个主节点分配一个从节点实现高可用。

在这里插入图片描述

创建节点

节点产生的文件都会放在当前所在目录下。

./create-cluster start

在这里插入图片描述

自动分配集群

./create-cluster create

从控制台可以看到将 16384 个槽位分成了 3 份,并分配给了 30001~30003 主节点,30004~30005 分别追随了三个主节点,最后输入 yes 同意这个配置。

黄颜色警告是指从节点和主节点在一台服务器,实际使用肯定需要分开实现高可用。

image-20210926175335749

image-20210926175453862

停止、清除集群

# 停止集群
./create-cluster stop

# 清除日志、数据等相关文件
./create-cluster clean

手动分配集群

其实这种方式跟自动分配最终实现是一样的,只不过自动分配的脚本帮我们拼接了指令然后执行了而已。

# 用脚本创建 6 个节点
./create-cluster start

# 分配,指明节点地址和副本数量
redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1

测试

连接节点设置数据,加上 -c 表示操作 Cluster 节点,好处是如果节点经过哈希计算告诉客户端正确的节点地址时,客户端会自动帮你重定向到正确的节点完成操作。

你也可以不加 -c 来连接节点执行操作,只不过客户端工具不会帮你重定向来完成,而是打印 MOVE 错误。

redis-cli -c -p 30001

在这里插入图片描述

你可以执行 KEYS * 操作,只不过返回的只有当前节点的所有 key;

你可以使用 WATCH、MULTI 尝试以事务的方式来设置多个数据,不过最后 EXEC 提交会报错事务超时,因为你多个操作在不同节点之间跳转,提交事务和开启事务不是同一节点,整个混乱了。

-

正确实现事务的方式是在多个操作的 key 前加相同的 {tag},哈希算法只会对这个 tag 进行计算,最后落到同一个节点上。

在这里插入图片描述

其他问题

多服务器如何配置?

创建节点这一步在每个服务器创建好节点,同样按手动分配集群的方试填写多个服务器对应的 IP 和 端口号就行了。

如何重新分片?

我们可以通过重新分片来解决数据倾斜的问题。

执行下面命令表明连接这个节点进行重新分片操作,同时打印出所有节点信息,然后会询问你要转移走多少个槽位(这里输入了 2000)。

redis-cli --cluster reshard 127.0.0.1:30001

在这里插入图片描述

问你接收这些槽位的节点 ID 是多少(这里输入了主节点 30002 的 ID)。

然后要你依次输入多个源节点,就是从哪些节点移走共 2000 个槽位。你可以依次填节点 ID 回车,最后输入 done 完成;也可以直接输入 all 从其他所有节点转移(这里输入了主节点 30001 的 ID)。

在这里插入图片描述

最终结果就是从 30001 转移了 2000 个槽位到 30002。经过计算还会询问你是否同意这个分片计划,输入 yes 完成。

在这里插入图片描述

如果想再细粒度的控制这个分片过程是做不到的。

其他集群操作指令

# 查看集群指令帮助信息
redis-cli --cluster help

# 这两个指令都可以看到集群相关信息,连任一节点都可以
redis-cli --cluster info 127.0.0.1:30001
redis-cli --cluster check 127.0.0.1:30001

参考

Redis 中文网 集群规范

Redis 中文网 集群教程

Redis 单机部署

标签:Cluster,0.1,create,Redis,cluster,集群,Linux,节点
From: https://www.cnblogs.com/shuiyao3/p/17289719.html

相关文章

  • 在Linux部署Redis代理Predixy实现数据分片
    前言本文以predixy-1.0.5为例,讲述Redis代理Predixy安装过程。Predixy是一款高性能全特征Redis代理,支持Redis-sentinel和Redis-cluster。作者拿其它常用代理做了性能测评,Predixy在各个维度性能都是最优的,与其他代理的功能对比。我们可以通过取模、随机、一致性哈希......
  • 【Linux】性能调优命令
    进程性能pidstatcat/proc/5598(PID)/statusfreepstoppstreepgrepvmstat#使用top命令,查找pid$top#通过TOP-H-p进程ID,找到具体的线程占用情况$top-H-p21564#通过命令pstack进程ID显示线程堆栈\$pstack24714Java相关参考文档:https://qinxuew......
  • 在Linux部署Redis代理Twemproxy实现数据分片
    前言本文主要讲述Redis代理Twemproxy安装过程。Twemproxy是推特开源用于Memcached和Redis的轻量级代理。这里以0.5.0版本为例。我们可以通过取模、随机、一致性哈希等算法将数据分散在多个Redis服务来实现水平扩展。但是客户端直连就需要跟每个Redis服务产生连接,......
  • 在Linux部署ElasticJob-Lite-UI运维控制台
    前言ElasticJob-Lite-UI是任务的分布式调度解决方案(ElasticJob-Lite)搭配的可视化运维控制台。运维控制台和ElasticJob-Lite并无直接关系,是通过读取作业注册中心(Zookeeper)数据展现作业状态,或更新注册中心数据修改全局配置。它具有这些功能:登录安全控制;注册中心、事件追踪数据源管......
  • Redis——(主从复制、哨兵模式、集群)的部署及搭建
    重点:主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。哨兵和集群都是在主从复制基础上实现高可用的。缺点:故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制。哨兵:在主从复制的基础上,哨兵......
  • 在Linux部署Etcd集群
    前言目前解决分布式系统下数据强一致性的主要算法理论是Paxos和Raft,偏向CAP定理一致性(Consistency)、可用性(Availability)、分区容错性(Partitiontolerance)中的CP。Raft在容错和性能方面和Paxos相当,不同之处在于它将问题分解成相对独立的子问题,逻辑较为清晰,更易于理解。关于Raft......
  • 在Linux部署单机Redis完整过程
    前言本文以redis-6.2.5为例,讲述在Linux系统下单机Redis下载、编译、打包、安装为服务、启动和访问的整个过程。安装环境为LinuxCentOS64,本文用的7.5版本.下载编译目录在当前目录soft/redis下,最终服务可执行程序在/opt/soft/redis6中。准备工作#查看是否有文件下载......
  • 在Linux部署Apollo配置中心
    前言这篇是参考官网文档总结的Apollo分布式部署方式,包含具体步骤、资源和相关脚本,也在必要的地方给出了资料来源。通过Apollo-中文文档-部署架构可以了解到单机、集群和高可用部署架构的最佳实践方式。安装步骤本篇实践是在Linux系统,使用Apollo1.9.1版本为例,要求环境包含......
  • linux Tun/Tap 虚拟网卡
    一、TUN、TAP虚拟网卡的工作原理:+----------------------------------------------------------------+|||+--------------------++--------------------+|||UserApplicationA|......
  • 在Linux安装Kafka监控系统EFAK
    前言EFAK(EagleForApacheKafka)是一个简单、高性能的Kafka集群监控系统,实现了监控、可视化操作Topic/Zookeeper、SQL查询、告警等功能,它以前的名字叫KafkaEagle。我们重点看看如何安装以及简单使用它。kafka版本支持:0.8.2.x,0.9.x,0.10.x,0.11.x,1.x,2.x.支持平台:Mac......