一、Redis集群方式介绍

3.0版本之前的redis是不支持集群的,只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是想要集群得用中间件。不适合大型数据。

常见集群方案:

(1)官方方案:redis-cluste

(2)客户端分片技术——不推荐

(3)主从复制方式——不推荐

(4)一些代理工具——不推荐

1.1、Redis-cluster原理

采用了P2P模式,完全去中心化。把所有key分成很多slot,每个Redis实例只负责其中一部分slot。

集群中所有信息(节点、端口、slot)都通过节点之间定期的数据交换而更新。

客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。

.......

1.2、集群搭建方案

集群至少需要6个节点,3主3从。(但是没那么多机器测试集群,可以在一台机器模拟一个集群)

搭建前必须要先关闭防火墙

(1)创建文件夹

拟定集群中 Redis 节点的端口号为 9001-9006 ,端口号即集群下各实例文件夹。数据存放在 端口号/data 文件夹中。

mkdir /usr/local/redis-cluster
cd redis-cluster/
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

(2)复制脚本

在 /usr/local/redis-cluster 下创建 bin 文件夹,用来存放集群运行脚本,并把安装好的 Redis 的 src 路径下的运行脚本拷贝过来。看命令:

Cd /usr/local/redis-cluster
mkdir binCd /usr/local/redis-3.2.9/srccp mkreleasehdr.sh redis-benchmark redis-check-aof  redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin

(3)复制一个新 Redis 实例

现在从已安装好的 Redis 中复制一个新的实例到 9001 文件夹,并修改 redis.conf 配置:

cp -r /usr/local/redis    /usr/local/redis-cluster/9001注意,修改 redis.conf 配置和单点唯一区别是下图部分,其余还是常规的这几项:port 9001(每个节点的端口号)
daemonize yes
bind 192.168.119.131(绑定当前机器 IP)
dir /usr/local/redis-cluster/9001/data/(数据文件存放位置)
pidfile /var/run/redis_9001.pid(pid 9001和port要对应)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes9001.conf(9001和port要对应)
cluster-node-timeout 15000
appendonly yes

(4)再复制出五个新 Redis 实例

已经完成了一个节点了,其实接下来就是机械化的再完成另外五个节点,可以这么做:把 9001 实例 复制到另外五个文件夹中,唯一要修改的就是 redis.conf 中的所有和端口的相关的信息即可

(\cp -rf 命令是不使用别名来复制,因为 cp 其实是别名 cp -i,操作时会有交互式确认,比较烦人)

\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9002
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9003
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9004
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9005
\cp -rf /usr/local/redis-cluster/9001/*   /usr/local/redis-cluster/9006

(5)修改 9002-9006 的 redis.conf 文件

进入相应的节点文件夹,做替换:

vi /usr/local/redis-cluster/9002/redis/etc/redis.confvi /usr/local/redis-cluster/9003/redis/etc/redis.conf
vi /usr/local/redis-cluster/9004/redis/etc/redis.conf
vi /usr/local/redis-cluster/9005/redis/etc/redis.conf
vi /usr/local/redis-cluster/9006/redis/etc/redis.conf%s/9001/9002
%s/9001/9003
%s/9001/9004
%s/9001/9005
%s/9001/9006其实我们也就是替换了下面这四行:port 9002
dir /usr/local/redis-cluster/9002/data/
cluster-config-file nodes-9002.conf
pidfile /var/run/redis_9002.pid

(6)启动9001-9006六个节点

/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9001/redis/etc/redis.conf/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9002/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9003/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9004/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9005/redis/etc/redis.conf
/usr/local/redis/bin/redis-server  /usr/local/redis-cluster/9006/redis/etc/redis.conf

(7)随便找一个节点测试试

/usr/local/redis-cluster/9001/redis/bin/redis-cli -h 192.168.212.150 -p 9001

(error) CLUSTERDOWN Hash slot not served

这是因为虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)

(8)安装集群所需软件

由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口:

yum install ruby
yum install rubygems
gem install redis  使用本地上传方式

gem install -l redis-3.2.1.gem

(9)集群环境测试

/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.212.150:9001 192.168.212.150:9002 192.168.212.150:9003 192.168.212.150:9004 192.168.212.150:9005 192.168.212.150:9006

命令解释:

(1)调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;

(2)然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配;

(3)M: 10222dee93f6a1700ede9f5424fccd6be0b2fb73 为主节点Id;

(4)S: 9ce697e49f47fec47b3dc290042f3cc141ce5aeb 192.168.119.131:9004 replicates 10222dee93f6a1700ede9f5424fccd6be0b2fb73 从节点下对应主节点Id;

(5)9001-9003 为主节点,9004-9006 为从节点,并向你确认是否同意这么配置。输入 yes 后,会开始集群创建。

(10)验证集群环境

通过客户端命令连接上,通过集群命令看一下状态和节点信息等。

二、SpringBoot整合Redis集群

2.1、配置文件

pring:redis:database: 0
#    host: 132.232.44.194
#    port: 6379
#    password: 123456jedis:pool:max-active: 8max-wait: -1max-idle: 8min-idle: 0timeout: 10000cluster:nodes:- 192.168.212.149:9001- 192.168.212.149:9002- 192.168.212.149:9003- 192.168.212.149:9004- 192.168.212.149:9005- 192.168.212.149:9006

(2)Redis集群的几个注意事项

Redis集群使用CRC16对key进行hash,集群固定使用16384对hash出来的值取模。因为取模结果一定在16384之内,所以集群中的sharding(分片)实际就是如何将16384个值在n个主节点间分配(从节点是主节点的近似副本,原因见3),如何分配取决于你的配置。

Redis生产级集群需要容灾,为此,一般部署为n个主+n*m个从。n大小主要取决于单机性能,m大小主要取决于机器稳定性。

Redis集群是弱一致性的,此处的一致,主要指主从之间的数据一致性。主要是因为redis在做数据更新时,不要求主从数据同步复制一定要成功。

集群最小的主数量为3,主数量应为奇数,以便做选举判决。

Redis集群方案:redis-cluste原理与搭建相关推荐

  1. Redis - 集群方案

    在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...

  2. Redis集群方案对比:Codis、Twemproxy、Redis Cluster

    为了保证Redis的高可用,主要需要以下几个方面: 数据持久化 主从复制 自动故障恢复 集群化 我们简单理一下这几个方案的特点,以及它们之间的联系. 数据持久化本质上是为了做数据备份,有了数据持久化, ...

  3. Redis集群方案及框架

    redis集群分为服务端集群和客户端分片,redis3.0以上版本实现了集群机制,即服务端集群,3.0以下使用客户端分片(Sharding). 通常,为了提高网站响应速度,总是把热点数据保存在内存中而 ...

  4. Redis集群方案,Codis安装测试

    Redis集群方案,Codis安装测试 1,关于豌豆荚开源的Codis Codis是豌豆荚使用Go和C语言开发.以代理的方式实现的一个Redis分布式集群解决方案,且完全兼容Twemproxy.Twe ...

  5. Redis集群方案及实现 - yfk的专栏 - 博客频道 - CSDN.NET

    Redis集群方案及实现 - yfk的专栏        - 博客频道 - CSDN.NET yfk的专栏 学习&记录&分享 目录视图 摘要视图 订阅 [公告]博客系统优化升级   U ...

  6. 基于Twemproxy的Redis集群方案

    基于Twemproxy的Redis集群方案 原文地址:http://www.cnblogs.com/haoxinyue/p/redis.html  为了保持方便,愿原博主谅解 概述 由于单台redis ...

  7. Redis集群方案及实现

    之前做了一个Redis的集群方案,跑了小半年,线上运行的很稳定 差不多可以跟大家分享下经验,前面写了一篇文章 数据在线服务的一些探索经验,可以做为背景阅读 应用 我们的Redis集群主要承担了以下服务 ...

  8. redis集群方案-Twemproxy

    redis集群方案-Twemproxy 1 Twemproxy是什么? Twemproxy是一种代理分片机制,来源于Twitter开源.Twemproxy按照路由规则,转发给后台的各个Redis服务器 ...

  9. redis集群之REDIS CLUSTER

    redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00  NoSQL_博客园 原文  http://www.cnblogs.com/zhanchenjin/p/537 ...

最新文章

  1. 智源论坛报名 | 自然语言处理
  2. android 高德定位 区域,区域定位-行政区划浏览-示例中心-JS API UI 组件示例 | 高德地图API...
  3. Git 删除远程仓库文件
  4. 现代计算机密码学阶段主要有两个方向,密码学技术读书笔记
  5. 行云万里,转型未来 | 行云创新受邀参加2019中国.NET开发者峰会
  6. [流体输配管网] 使用 Matlab 绘制莫迪图
  7. C结构体之位域(位段)
  8. PyTorch:距离度量
  9. hashmap8底层源码剖析1--构造以及put
  10. Failed to load selinux policy, Freezing | CentOS | Redhat | RHEL
  11. C# 正则表达式大全
  12. 天线的极化与圆极化天线
  13. rpa机器人java开发,RPA机器人的“三大铁律”
  14. 人工智能:(C语言)采用状态空间法求解八数码问题
  15. 从无秘和知乎看中国社交产品的特点
  16. 【JZOJ B组】【NOIP2013模拟】小喵喵的新家
  17. 基本数据类型和引用类型
  18. 【Edge浏览器】edge浏览器下载插件时报Download interrupted错误解决方法
  19. 使目标朝向摄像机,随着摄像机转动
  20. python词频统计小项目

热门文章

  1. DDR4 Spec 第四章 4.1-4.3
  2. AC-DMIS测量程序应用举例
  3. Code Sign error: No matching provisioning profile found: Your build settings specify a provisioni...
  4. 思科AC无线控制器AIR-CT2504-K9修改Wi-Fi密码
  5. cefsharp项目开发浏览器运行一段时间后cefsharp.browsersubprocess崩溃问题
  6. 天秤女能挽回狮子男吗(图
  7. 海量数据处理常见问题
  8. 渐入佳境-2月份英语总结
  9. js ES6 ${}字符串拼接变量
  10. C语言 字符串1234转换成数字1234