转载:https://juejin.im/post/5ad54d76f265da23970759d3

作者:SnailClimb

这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助。

笔主这里使用的是Centos7

一 redis的安装

Redis是c语言开发的。

安装redis需要c语言的编译环境。如果没有gcc需要在线安装:yum install gcc-c++

第一步:获取源码包:wget http://download.redis.io/releases/redis-3.0.0.tar.gz

第二步:解压缩redis:tar zxvf redis-3.0.0.tar.gz

第三步:编译。进入redis源码目录(cd redis-3.0.0)。执行 make

第四步:安装。make install PREFIX=/usr/local/redis

PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下

这样Redis就成功装在了我们的usr/local/redis目录下。

第五步:设置后台启动:

[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/

(把/root/redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下)

修改配置文件:把daemonize后面的参数改为yes

测试启动:[root@localhost bin]# ./redis-server redis.conf

查看redis进程:[root@localhost bin]# ps aux|grep redis

二 redis集群的搭建

2.1 redis集群(redis-cluster)原理

3.0版本之前的redis是不支持集群的,3.0版本之前想要搭建redis集群的话需要中间件来找到存值和取值的对应节点。

3.0版本以后的redis集群架构图:

那么这是如何实现的呢???

Redis 集群中内置了 16384个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

根据下图应该更容易理解了。(图片来源:http://www.cnblogs.com/liyasong/p/redis_jiqun.html)

redis集群投票机制

redis集群中有多台redis服务器不可避免会有服务器挂掉。redis集群服务器之间通过互相的ping-pong判断是否节点可以连接上。如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机了。

上面就是我们常说的为了容错而生的redis集群投票机制

2.2 redis集群(redis-cluster)的搭建

redis集群搭建起来很简单,我们这里用一台虚拟机模拟搭建包含6个redis服务器的集群,实际工作中与使用多台服务器搭建是一个操作。

我们上面已经装好了一个redis实例,现在我们需要把它复制6份并修改相应端口。

第一步: 新建redis-cluster文件夹

第二步:复制redis实例

[root@Snailclimb local]# cp redis/bin redis-cluster/redis1

如果你复制过去的redis实例有dump.rdb文件的话最好也要删除。

第三步:修改配置文件

修改bin目录下的redis.conf配置文件

第四步:继续复制5个redis实例

我们用上面的redis实例复制5个redis实例,然后把他们的配置文件的端口号改为7002-7006

第五步 :新建一个执行脚本:

[root@Snailclimb redis-cluster]# vim start-all.sh

脚本内容如下:

为脚本赋予执行权限:

[root@Snailclimb redis-cluster]# chmod u+x start-all.sh

同时启动6个redis实例:

[root@Snailclimb redis-cluster]# ./start-all.sh

第六步:将redis-trib.rb复制到redis-cluster目录下面:

并为脚本赋予执行权限:[root@Snailclimb redis-cluster]# chmod u+x redis-trib.rb

第七步:安装ruby和ruby运行环境

yum install ruby

yum install rubygems

gem install redis-3.0.0.gem

第八步:使用ruby脚本搭建集群:

[root@Snailclimb redis-cluster]#./redis-trib.rb create --replicas 1 192.168.25.155:7001 192.168.25.155:7002 192.168.25.155:7003 192.168.25.155:7004 192.168.25.155:7005 192.168.25.155:7006

查看集群:

注意:端口修改错误或者没有将cluster-enabled yes前的注释去掉都会导致集群搭建失败。总的来说,redis集群搭建还是很简单的。

这样一个完整的redis集群就已经搭建完毕了。。。

三 redis单机版与集群版的测试使用

添加Maven依赖:

单机版redis测试:

使用连接池测试单机版redis:

测试集群版redis:

四 如何在JavaWeb项目中实现单机和集群无缝切换使用

我们如何才能在项目中实现自己想用的单机redis就用单机redis想用redis集群就用redis集群而不要修改项目代码呢???

创建相应类和接口

接口:

集群版使用:

单机版使用:

applicationContext-redis.xml

测试代码:

这样在实际项目中我们无需修改代码就可以实现单机和集群版的相关切换。。

Redis | 一文轻松搞懂redis集群原理及搭建与使用的更多相关文章

  1. 一文轻松搞懂redis集群原理及搭建与使用

    今天早上由于zookeeper和redis集群不在同一虚拟机导致出了点很小错误(人为),所以这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. 笔主这里使用的是Centos7.如果 ...

  2. ELasticSearch(五)ES集群原理与搭建

    一.ES集群原理 查看集群健康状况:URL+ /GET _cat/health (1).ES基本概念名词 Cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产 ...

  3. 搞懂 ZooKeeper 集群的数据同步

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费开源.有趣.入门级的 ZooKeeper 教程,面向有编程基础的新手. 项 ...

  4. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  5. Elasticsearch 分片集群原理、搭建、与SpringBoot整合

    单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了.集群不仅可以实现高可用,也能实现海量数据存储的横向扩展. 新的阅读体 ...

  6. 一文轻松搞懂Vuex

    概念: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式(官网地址:https://vuex.vuejs.org/zh/).它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状 ...

  7. 轻松搞懂Python递归函数的原理与应用

    递归: 在函数的定义中,函数内部的语句调用函数本身. 1.递归的原理 学习任何计算机语言过程中,“递归”一直是所有人心中的疼.不知你是否听过这个冷笑话:“一个面包,走着走着饿了,于是就把自己吃了”. ...

  8. 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 反向传播算法(Backpropagation Algorithm, ...

  9. RabbitMQ 集群原理和完善

    一.RabbitMQ集群方案的原理 RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现 ...

随机推荐

  1. 理解JVM之对象的生命周期

    1.对象的创建 1) 当虚拟机遇到一条new的指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载,解析和初始化过. 2) 在类加载检查通 ...

  2. flask 中的ORM ( 二 )

    1 关系映射 1 多对多 1 什么是多对多 A表中的一条数据可以与B表中任意多条数据相关联 B表中的一条数据可以与A表中任意多条数据相关联 2 实现 在数据库中使用第三张表(关联表) 在编程语言中,可 ...

  3. wsl2 debian安装docker

    应用商店下载debian 安装docker 安装依赖 打开安装好的docker安装依赖 sudo apt-get install apt-transport-https ca-certificates ...

  4. MySQL数字类型int与tinyint、float与decimal如何选择

    最近在准备给开发做一个mysql数据库开发规范方面培训,一步一步来,结合在生产环境发现的数据库方面的问题,从几个常用的数据类型说起. int.tinyint与bigint 它们都是(精确)整型数据类型 ...

  5. 线段树lazy模板 luogu3372

    线段树写得很少,这么基本的算法还是要会的…… #include<bits/stdc++.h> using namespace std; inline long long read() { ...

  6. PHP通过iconv将字符串从GBK转换为UTF8字符集

    PHP通过iconv将字符串从GBK转换为UTF8字符集的方法,需要的朋友可以参考下. 1. iconv()介绍 iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件.例如:从GB23 ...

  7. idou老师教你学istio 21:基于角色的访问控制

    istio的授权功能,也称为基于角色的访问控制(RBAC),它为istio服务网格中的服务提供命名空间级别.服务级别和方法级别的访问控制.基于角色的访问控制具有简单易用.灵活和高性能等特性.本文介绍如 ...

  8. java线程基础巩固---多线程死锁分析,案例介绍

    之前已经学习了关于同步锁的知识,但是在实际编写多线程程序时可能会存在死锁的情况,所以这次来模拟一下死锁,并且学会用一个命令来确认是否程序已经出现死锁了,下面开始: 首先新建两个类: 此时当然得到Oth ...

  9. APP支付宝登录--PHP处理代码

    1.首先需要参数: aucth_code  udid re_id极光推送id 2.https://open.alipay.com/platform/keyManage.htm 配置公钥私钥 3.需要s ...

  10. js中in关键字的使用方法

    1.for...in 对数组或对象的循环/迭代操作 对于数组循环出来的是数组元素:对于对象循环出来的是对象属性 2.判断对象是否是数组/对象的元素/属性 格式:(变量 in 对象) 当‘对象’是数组时 ...