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

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配置文件

在建立集群时更改端口 port

cluster-enabled yes     //开启集群,将注释去掉

daemonize    yes     //redis可以使用后台运行,将注释去掉

bind 本机ip          //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群,直接可以注释掉

pidfile "/var/run/redis_6379.pid" //7001 7002 不能重复

appendonly  yes   //aof日志开启  有需要就开启,它会每次写操作都记录一条日志,默认是rdb的方式

dir "/usr/local/redis-cluster/7004" //改为7001 、7002、7003...

 

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

开启6个redis脚本:startall.sh

cd 7001
./redis-server redis.conf
cd ..
cd 7002
./redis-server redis.conf
cd ..
cd 7003
./redis-server redis.conf
cd ..
cd 7004
./redis-server redis.conf
cd ..
cd 7005
./redis-server redis.conf
cd ..
cd 7006
./redis-server redis.conf
cd..

 

关闭6个redis脚本: stopall.sh

cd 7001
./redis-cli -p 7001 shutdown
cd ..
cd 7002
./redis-cli -p 7002 shutdown
cd ..
cd 7003
./redis-cli -p 7003 shutdown
cd ..
cd 7004    
./redis-cli -p 7004 shutdown
cd ..      
cd 7005   
./redis-cli -p 7005 shutdown
cd ..        
cd 7006
./redis-cli -p 7006 shutdown
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

 开始创建集群

Redis教程(十)阿里云中如何搭建Redis集群_第1张图片

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

Redis教程(十)阿里云中如何搭建Redis集群_第2张图片

5、  连接集群

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

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

Redis教程(十)阿里云中如何搭建Redis集群_第3张图片

表明集群已经搭建成功!

 

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

Redis教程(十)阿里云中如何搭建Redis集群_第4张图片

遇到的问题:

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

cd 7001
rm -rf dump.rdb nodes.conf
cd ..
cd 7002
rm -rf dump.rdb nodes.conf
cd ..
cd 7003
rm -rf dump.rdb nodes.conf
cd ..
cd 7004
rm -rf dump.rdb nodes.conf
cd ..
cd 7005
rm -rf dump.rdb nodes.conf
cd ..
cd 7006
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集群设置密码

你可能感兴趣的:(Redis)