转:Redis 集群搭建详细指南

转自: https://www.cnblogs.com/mafly/p/redis_cluster.html 

【README】 

非常棒的一篇文章,感谢作者的分享;

 

先有鸡还是先有蛋?

最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司!
为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的。同样的道理嘛,「大」总有大的好。
当然,如果你要有能力找一个胸大个子高就更完美了。

Redis 集群简介

Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

随随便便搭建一个集群

安装部署任何一个应用其实都很简单,只要安装步骤一步一步来就行了。下面说一下 Redis 集群搭建规划,由于集群至少需要6个节点(3主3从模式),所以,没有这么多机器给我玩,我本地也起不了那么多虚拟机(电脑太烂),现在计划是在一台机器上模拟一个集群,当然,这和生产环境的集群搭建没本质区别。

我现在就要在已经有安装了 Redis 的一个 CentOS 下开始进行集群搭建,如果你还不是很清楚 Linux 下如何安装 Redis ,可以去看这一篇文章《了解一下 Redis 并在 CentOS 下进行安装配置》。请注意,下面所有集群搭建环境都基于已安装好的 Redis 做的。

1.创建文件夹
我们计划集群中 Redis 节点的端口号为 9001-9006 ,端口号即集群下各实例文件夹。数据存放在 端口号/data 文件夹中。

mkdir_9001-9006

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 路径下的运行脚本拷贝过来。看命令:

mkdir redis-cluster/bin
cd /usr/local/redis/src
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin

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

mv9001

cp /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

集群搭建配置重点就是取消下图中的这三个配置的注释:
cluster_conf

4.再复制出五个新 Redis 实例
我们已经完成了一个节点了,其实接下来就是机械化的再完成另外五个节点,其实可以这么做:把 9001 实例 复制到另外五个文件夹中,唯一要修改的就是 redis.conf 中的所有和端口的相关的信息即可,其实就那么四个位置。开始操作,看图:

cp9001-9006

\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

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

5.修改 9002-9006 的 redis.conf 文件
其实非常简单了,你通过搜索会发现其实只有四个点需要修改,我们全局替换下吧,进入相应的节点文件夹,做替换就好了。命令非常简单,看图:

%s-9001-9002g

vim redis.conf
:%s/9001/9002g

回车后,就会有替换几个地方成功的提示,不放心可以手工检查下:

%s-success

其实我们也就是替换了下面这四行:

port 9002
dir /usr/local/redis-cluster/9002/data/
cluster-config-file nodes-9002.conf
pidfile /var/run/redis_9002.pid

到这里,我们已经把最基本的环境搞定了,接下来就是启动了。

其实我们已经几乎搭建好了

1.启动 9001-9006 六个节点
少废话,直接看图:
redis-server_start

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

可以检查一下是否启动成功:ps -el | grep redis
看的出来,六个节点已经全部启动成功了。

2.随便找一个节点测试试

/usr/local/redis-cluster/bin/redis-cli -h 192.168.119.131 -p 9001set name mafly

redis-server_start_test

连接成功了,但好像报错了阿???
(error) CLUSTERDOWN Hash slot not served(不提供集群的散列槽),这是什么鬼?
这是因为虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)

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

yum install ruby
yum install rubygems
gem install redis 

yum_ruby

这才是真正的创建集群

先不废话,直接敲命令:

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

cluster_create

简单解释一下这个命令:调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

M: 10222dee93f6a1700ede9f5424fccd6be0b2fb73 为主节点Id

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

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

cluster_create_success

上图则代表集群搭建成功啦!!!

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

/usr/local/redis-cluster/bin/redis-cli -c -h 192.168.119.131 -p 9001
cluster info
cluster nodes

cluster_info

通过命令,可以详细的看出集群信息和各个节点状态,主从信息以及连接数、槽信息等。这么看到,我们已经真的把 Redis 集群搭建部署成功啦!

设置一个 mafly:
你会发现,当我们 set name mafly 时,出现了 Redirected to slot 信息并自动连接到了9002节点。这也是集群的一个数据分配特性,这里不详细说了。

redirected_9002

总结一下

这一篇 Redis 集群部署搭建的文章真的是一步一步的走下来的,只要你安装我的步骤来,就保证你能成功搭建一个 Redis 集群玩玩,也可以这么说,除了步骤繁琐外,几乎不存在技术含量,估计能看完的人都感觉累(说真的,写这种文章真的很累人)。

接下来可能就是动态扩容、增加节点和减少节点,重新分配槽大小等,当然,还有最重要的就是怎么和我们程序结合起来,以及如何更好的把 Redis 缓存集群发挥出应有的效果,这些才是最重要的。

今晚上的台风并不是很厉害呀,还有好像好久没有不是在一天中睡觉与醒来了...

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速排序算法思想及实现

简介 快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn) 基本思想 先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步&a…

作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VO

转载自 作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VOPOJO、PO、DTO、DAO、BO、VO这些概念作为Java开发来说应该全部或者部分遇到过,作为架构师的你想必更是清楚这些概念在不同场景的应用。下面我逐一介绍一下,想必…

搭建redis集群

【README】 redis集群搭建有很多坑儿,注意; 【1】坑er 集合 坑儿1、 [ERR] Sorry, cant connect to node 192.168.163.203:6381 报错现场:执行如下命令新建集群,报错如下; /usr/local/redis-cluster/bin/redis-t…

怎么看cudnn的版本好_针对此次版本削弱,怎么用好嫦娥!

大招的费蓝 & 蓝量伤害比 (先把嫦娥的冷门知识点放置顶,干货感比较重要)嫦娥100%蓝时,所有造成的伤害均要2倍,蓝量每下降1%,伤害倍数就下降2%。即嫦娥在50%蓝的时候,伤害就不加倍了。嫦娥最…

设计模式(一):工厂方法

目录概括目的主要解决何时使用使用场景总结三种工厂模式的对比代码示例概括 定义一个用于创建对象的接口,让子类决定实例化哪一个类。使用特殊的工厂方法代替对于对象构造函数的直接调用(即使用 new运算符,工厂方法 使一个类的实例化延迟到其…

mysql查询优化explain命令详解

转载自 mysql查询优化explain命令详解mysql查询优化的方法有很多种,explain是工作当中用的比较多的一种检查方式。explain翻译即解释,就是看mysql语句的查询解释计划,从解释计划我们能很清楚的看到解释的语句有没有合理用到索引,扫…

sftp工具都有哪些_学霸们都在用哪些科研工具?

这是 社科学术圈 推送的第1677篇文章学者论文哪里找?论文怎么写?会用到哪些工具?本期将带来有助于提高论文写作效率的一些资料,包括OA论文、思路整理、词典类、制图工具类、文献生成类等方面。OA论文平台1. PMC(Pubmed Cenral)Pub…

redis集群搭建报错-(error) CLUSTERDOWN The cluster is down

【README】 最近搭建一个redis集群,参考博文 (https://www.cnblogs.com/mafly/p/redis_cluster.html) 对集群配置后,master, slave 也启动起来,但无法插入数据; 【1】报错信息; [r…

常用加密算法解析

转载自 常用加密算法解析 今天介绍下工作当中常用的加密算法、分类、应用。 1、对称加密算法 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。 分类…

双指针:88. 合并两个有序数组

题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序&#xff0c;时间复杂度为O((nm)log(nm)) 代码&#xff1a; 快排详解 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int im,j0;i<mn;i,j){nums1[i] nums2[j];}quickSor…

bmp180气压传感器工作原理_陕西压力传感器的工作原理信息推荐

压力传感器的工作原理应用广泛的是压阻式压力传感器&#xff0c;它具有极低的价格和较高的精度以及较好的线性特性。下面我们主要介绍这类陕西压力传感器。在了解陕西压力传感器时&#xff0c;我们首先认识一下电阻应变片这种元件。电阻应变片是一种将被测件上的应变变化转换成…

转-rsa加密算法

转自 阮一峰&#xff1b; http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 一、一点历史 1976年以前&#xff0c;所有的加密方法都是同一种模式&#xff1a; &#xff08;1&#…

设计模式之单例模式实践

转载自 设计模式之单例模式实践概念单例模式即一个JVM内存中只存在一个类的对象实例分类1、懒汉式 类加载的时候就创建实例 2、饿汉式 使用的时候才创建实例当然还有其他的生成单例的方式&#xff0c;双重校验锁&#xff0c;枚举和静态内部类&#xff0c;文中会有介绍实践懒汉式…

win7精简_低配电脑的福音:这款小众系统10GB+极限精简+不卡顿,比Win7还快!

自win7停服后&#xff0c;不少用户私信老毛桃&#xff0c;问win10哪个版本的系统好用。这让我怎么回答呢&#xff0c;不同的使用要求安装的系统不一样&#xff0c;但总的来说&#xff0c;世界上没有最完美的系统&#xff0c;只有最适合自己的系统。也有不少用户在评论win10各种…

快慢指针:141. 环形链表(判断是否存在环路)

题目描述 给定一个链表&#xff0c;判断链表中是否有环 题目链接 141. 环形链表 解题思路 使用快慢指针&#xff08;Floyd判圈算法&#xff09;&#xff1a;从链表的头部设置两个指针&#xff0c;p1的步长为1&#xff0c; p2的步长为2&#xff0c;同时向前走&#xff0c;如…

redis集群信息分析-cluster info-cluster nodes

【README】 本文po出 redis集群的节点信息&#xff0c;槽信息&#xff0c;以及字段含义 【1】集群信息 192.168.163.203:6380> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluste…

彻底理解正向代理和反向代理

转载自 彻底理解正向代理和反向代理平时工作中我们会接触到各种代理&#xff0c;它到底是什么概念呢&#xff0c;又是什么工作原理&#xff0c;下面我们具体来分析一下。1、概念正向代理这个很好理解&#xff0c;比如说你现在要访问一个外国的社交网站www.facebook.com&#xf…

查看电脑重启日志_系统日志看硬盘故障图文教程,电脑日志查看磁盘硬盘坏道问题方法...

大家好&#xff0c;我是老盖&#xff0c;感谢观看本篇文章&#xff0c;本文做的也有视频&#xff0c;也可以看我发布的视频。今天和大家讲一下通过电脑的系统日志&#xff0c;判断硬盘是否有问题的一个方法&#xff0c;最近这几天我这个电脑偶尔会卡一下&#xff0c;有的时候还…

redis集群依赖ruby

【README】 redis集群依赖ruby&#xff0c;需安装ruby环境&#xff0c;ruby版本需高于2.2。在创建redis集群前&#xff0c;需要安装ruby &#xff0c;命令如下 yum install ruby yum install rubygems gem install redis 【1】什么是 rubygems 转自 https://www.jianshu.c…

Springboot配置通过URL访问图片(静态资源)

一、确保为web项目&#xff0c;创建WebConfig 实现WebMvcConfigurer &#xff08;推荐&#xff09;或 继承WebMvcConfigurationSupport 说明&#xff1a; SpringBoot2.0 配置WebMvc 需extends WebMvcConfigurationSupport或implements WebMvcConfigurerSpring Boot中只能有一…