redis|centos7 redis集群搭建

说明 本次搭建是在单机版搭建基础上搭建的。阅读之时请参考下面文章:
redis单机版搭建
在同一台机器上搭建的,所以是伪集群搭建。真正搭建应该是在不同的机器上。
架构图 redis|centos7 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

redis|centos7 redis集群搭建
文章图片

访问
-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

redis|centos7 redis集群搭建
文章图片

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

redis|centos7 redis集群搭建
文章图片

水平扩展-添加 创建服务
根据上面再创建两个服务 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

redis|centos7 redis集群搭建
文章图片

为8007分配slot槽位
./src/redis-cli -a redis --cluster reshard 集群中随意一个服务的ip和端口
./src/redis-cli -a -redis --cluster reshard 127.0.0.1:8001

redis|centos7 redis集群搭建
文章图片

查看8007分配情况
[root@huameng redis-5.0.12] ./src/redis-cli -c -a redis -h 127.0.0.1 -p 8001

redis|centos7 redis集群搭建
文章图片

将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

redis|centos7 redis集群搭建
文章图片

水平扩展-删除 说明
将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

redis|centos7 redis集群搭建
文章图片

删除8007服务
./src/redis-cli -a redis --cluster del-node 127.0.0.1:8007 f010ee3575e59d93d86aa78a8c14375efedb1959

redis|centos7 redis集群搭建
文章图片

重启集群
### 全部停掉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,
并重启所有服务即可

    推荐阅读