centos7 redis集群搭建

说明

本次搭建是在单机版搭建基础上搭建的。阅读之时请参考下面文章:
redis单机版搭建
在同一台机器上搭建的,所以是伪集群搭建。真正搭建应该是在不同的机器上。

架构图

centos7 redis集群搭建_第1张图片

搭建过程

创建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

centos7 redis集群搭建_第2张图片

访问

-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

centos7 redis集群搭建_第3张图片

## 查看集群节点信息
cluster info

centos7 redis集群搭建_第4张图片

水平扩展-添加

创建服务

根据上面再创建两个服务 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

centos7 redis集群搭建_第5张图片

为8007分配slot槽位

./src/redis-cli -a redis --cluster reshard 集群中随意一个服务的ip和端口

./src/redis-cli -a -redis --cluster reshard 127.0.0.1:8001

centos7 redis集群搭建_第6张图片

查看8007分配情况

[root@huameng redis-5.0.12] ./src/redis-cli -c -a redis -h 127.0.0.1 -p 8001

centos7 redis集群搭建_第7张图片

将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

centos7 redis集群搭建_第8张图片

水平扩展-删除

说明

将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

centos7 redis集群搭建_第9张图片

删除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

解决方案:
集群启动命令中的127.0.0.1需改为实际端口。并且需要放开上面的端口(可能不需要)
查看各个服务中cluster-config-file对应的文件,如果发现里面有内网ip或者127.0.0.1时,改为外网ip,
并重启所有服务即可

你可能感兴趣的