博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<正则吃饺子> :关于redis集群的搭建、集群测试、搭建中遇到的问题总结
阅读量:6653 次
发布时间:2019-06-25

本文共 11962 字,大约阅读时间需要 39 分钟。

  项目中使用了redis ,对于其基本的使用,相对简单些,根据项目中已经提供的工具就可以实现基本的功能,但是只是这样的话,对于redis还是太肤浅,甚至刚开始时候,集群、多节点、主从是什么,他们之间是什么关系都很模糊。利用瓜弟的服务器,自己学习搭建了一个,现在将其中的主要流程、集群测试、搭建中遇到的问题,记录下来,以备后用和帮助后来者。

 

  一、主要的搭建过程

  分为两部分:

    1、利用小王子提供的简要命令安装redis;

redis安装    1.安装redis依赖        # yum install gcc tcl gcc-c++    2.下载redis二进制包        # wget http://download.redis.io/releases/redis-3.2.9.tar.gz    3.解压并安装redis        # tar -zxvf redis-3.2.9.tar.gz        # cd redis-3.2.9        # make         # make install    4.redis config文件目录        mkdir /home/redis                         //创建conf目录        cp redis.conf /home/redis/redis.conf     //复制conf到redis目录        vim /home/redis/redis.conf                 //修改配置            daemonize no 改成 daemonize yes            prot 6379                              //默认端口6379    5.简单使用redis        which redis-server                          //查看server路径        which redis-cli                                //查看cli路径        redis-cli /home/redis/redis.conf            //启动redis        ps aux|grep redis-server    //确认redis服务启动

    2、根据网上博客的集群搭建过程具体搭建(博文地址:);

    注意:按照这篇博文中的方式能够搭建成功,使用桌面工具也能正常的访问,但是(问题在后面的问题中说....往后看..)

Redis集群部署文档(centos6系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:7005 1:下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz2:上传服务器,解压,编译tar -zxvf redis-3.0.0-rc2.tar.gz mv redis-3.0.0-rc2.tar.gz redis3.0cd /usr/local/redis3.0makemake install3:创建集群需要的目录mkdir -p /usr.local/clustercd /usr.local/clustermkdir 7000mkdir 7001mkdir 7002mkdir 7003mkdir 7004mkdir 7005 4:修改配置文件redis.confcp /usr/local/redis3.0/redis.conf  /usr.local/clustervi redis.conf##修改配置文件中的下面选项port 7000daemonize yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面cp /usr/local/cluster/redis.conf /usr/local/cluster/7000cp /usr/local/cluster/redis.conf /usr/local/cluster/7001cp /usr/local/cluster/redis.conf /usr/local/cluster/7002cp /usr/local/cluster/redis.conf /usr/local/cluster/7003cp /usr/local/cluster/redis.conf /usr/local/cluster/7004cp /usr/local/cluster/redis.conf /usr/local/cluster/7005 ##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称 5:分别启动这6个redis实例cd /usr/local/cluster/7000redis-server redis.confcd /usr/local/cluster/7001redis-server redis.confcd /usr/local/cluster/7002redis-server redis.confcd /usr/local/cluster/7003redis-server redis.confcd /usr/local/cluster/7004redis-server redis.confcd /usr/local/cluster/7005redis-server redis.conf  ##启动之后使用命令查看redis的启动情况ps -ef|grep redis如下图显示则说明启动成功 6:执行redis的创建集群命令创建集群cd /usr/local/redis3.0/src./redis-trib.rb  create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:70056.1执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境错误内容:/usr/bin/env: ruby: No such file or directory所以需要安装ruby的环境,这里推荐使用yum install ruby安装yum install ruby 6.2然后再执行第6步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装 错误内容:./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)from ./redis-trib.rb:24yum install rubygems6.3再次执行第6步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装错误内容:/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'from ./redis-trib.rb:25 gem install  redis --version 3.0.0注意:gem install redis --version 3.0.0 失败的话,需要修改一下gem的源gem sources --remove https://rubygems.org/gem sources -a https://ruby.taobao.org/6.4 再次执行第6步的命令,正常执行输入yes,然后配置完成。至此redis集群即搭建成功!7:使用redis-cli命令进入集群环境redis-cli -c -p 7000

再次注意:按照这篇博文中的方式能够搭建成功,使用桌面工具也能正常的访问,但是(问题在后面的问题中说....往后看..)

我在自己的集群中使用的端口是 6661 -- 6666 ,这个你在具体的搭建中可以按照自己的需要来处理,不比拘泥于博客中写的。对于我的端口,默认情况下,集群搭建后,会有三个主,三个从。具体可以利用命令查看这个集群时,能够详细看到。

 

二、集群测试、遇到的问题及解决方案

利用网上博主的搭建方式,当我满怀欣喜的进行测试时,出错了。

错误(1)桌面工具(redis desktop manager)不能正常访问;

  查看资料,需要修改 redis.conf 中的配置。

  在redis.conf中 ,默认的 bind 127.0.0.1 (如果你看这个配置文件的话,就知道了),我是把 bind 项的全部注释掉了。

  具体需要了解下bind项的说明,bind IP 监听指定的网络接口。这样的话,现在看来有两种操作方式:1、全部注释(看了下项目上的配置也是全部注释了);2、指定某个网络ip进行访问。

      至此,在启动redis单个实例时候,能保证外部工具能正常的访问。

错误(2)

具体博文,如下:

今天在虚拟机上安装了Redis,并配置了redis cluster。启动redis cluster使用的命令为:./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005然后在eclipse上集成了springmvc和redisc cluster,配置文件中配置的ip为虚拟机实际IP:192.168.23.129,结果启动时总是报:Too many cluster redirections?最后debug发现cluster中nodes中,既包含了127.0.0.1的节点,又包含192.168.23.129的节点。所以猜测程序启动时会将服务器上实际存在的节点和配置的节点都加载到内存中,然后程序使用的192.168.23.129:端口,去访问节点,而服务器上并没有该节点。之后就将虚拟机上的cluster节点全部删除,重新创建节点,创建时使用实际ip192.168.23.129,即:./redis-trib.rb create --replicas 1 192.168.23.129:7000 192.168.23.129:7001 192.168.23.129:7002 192.168.23.129:7003 192.168.23.129:7004 192.168.23.129:7005再次启动程序,可以正常启动,并从redis中存入和读取数据

 

但是,并没有解决我的问题。查看了多个资料,改为 创建集群时候,采用  “服务器ip:端口”形式,而不是 “127.0.0.1:端口”。

错误(3):Waiting for the cluster to join...(参考博文:)

 

Redis集群创建执行./redis-trib.rb create --replicas 1 XXXX:PORT1 XXXX:PORT2 ....的时候一直等待 Waiting for the cluster to join 很久都没有反应原因:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口集群总线端口为redis客户端连接的端口 + 10000如redis端口为6379则集群总线端口为16379故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口注意:iptables 放开,如果有安全组,也要放开这两个端口

 

根据这个介绍,在阿里服务器上,开放端口 16661 -- 16666 ,因为我的redis端口是 6661 -- 6666,这样,集群顺利搭建成功。

问题(4)节点的重新分配;

最开始集群搭建时候,使用的是 9个节点(四主五从),后来又增加一个,然后,考虑新增的节点设为主节点,将先前的某个从节点 设为 新增的主节点的从节点,这样能保证五主五从。按照博文中操作,新增主节点成功,分配哈希成功,然后在改变某个从节点的主节点时候,出现了问题。我先把先前的操作贴出来

*****************  方式1redis-cli -c -p 6387 cluster replicate 32272a219f112c7fa4d5e52ae209b0e423c05f1d    // 将新节点6387 添加到 id为xxxx的主节点下面32272a219f112c7fa4d5e52ae209b0e423c05f1d 127.0.0.1:6388 master - 0 1502087249399 10 connected 0-749 4096-4845 8192-8941 12288-13037d5630ab94d6e16d223dfd531a00090d51d7c5ee8 127.0.0.1:6386 slave a7b1f53d6db875cfef4bc74b841c3c609470e21d 0 1502087248898 8 connectedfa7f023aea260776b60f2e05f899c712753a2e66 127.0.0.1:6387 slave 32272a219f112c7fa4d5e52ae209b0e423c05f1d 0 1502087249399 10 connectedbb2b284449a61ecc597db035b9b5aa884f1e5f8b 127.0.0.1:6381 master - 0 1502087248497 3 connected 8942-122874bdfde82873f49de95e0eafe882fd7243a916ce9 127.0.0.1:6379 myself,master - 0 0 1 connected 750-4095a7b1f53d6db875cfef4bc74b841c3c609470e21d 127.0.0.1:6382 master - 0 1502087249900 4 connected 13038-16383577eb5f573e4e1e360445df5492609dfb5923bb4 127.0.0.1:6384 slave dd43d06ca57da06beb4efa503def231523c00285 0 1502087248898 6 connected6484325ac3c6e432ce556866055dacbcb7b9dc3d 127.0.0.1:6383 slave 32272a219f112c7fa4d5e52ae209b0e423c05f1d 0 1502087249399 10 connected4c61578e2b3817d1b4709aa78dca4602abe40808 127.0.0.1:6385 slave bb2b284449a61ecc597db035b9b5aa884f1e5f8b 0 1502087248397 7 connecteddd43d06ca57da06beb4efa503def231523c00285 127.0.0.1:6380 master - 0 1502087248898 2 connected 4846-8191主   -- 从6388 -- 6387 638363796381  -- 63856380  -- 63846382  -- 6386

但是,按照这种方式来处理的时候,没有成功,如上所示,这样就将 原先6379 的两个从节点都转移到 新增节点 6388下面了。没有达到预期效果。

(也可能我的操作不对造成的,有需要的可以自己测试下这种方式)。

然后,换了另一种方式,如下

******************  方式2[root@iZwz9h69m8hhqu3855nbhkZ src]# redis-cli -c -p 6383127.0.0.1:6383> cluster replicate 4bdfde82873f49de95e0eafe882fd7243a916ce9OK127.0.0.1:6383> quit32272a219f112c7fa4d5e52ae209b0e423c05f1d 127.0.0.1:6388 master - 0 1502089485248 10 connected 0-749 4096-4845 8192-8941 12288-13037d5630ab94d6e16d223dfd531a00090d51d7c5ee8 127.0.0.1:6386 slave a7b1f53d6db875cfef4bc74b841c3c609470e21d 0 1502089483245 8 connectedfa7f023aea260776b60f2e05f899c712753a2e66 127.0.0.1:6387 slave 32272a219f112c7fa4d5e52ae209b0e423c05f1d 0 1502089484747 10 connectedbb2b284449a61ecc597db035b9b5aa884f1e5f8b 127.0.0.1:6381 master - 0 1502089483745 3 connected 8942-122874bdfde82873f49de95e0eafe882fd7243a916ce9 127.0.0.1:6379 myself,master - 0 0 1 connected 750-4095a7b1f53d6db875cfef4bc74b841c3c609470e21d 127.0.0.1:6382 master - 0 1502089483745 4 connected 13038-16383577eb5f573e4e1e360445df5492609dfb5923bb4 127.0.0.1:6384 slave dd43d06ca57da06beb4efa503def231523c00285 0 1502089484245 6 connected6484325ac3c6e432ce556866055dacbcb7b9dc3d 127.0.0.1:6383 slave 4bdfde82873f49de95e0eafe882fd7243a916ce9 0 1502089484747 10 connected4c61578e2b3817d1b4709aa78dca4602abe40808 127.0.0.1:6385 slave bb2b284449a61ecc597db035b9b5aa884f1e5f8b 0 1502089484747 7 connecteddd43d06ca57da06beb4efa503def231523c00285 127.0.0.1:6380 master - 0 1502089484245 2 connected 4846-8191主   --- 从6379 -- 63836380 -- 63846381 -- 63856382 -- 63866388 -- 6387ps: redis-cli -c -p 6379 cluster nodes   --------查看节点情况

这样就okay了。

 

三、集群搭建中用到的redis常用命令等

主要涉及:

    redis包的下载、安装;

    环境包的下载、安装、调试;

    redis实例配置修改、启动、关闭;

    redis集群的创建、节点新增、删除、新增节点分配哈希槽、指定主从、修改主从等;

    redis服务的关闭;

    文件的复制、修改、删除、创建等;

下面是我在服务器上操作的主要命令的记录,不一定对其他人适用,只给自己留作记忆:

我敏!I love you! mkdir -p /tmp/dir1/dir2 创建一个目录树redis-server /home/redis/redis/redis-3.2.9/redis.conf   根据这个conf 启动redis服务linux vi编辑的 相关操作:编辑,保存,退出等ps -ef|grep redis   查看redis使用情况cd /usr/local/redis3.0/srccd /home/redis/redis/redis-3.2.9/src   //我的服务器上的redis 目录 ,方便下次查找./redis-trib.rb  create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005./redis-trib.rb  create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 127.0.0.1:6387./redis-trib.rb  create --replicas 1 服务器ip:6661 服务器ip:6662 服务器ip:6663 服务器ip:6664 服务器ip:6665 服务器ip:6666./redis-trib.rb  create --replicas 1 127.0.0.1:6661 127.0.0.1:6662 127.0.0.1:6663 127.0.0.1:6664 127.0.0.1:6665 127.0.0.1:6666netstat -tunpl    //查看所有的进程cp /usr/local/cluster/redis.conf  /usr/local/cluster/7006/   复制文件到7006文件夹redis-cli -c -p 6379 cluster nodes    查看redis集群节点情况,能够标识出主从和连接数等./redis-trib.rb add-node 127.0.0.1:6388 127.0.0.1:6379   //cd到redis目录下 src 下,执行,增加 6388节点,6379是已存在的redis-cli -c -p 6387 cluster replicate 32272a219f112c7fa4d5e52ae209b0e423c05f1d    // 将新节点6387 添加到 id为xxxx的主节点下面redis-cli -p 6387 cluster nodes | grep slave | grep 32272a219f112c7fa4d5e52ae209b0e423c05f1d  //查看主节点 6387的从节点//将某个从节点6383,改变其主节点为 id = 4bdfde82873f49de95e0eafe882fd7243a916ce9 的主节点[root@iZwz9h69m8hhqu3855nbhkZ src]# redis-cli -c -p 6383127.0.0.1:6383> cluster replicate 4bdfde82873f49de95e0eafe882fd7243a916ce9OK127.0.0.1:6383> quitpkill -9 redis  // 干掉redis,终极必杀 redis-trib.rb del-node 192.168.10.220:6385 '9c240333476469e8e2c8e80b089c48f389827265'   //删除从节点 by节点id 32272a219f112c7fa4d5e52ae209b0e423c05f1d 127.0.0.1:6388 master - 0 1502096124913 10 connected 0-749 4096-4845 8192-8941 12288-13037d5630ab94d6e16d223dfd531a00090d51d7c5ee8 127.0.0.1:6386 slave a7b1f53d6db875cfef4bc74b841c3c609470e21d 0 1502096126414 8 connectedfa7f023aea260776b60f2e05f899c712753a2e66 127.0.0.1:6387 slave 32272a219f112c7fa4d5e52ae209b0e423c05f1d 0 1502096126414 10 connectedbb2b284449a61ecc597db035b9b5aa884f1e5f8b 127.0.0.1:6381 master - 0 1502096124413 3 connected 8942-122874bdfde82873f49de95e0eafe882fd7243a916ce9 127.0.0.1:6379 myself,master - 0 0 1 connected 750-4095a7b1f53d6db875cfef4bc74b841c3c609470e21d 127.0.0.1:6382 master - 0 1502096125413 4 connected 13038-16383577eb5f573e4e1e360445df5492609dfb5923bb4 127.0.0.1:6384 slave dd43d06ca57da06beb4efa503def231523c00285 0 1502096125413 6 connected6484325ac3c6e432ce556866055dacbcb7b9dc3d 127.0.0.1:6383 slave 4bdfde82873f49de95e0eafe882fd7243a916ce9 0 1502096125914 10 connected4c61578e2b3817d1b4709aa78dca4602abe40808 127.0.0.1:6385 slave bb2b284449a61ecc597db035b9b5aa884f1e5f8b 0 1502096125413 7 connecteddd43d06ca57da06beb4efa503def231523c00285 127.0.0.1:6380 master - 0 1502096124413 2 connected 4846-8191redis-trib.rb reshard 127.0.0.1:6388cp /home/redis/redis/redis-3.2.9/redis.conf /usr/local/cluster/6661/cd /usr/local/cluster/6661 //********************* 相关英语 replica  -- 复制品,从

 

四、主要参考和学习的博文

   

  

  

  

  

  

  

 

  

 

 

   还有几篇挺好的,不一一贴出来了。

 

五、其他

 

集群搭建完成时,测试okay,感谢瓜弟和小王子的服务器,感谢伞、胖哥等。

下篇,我把测试demo发出来。

深深的体会:动手才是程序员学习的正确姿势!

转载于:https://www.cnblogs.com/zhengzeze/p/7325750.html

你可能感兴趣的文章
我国电子商务B2C市场和C2C市场规模的变化
查看>>
Javascript编写类的混合方式
查看>>
2008R2 WDS(一)---安装WDS服务器
查看>>
java 枚举
查看>>
“懒惰” Linux 运维工程师的 10 个关键技巧
查看>>
c++求两个向量的交点
查看>>
Hadoop安装-单节点/伪分布(2.7.3)
查看>>
dz2.5如何转phpwind 8.7
查看>>
KVM精简教程(四):virt-install命令详解
查看>>
谢烟客---------Linux之深入理解anaconda使用
查看>>
【Linux】 Linux常用命令大全
查看>>
浅谈ERP管理软件的实施现状体现
查看>>
我的友情链接
查看>>
关于nodejs iconv的编码无效 说明
查看>>
PYTHON代码:根据FileRecord和MAP的关系,拼接IBM V7000 精简卷碎片
查看>>
为Maven项目配置多个源文件夹
查看>>
zabbix 的报错sock报错
查看>>
Docker 完全指南
查看>>
IT十八掌作业_java基础第二天_进制转换原理和补码存储方式
查看>>
mysql的安装
查看>>