Redis 3.2 集群搭建

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis 3.2 集群搭建

Redis3.0版本之后支持Cluster.这里安装 3.2 版本


1、下载安装包

cd/usr/local/

wget http://download.redis.io/releases/redis-3.2.1.tar.gz

tar -zxvf /redis-3.2.1.tar.gz


2 编译安装

cd/usr/local/redis-3.2.1

make && make install


3. 创建 redis节点 在192.168.145.135上

cd/usr/local/

mkdir redis_cluster  //创建集群目录

cd redis_cluster

mkdir 7000 7001 7002  //分别代表三个节点    其对应端口 7000 7001 7002

//创建7000节点为例,拷贝到7000目录

cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7000/  

//拷贝到7001目录

cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7001/  

//拷贝到7002目录

cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7002/


分别对7001,7002、7003文件夹中的3个文件修改对应的配置修改

daemonize    yes                         //redis后台运行

pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7002,7003

port  7000                               //端口7000,7002,7003

cluster-enabled  yes                      //开启集群  把注释#去掉

cluster-config-file  nodes_7000.conf      //集群的配置 配置文件首次启动自动生成 7000,7001,7002

cluster-node-timeout  5000                //请求超时  设置5秒够了

appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

bind 192.168.145.135

protected-mode no


在192.168.145.136 执行135上操作,下载安装redis,创建redis节点 7003 7004 7005,然后修改配置.

 

在两台机器上启动

cd/usr/local

redis-server redis_cluster/7000/redis.conf

redis-server redis_cluster/7001/redis.conf

redis-server  redis_cluster/7002/redis.conf

redis-server redis_cluster/7003/redis.conf

redis-server redis_cluster/7004/redis.conf

redis-server  redis_cluster/7005/redis.conf


查看是否启动

ps -ef | grepredis   #查看是否启动成功

netstat -tnlp | grepredis #可以看到redis监听端口


 

安装集群,官方提供了一个工具

redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb)

需要安装ruby

yum -y install rubyruby-devel rubygems rpm-build


然后gem 安装 redis 端口

gem install redis

如果报错

redis requires Rubyversion >= 2.2.2问题

解决办法

先安装rvm,再把ruby版本提升至2.3.3

1.安装curl

sudo yum install curl

2. 安装RVM

curl -L get.rvm.io |bash -s stable

3.

source/usr/local/rvm/scripts/rvm

4. 查看rvm库中已知的ruby版本

rvm list known

5. 安装一个ruby版本

rvm install 2.3.3

6. 使用一个ruby版本

rvm use 2.3.3

7. 卸载默认版本

rvm remove 2.0.0

8. 卸载一个已知版本

ruby --version

9. 再安装redis就可以了

gem install redis


 

如果

curl -L get.rvm.io |bash -s stable  

报错如下:

$ curl -L get.rvm.io |bash -s stable --ruby

 % Total    % Received % Xferd  Average Speed   Time   Time     Time  Current

                               Dload  Upload   Total  Spent    Left  Speed

100   184 100   184    0    0     30      0 0:00:06  0:00:06 --:--:--    40

100 22721  100 22721    0    0   1845      0 0:00:12  0:00:12 --:--:--  6170

Downloading https://github.com/rvm/rvm/archive/1.26.11.tar.gz 

Downloading https://github.com/rvm/rvm/releases/download/1.26.11/1.26.11.tar.gz.asc 

gpg: Signature made Tue 31 Mar 2015 05:52:13 CST using RSA key ID BF04FF17

gpg: Can't check signature: public key not found

Warning, RVM 1.26.0 introduces signed releases and automated check ofsignatures when GPG software found.

Assuming you trust Michal Papis import the mpapis public key (downloading thesignatures).

 

GPG signature verification failed for'/home/charles/.rvm/archives/rvm-1.26.11.tgz' - 'https://github.com/rvm/rvm/releases/download/1.26.11/1.26.11.tar.gz.asc'!

try downloading the signatures:

 

   gpg --keyserver hkp://keys.gnupg.net--recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

 

or if it fails:

 

   command curl -sSL https://rvm.io/mpapis.asc | gpg --import-

 

the key can be compared with:

 

   https://rvm.io/mpapis.asc 

   https://keybase.io/mpapis 


解决办法:

try downloading the signatures:  

下面让你执行啥就执行啥

这里执行

gpg --keyserverhkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3


然后再重新安装 rvm

curl -L get.rvm.io |bash -s stable  

创建集群

--replicas 1  表示 自动为每一个master节点分配一个slave节点    上面有6个节点,程序会按照一定规则生成3个master(主)3个slave(从)

提示Can I set the aboveconfiguration? (type 'yes' to accept): yes    //输入yes

/usr/local/redis-3.2.1/src/redis-trib.rb  create --replicas 1 192.168.145.135:7000  192.168.145.135:7001 192.168.145.135:7002192.168.145.136:7003 192.168.145.136:7004 192.168.145.136:7005


如果报错,出现

redis创建集群——[ERR] Sorry,can't connect to node 192.168.X.X


检查redis.conf 的两个参数

bind 127.0.0.1

protected-modeyes  

是否修改

解决办法

sed -i 's/bind127.0.0.1/bind 192.168.145.136/' redis.conf

sed -i 's/protected-mode yes/protected-mode no/' redis.conf


参考:http://redis.io/commands/cluster-addslots

redis常用命令

CLUSTER INFO打印集群的信息

CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。

//节点

CLUSTER MEET <ip> <port> 将 ip 和 port所指定的节点添加到集群当中,让它成为集群的一份子。

CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。

CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。

CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。

CLUSTER ADDSLOTS <slot> [slot ...]将一个或多个槽(slot)指派(assign)给当前节点。

CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。

CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。

CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id指定的节点。

CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id指定的节点中。

CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot到本节点。

CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

//键

CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。

CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。

CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

//新增

CLUSTER SLAVES node-id 返回一个master节点的slaves 列表

 

登录集群

 

redis-cli -h192.168.145.136 -c -p 7003


 

机器换ip之后 集群重启遇到 问题修改了redis.conf  bind 之后的 ip还是不行

最好是使用:

https://blog.csdn.net/u011535541/article/details/78470862?locationNum=1&fps=1


 

redis-cli -h172.31.1.135 -c -p 7000

cluster meet 172.31.1.136 7003


CLUSTER FORGETd78d5c572472403e8e874c770a26991da0a7fb91


 

IP 变更导致集群启动的问题 ,

问题如下:


尝试改下nodes-7003.conf   或者使用 forget meet 估计还是不行

meet加进来全是 master

redis-cli -c -h172.31.1.135 -p 7000 -a cfca1234 cluster addslots {0..5460}

redis-cli -c -h 172.31.1.135 -p 7001 -a cfca1234 cluster addslots{5461..10922}

redis-cli -c -h 172.31.1.135 -p 7002 -a cfca1234 cluster addslots{10923..16383}


配置从节点:

redis-cli -c -p 7003-acfca1234

cluster replicate dfc8bc1b70b78c3df64326706ce08a0a931eb993

redis-cli -c -p 7004 -a cfca1234

cluster replicate c7fd7d514cb41dc4c748e3c9037784c4d3ad3321

redis-cli -c -p 7005 -a cfca1234

cluster replicate f30d4fdb6c3d7e3ef87e1f0d28f3a92ef3d9c804


实在不行数据量不大的情况下,删除rdb ,aof文件

 

查看redis 版本命令

redis-server -v

相关文章
|
3月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
314 2
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
320 5
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
7月前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
270 5
|
4月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
145 5
|
3月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
8月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作