一、Redis-Cluster简介
redis 3.0之后版本支持redis-cluster集群,它是redis官方提出的解决方案,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
二、集群搭建要求
2.1 Redis集群至少需要三个节点,为了保证集群的高可用,每个节点 采用一主一备的方式,所以需要6台服务器。本次搭建采用一台虚拟机搭建6个redis实例的方式搭建伪集群,端口号设定为(8001-8006)
2.2 本次需要用到 redis3.0.0 ,redis-3.0.0.gem 建议ruby脚本与redis版本保持一致
三、准备工作
(1)因为Redis是C语言开发的,所以Redis 需要安装C语言的编译环境,本次采用gcc在线安装的方式
yum install gcc-c++
(2)使用yum命令安装 ruby ,本次采用ruby脚本来实现
yum install ruby
yum install rubygems
(3)将redis3.0.0和redis-3.0.0.gem 上传至linux服务器(上传步骤省略)
四、redis集群搭建具体步骤如下:
(1)创建目录 /usr/local/redis-cluster,安装6个redis实例,分别安装在以下目录
/usr/local/redis-cluster/redis-1
/usr/local/redis-cluster/redis-2
/usr/local/redis-cluster/redis-3
/usr/local/redis-cluster/redis-4
/usr/local/redis-cluster/redis-5
/usr/local/redis-cluster/redis-6
tar -zxvf redis-3.0.0.tar.gz
2.2 进入解压目录,然后使用make命令编译源文件
make
看到输入如下结果表示编译成功:
以第一个redis实例为例,命令如下:
make install PREFIX=/usr/local/redis-cluster/redis-1
将redis.conf文件 复制到对应的 redis实例目录中,命令如下:
[root@iZm5e27yvrkjv9saul4rrhZ redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-1/bin
[root@iZm5e27yvrkjv9saul4rrhZ redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-2/bin
[root@iZm5e27yvrkjv9saul4rrhZ redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-3/bin
[root@iZm5e27yvrkjv9saul4rrhZ redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-4/bin
[root@iZm5e27yvrkjv9saul4rrhZ redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-5/bin
[root@iZm5e27yvrkjv9saul4rrhZ redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-6/bin
(3)配置集群
3.1 删除快照文件dump.rdb,修改每个redis节点的配置文件redis.conf,以第一个redis实例为例,将默认端口号6379修改为8001(其余节点依次类推修改为8002—8006),由于redis默认方式为前台启动,所以需要修改为后端启动 daemonize no 改为yes,将cluster-enabled yes 前的注释去掉,表示开启集群方式,操作如下:
3.2 由于有6个redis实例,每一个单独启动过于繁琐,所以进入目录:/usr/lcoal/redis-cluster/,创建一个批量启动redis节点的脚本文件,使用命令 vi redis-all.sh ,然后添加如下内容
cd redis-1/bin
./redis-server redis.conf
cd ../..
cd redis-2/bin
./redis-server redis.conf
cd ../..
cd redis-3/bin
./redis-server redis.conf
cd ../..
cd redis-4/bin
./redis-server redis.conf
cd ../..
cd redis-5/bin
./redis-server redis.conf
cd ../..
cd redis-6/bin
./redis-server redis.conf
cd ../..
3.3 启动redis-all.sh 脚本
./redis-all.sh
3.4使用命令查询是否启动成功
ps -ef |grep redis
gem install redis-3.0.0.gem
4.1使用 ruby 脚本搭建redis集群。
进入redis源码目录中的src目录 执行如下命令(注意:命令中的具体IP及端口,根据实际搭建的情况进行修改)
./redis-trib.rb create --replicas 1 172.31.141.28:8001 172.31.141.28:8002 172.31.141.28:8003 172.31.141.28:8004 172.31.141.28:8005 172.31.141.28:8006
4.2 最终出现如截图所示表示成功(注意:在执行途中需要手动输入 yes )
注意:redis部署在阿里云服务器,遇到执行命令后,一直waiting for the cluster to join…
1、删除掉每个节点文件下的 dump.rdb和nodes.conf文件
2、开放你redis实例端口号+10000的端口,例如redis端口号为6379,则需要开通端口号16379能够进行访问
4.3 验证:进入任意一个节点下(例如j进入第一个节点的bin目录下:cd /usr/local/redis-cluster/redis-1/bin)查看集群信息
./redis-cli -h 172.31.141.28 -p 8001 -c
如果出现 redis集群报错:(error) MOVED 解决方法 因为启动 redis-cli 时没有设置集群模式所导致,启动时使用 -c 参数来启动集群模式
查询集群中的节点信息,输入如下命令:
cluster nodes