Redis教程(十)阿里云中如何搭建Redis集群

雨点打透心脏的1/2处 2022-05-24 12:51 468阅读 0赞

Redis集群搭建

环境:

  • CentOS 7.0

  • 6台redis,端口号分别分配为7001、7002、7003、7004、7005、7006

  • 设置7001、7002、7003为主机,7004、7005、7006分别依次为从机。

1、 在linux中创建redis-cluster目录(名字自己指定), 复制redis的bin目录,配置其中的redis.conf(要是没有就从redis解压目录中复制一份),并命名目录为7001、7002….7006;即,每个目录下有一个bin目录,还有一个redis.conf配置文件。

2、修改redis.conf配置文件

  1. 在建立集群时更改端口 port
  2. cluster-enabled yes //开启集群,将注释去掉
  3. daemonize yes //redis可以使用后台运行,将注释去掉
  4. bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群,直接可以注释掉
  5. pidfile "/var/run/redis_6379.pid" //7001 7002 不能重复
  6. appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志,默认是rdb的方式
  7. dir "/usr/local/redis-cluster/7004" //改为7001 、7002、7003...

2、 将6个redis全部开启(这里可以编写脚本控制开启和关闭)

开启6个redis脚本:startall.sh

  1. cd 7001
  2. ./redis-server redis.conf
  3. cd ..
  4. cd 7002
  5. ./redis-server redis.conf
  6. cd ..
  7. cd 7003
  8. ./redis-server redis.conf
  9. cd ..
  10. cd 7004
  11. ./redis-server redis.conf
  12. cd ..
  13. cd 7005
  14. ./redis-server redis.conf
  15. cd ..
  16. cd 7006
  17. ./redis-server redis.conf
  18. cd..

关闭6个redis脚本: stopall.sh

  1. cd 7001
  2. ./redis-cli -p 7001 shutdown
  3. cd ..
  4. cd 7002
  5. ./redis-cli -p 7002 shutdown
  6. cd ..
  7. cd 7003
  8. ./redis-cli -p 7003 shutdown
  9. cd ..
  10. cd 7004
  11. ./redis-cli -p 7004 shutdown
  12. cd ..
  13. cd 7005
  14. ./redis-cli -p 7005 shutdown
  15. cd ..
  16. cd 7006
  17. ./redis-cli -p 7006 shutdown
  18. cd ..

在编写好脚本文件后,记得使用chmod 777 为文件赋予可执行权限。

3、 安装ruby环境

因为集群管理工具(redis-trib.rb)是使用ruby脚本语言编写的。

注意:redis版本和ruby版本不匹配经常会导致集群无法建立成功;我使用的是redis4.0.9,之前通过yum方式安装的是默认ruby2.0.0,建立时老是集群报错!最后升级ruby为2.4.1,就可以成功建立集群了。参考:如何升级ruby版本

4、 通过在redis.4.0.9解压目录下的src中找到redis-trib.rb,移动至redis-cluster目录下,运行命令:./redis-trib.rbcreate —replicas 1 主机IP:7001 主机IP:7002 主机IP:7003 主机IP:7004 主机IP:7005 主机IP:7006

开始创建集群

70

出现如下信息说明集群搭建成功:

70 1

5、 连接集群

随便进入一个redis目录,如进入7001目录,运行。./redis-cli –h 主机IP –p 7001 –c

-c指的连接方式是集群连接。

70 2

表明集群已经搭建成功!

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

70 3

遇到的问题:

1、我安装的是redis4.0.9,若是ruby版本过低,在搭建集群的时候会报错;因此我使用的是ruby2.4.1,亲测可用.

2、在搭建集群时出现Waiting for the cluster to join…一直等待问题,查资料解决办法:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000;如redis端口为6379,则集群总线端 口为16379;

3、在集群创建失败时,要停止各个redis进程,然后把各个redis目录的持久化文件、nodes.conf文件全部清除掉;之后重新开启各个redis进程,再输入命令建立集群,一般就能成功,可以写一个脚本clearall.sh

  1. cd 7001
  2. rm -rf dump.rdb nodes.conf
  3. cd ..
  4. cd 7002
  5. rm -rf dump.rdb nodes.conf
  6. cd ..
  7. cd 7003
  8. rm -rf dump.rdb nodes.conf
  9. cd ..
  10. cd 7004
  11. rm -rf dump.rdb nodes.conf
  12. cd ..
  13. cd 7005
  14. rm -rf dump.rdb nodes.conf
  15. cd ..
  16. cd 7006
  17. rm -rf dump.rdb nodes.conf

4、之前在创建集群时:/redis-trib.rbcreate —replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004127.0.0.1:7005 127.0.0.1:7006,这里的IP是回环地址,但是在使用Java代码远程连接的时候,可能会出现连接不上的情况,can not get a resource from pool,我是使用阿里云搭建的,因此直接使用公网地址创建集群,解决远程连接不上的问题。

5、当注释掉bind时 && 没有设置密码 ,保护模式就会生效,因此在用Java代码远程连接时就会出错。

解决方法:①在redis.conf中注释掉保护模式(不安全) ②设置密码(推荐)-> 为redis集群设置密码

发表评论

表情:
评论列表 (有 0 条评论,468人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis教程

    集群环境说明 现有三台服务器, 每台服务器分布两个节点一个(6379),一个(6380) -> ps:实际生产中主从服务器是分布在两个服务器上的