说明 本次搭建是在单机版搭建基础上搭建的。阅读之时请参考下面文章:
redis单机版搭建
在同一台机器上搭建的,所以是伪集群搭建。真正搭建应该是在不同的机器上。
架构图
文章图片
搭建过程
创建data的保存目录
[root@huameng redis-5.0.12] mkdir -p data/cluster/8001
[root@huameng redis-5.0.12] mkdir -p data/cluster/8002
[root@huameng redis-5.0.12] mkdir -p data/cluster/8003
[root@huameng redis-5.0.12] mkdir -p data/cluster/8004
[root@huameng redis-5.0.12] mkdir -p data/cluster/8005
[root@huameng redis-5.0.12] mkdir -p data/cluster/8006
创建log目录
[root@huameng redis-5.0.12] mkdir -p log/8001
[root@huameng redis-5.0.12] mkdir -p log/8002
[root@huameng redis-5.0.12] mkdir -p log/8003
[root@huameng redis-5.0.12] mkdir -p log/8004
[root@huameng redis-5.0.12] mkdir -p log/8005
[root@huameng redis-5.0.12] mkdir -p log/8006
复制conf文件
## 创建conf存入目录
[root@huameng redis-5.0.12] mkdir -p conf/cluster
## 复制redis.conf文件到该目录下
cp redis.conf conf/cluster/redis-8001.conf
修改redis-8001.conf
##修改端口
port 8001
##开启守护进程
daemonize yes
##指定访问ip
bind 0.0.0.0
##指定pid文件
pidfile "/var/run/redis_8001.pid"
##指定日志文件
logfile "/usr/local/redis-5.0.12/log/8001/8001.log"
##指定日志存储位置
dir "/usr/local/redis-5.0.12/data/cluster/8001"
## 开启AOF持久化
appendonly yes
##启用集群模式
cluster-enabled yes
##集群节点信息保存文件
cluster-config-file nodes-8001.conf
##指定节点超时时间
cluster-node-timeout 5000#不必须
##设置访问密码
requirepass redis
##设置集群节点访问密码
masterauth redis
复制其它conf文件
[root@huameng cluster] cp redis-8001.conf redis-8002.conf
[root@huameng cluster] cp redis-8001.conf redis-8003.conf
[root@huameng cluster] cp redis-8001.conf redis-8004.conf
[root@huameng cluster] cp redis-8001.conf redis-8005.conf
[root@huameng cluster] cp redis-8001.conf redis-8006.conf
分别进入上面conf统一修改 将8001批量替换成对应的端口
:%s/需要修改的/替换的/g
如修改redis-8002.conf
:%s/8001/8002/g
启动所有节点
[root@huameng redis-5.0.12] ./src/redis-server conf/cluster/redis-8001.conf
[root@huameng redis-5.0.12] ./src/redis-server conf/cluster/redis-8002.conf
[root@huameng redis-5.0.12] ./src/redis-server conf/cluster/redis-8003.conf
[root@huameng redis-5.0.12] ./src/redis-server conf/cluster/redis-8004.conf
[root@huameng redis-5.0.12] ./src/redis-server conf/cluster/redis-8005.conf
[root@huameng redis-5.0.12] ./src/redis-server conf/cluster/redis-8006.conf
查看是否全部启动
ps -ef|grep redis
如果有没启动的,去对应的log文件中查看原因
放开防火墙端口
firewall-cmd --add-port=8001/tcp --permanent;
firewall-cmd --add-port=8002/tcp --permanent;
firewall-cmd --add-port=8003/tcp --permanent;
firewall-cmd --add-port=8004/tcp --permanent;
firewall-cmd --add-port=8005/tcp --permanent;
firewall-cmd --add-port=8006/tcp --permanent;
## 开启gossip端口,是各端口+10000
firewall-cmd --add-port=18001/tcp --permanent;
firewall-cmd --add-port=18002/tcp --permanent;
firewall-cmd --add-port=18003/tcp --permanent;
firewall-cmd --add-port=18004/tcp --permanent;
firewall-cmd --add-port=18005/tcp --permanent;
firewall-cmd --add-port=18006/tcp --permanent;
##
firewall-cmd --reload
启动集群
./src/redis-cli -a 密码 -cluster create --cluster-replicas 每个主对应从的个数 ip:port ip:port…
一般前面的是主后面的是从
[root@huameng redis-5.0.12] ./src/redis-cli -a redis --cluster create --cluster-replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006
文章图片
访问
-c
表示使用集群访问
-a
指定访问密码
-h
指定访问ip
-p
指定访问端口
[root@huameng redis-5.0.12] ./src/redis-cli -c -a redis -h 127.0.0.1 -p 8001
## 查看集群结点分配信息详情
cluster nodes
文章图片
## 查看集群节点信息
cluster info
文章图片
水平扩展-添加 创建服务
根据上面再创建两个服务 8007和8008。以8007为master,8008为slave
将8007添加到集群中
./src/redis-cli -a redis --cluster add-node 添加服务的ip和端口 集群中随意一个服务的ip和端口
[root@huameng redis-5.0.12] ./src/redis-cli -a redis --cluster add-node 127.0.0.1:8007 127.0.0.1:8001
文章图片
为8007分配slot槽位
./src/redis-cli -a redis --cluster reshard 集群中随意一个服务的ip和端口
./src/redis-cli -a -redis --cluster reshard 127.0.0.1:8001
文章图片
查看8007分配情况
[root@huameng redis-5.0.12] ./src/redis-cli -c -a redis -h 127.0.0.1 -p 8001
文章图片
将8008加入到集群中
[root@huameng redis-5.0.12] ./src/redis-cli -a redis --cluster add-node 127.0.0.1:8008 127.0.0.1:8001
将8008指定为8007的从服务
cluster replicate master服务的Id
## 进入8008服务
[root@huameng redis-5.0.12] ./src/redis-cli -c -a redis -h 127.0.0.1 -p 8008
## 执行
cluster replicate 8c1df2b3b36b035fec9f2105ede5e7d58cef5366
## 查看集群信息
cluster nodes
文章图片
水平扩展-删除 说明
将8007-8008主从结点从集群中删除
删除从服务8008
[root@huameng redis-5.0.12] ./src/redis-cli -a redis --cluster del-node 删除服务的ip和端口 删除服务的ID
./src/redis-cli -a redis --cluster del-node 127.0.0.1:8008 e010ee3575e59d93d86aa78a8c14375efedb1949
删除主服务8007
先将slot槽位再分配给其它结点
[root@huameng redis-5.0.12] ./src/redis-cli -a redis --cluster reshard 127.0.0.1:8007
文章图片
删除8007服务
./src/redis-cli -a redis --cluster del-node 127.0.0.1:8007 f010ee3575e59d93d86aa78a8c14375efedb1959
文章图片
重启集群
### 全部停掉redis服务
pkill redis-server
### 全部启动redis服务上面有
### redis服务重启后集群及启动,不需要启动集群命令。因为集群分配规则细节已经保存的了对应的文件中。
### 如果需要完全不按照之前的配置规则来,需要删掉cluster-config-file对应的文件后再执行启动集群命令
踩坑
1、外网springboot连接redis集群时出现集群信息访问了内网ip或者是127.0.0.1
【redis|centos7 redis集群搭建】解决方案:
集群启动命令中的127.0.0.1
需改为实际端口。并且需要放开上面的端口(可能不需要)
查看各个服务中cluster-config-file对应的文件,如果发现里面有内网ip或者127.0.0.1时,改为外网ip,
并重启所有服务即可
推荐阅读
- Redis集群搭建方式
- redis|redis集群搭建之主从复制
- redis|Redis的集群搭建(主从复制)
- spring|Redis4集群搭建
- Redis|redis队列缓存 + mysql 批量入库 + php离线整合 PHP解决抢购、秒杀
- 前端笔记|Node.js笔记-Koa2与Redis在项目中安装使用
- #|Redis 学习 - 05 Node.js 客户端操作 Redis、Pipeline 流水线
- NodeJS|Node.js + Redis Sorted Set 实现简单的任务队列
- redis|分布式锁(redis、zookeeper)