一.创建集群目录
mkdir /usr/local/redis-cluster #创建集群文件目录
cd /usr/local/redis-cluster/ #进入集群文件目录
mkdir -p 8001/data 8002/data 8003/data 8004/data 8005/data 8006/data #创建集群存放数据目录
说明:
这里用一台服务器模拟reids cluster 集群,集群的端口号从8001-8006表示6个不同的redis
二.安装redis
1.下载redis安装包
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
2.解压redis
tar -zxvf redis-3.2.9.tar.gz
3.安装redis
cd redis-3.2.9
make
cd src
make install PREFIX=/usr/local/redis
4.将配置文件移动到安装目录下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc
5. 将安装好的redis,复制一个新的实例到集群8001目录
cp -r /usr/local/redis /usr/local/redis-cluster/8001
6.修改配置文件
vi /usr/local/redis-cluster/8001/redis/etc/redis.conf #进入redis8001配置文件
port 8001 #第一个reids端口号
daemonize yes #后台运行模式
bind 172.25.62.102 #绑定当前机器 IP
dir /usr/local/redis-cluster/8001/data/ #数据文件存放位置
pidfile /var/run/redis_8001.pid #pid 8001和port要对应
cluster-enabled yes #启动集群模式
cluster-config-file nodes8001.conf #8001和port要对应
cluster-node-timeout 15000 #超时时间
appendonly yes #以aof方式持久化数据
三.创建bin目录,并将集群脚本复制到该目录
cd /usr/local/redis-cluster
mkdir bin #创建bin目录
cd /home/redis/redis-3.2.9/src #刚刚redis安装的解压目录,每个人的可能一样
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin #复制脚本
四.复制另外5个redis节点
1.复制5个节点
\cp -rf /usr/local/redis-cluster/8001/* /usr/local/redis-cluster/8002
\cp -rf /usr/local/redis-cluster/8001/* /usr/local/redis-cluster/8003
\cp -rf /usr/local/redis-cluster/8001/* /usr/local/redis-cluster/8004
\cp -rf /usr/local/redis-cluster/8001/* /usr/local/redis-cluster/8005
\cp -rf /usr/local/redis-cluster/8001/* /usr/local/redis-cluster/8006
2.分别修改5个节点的配置信息
vi /usr/local/redis-cluster/8002/redis/etc/redis.conf #进入8002redis配置文件
%s/8001/8002 #通过搜索命令,全局替换配置文件中的8001,改成8002
vi /usr/local/redis-cluster/8003/redis/etc/redis.conf
%s/8001/8003 #通过搜索命令,全局替换配置文件中的8001,改成8003
vi /usr/local/redis-cluster/8004/redis/etc/redis.conf
%s/8001/8004 #通过搜索命令,全局替换配置文件中的8001,改成8004
vi /usr/local/redis-cluster/8005/redis/etc/redis.conf
%s/8001/8005 #通过搜索命令,全局替换配置文件中的8001,改成8005
vi /usr/local/redis-cluster/8006/redis/etc/redis.conf
%s/8001/8006 #通过搜索命令,全局替换配置文件中的8001,改成8006
说明:以下是被修改的地方
port 8001
dir /usr/local/redis-cluster/8001/data/
cluster-config-file nodes-8001.conf
pidfile /var/run/redis_8001.pid
五.启动8001-8006六个节点redis
cd /usr/local/redis-cluster/bin #进入redis集群 bin目录
./redis-server /usr/local/redis-cluster/8001/redis/etc/redis.conf #启动8001
./redis-server /usr/local/redis-cluster/8002/redis/etc/redis.conf #启动8002
./redis-server /usr/local/redis-cluster/8003/redis/etc/redis.conf #启动8003
./redis-server /usr/local/redis-cluster/8004/redis/etc/redis.conf #启动8004
./redis-server /usr/local/redis-cluster/8005/redis/etc/redis.conf #启动8005
./redis-server /usr/local/redis-cluster/8006/redis/etc/redis.conf #启动8006
查看一下redis进程
ps -ef|grep redis
六.安装集群需要软件
yum install ruby
yum install rubygems
*redis-3.2.1.gem下载地址: https://rubygems.org/gems/redis/versions/3.2.1*
gem install -l redis-3.2.1.gem #安装redis-3.2.1.gem
说明:
由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口
七.创建集群环境
/usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 172.25.62.102:8001 172.25.62.102:8002 172.25.62.102:8003 172.25.62.102:8004 172.25.62.102:8005 172.25.62.102:8006
说明:replicas 1 为每个主节点分配一个从节点,这里创建的是3主3从的集群模式
下图表示安装成功界面
至此,redis cluster集群已经安装完毕。
八.测试一下redis cluster集群是否部署成功
cd /usr/local/redis-cluster/bin #进入集群bin目录
./redis-cli -c -h 172.25.62.102 -p 8001 #连接8001节点, -c 表示进入集群环境
说明:Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的
所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。
输入cluster nodes查看集群节点信息
从图中可以看到:
a.8001 为主节点,其从节点为8004,其槽的分布为0-5460
b.8002 为主节点,其从节点为8005,其槽的分布为5461-10922
c.8003 为主节点,其从节点为8006,其槽的分布为10923-16383
redis cluster集群在以下情况下判断集群宕机:
a.当超过半数的主节点宕机
b.某个主节点和下面的从节点全部宕机
九.springboot整合redis cluster集群
1.新建springboot项目,引入redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置文件添加redis cluster集群信息
spring.redis.database=0
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=10000
spring.redis.cluster.nodes=172.25.62.102:8001, 172.25.62.102:8002, 172.25.62.102:8003, 172.25.62.102:8004, 172.25.62.102:8005, 172.25.62.102:8006
简单测试一下
ok了,redis cluster 集群和springboot整合已经完成了。