Redis集群生产环境搭建,主从搭建,动态增删步骤

Posted 宇宙磅礴而冷漠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis集群生产环境搭建,主从搭建,动态增删步骤相关的知识,希望对你有一定的参考价值。

1.解压安装初始化

(本次计划先安装3主3从)
上传安装包到linux目录/home/app/里
解压安装包
tar -xvf redis-5.0.4.tar.gz
在这里插入图片描述
为方便使用把解压后的redis-5.0.4改名为redis
mv redis-5.0.4 redis
安装redis,跳入到redis根目录中顺序执行
(1):make
在这里插入图片描述
(2):make install
在这里插入图片描述

2.修改所有单台redis的配置文件redis.conf

所有配置根据不同机器的实际端口等情况适当调整
注释本地绑定IP地址(69行)
在这里插入图片描述
关闭保护模式(88行)
在这里插入图片描述
开启后台启动 (136行)
在这里插入图片描述
修改端口号(92行)
在这里插入图片描述
修改pid文件(存储进程号)(158行)
在这里插入图片描述
修改持久化文件路径(rdb,aof存储文件都在这个目录)(263行)
在这里插入图片描述
设定内存优化策略,其他类型选择上述文章有解释(597行)
在这里插入图片描述

关闭AOF模式(699行)
在这里插入图片描述
开启集群配置(838行)
在这里插入图片描述
开启集群配置文件(以后可查看该文件知道各节点信息)(846行)
在这里插入图片描述
修改集群超时时间(852行)
在这里插入图片描述

2.启动全部6台redis单机

启动命令(根据配置文件的方式启动)

redis-server redis.conf

如果是伪集群,可以用脚本
vim start.sh

#!/bin/sh
redis-server 7000/redis.conf &
redis-server 7001/redis.conf &
redis-server 7002/redis.conf &
redis-server 7003/redis.conf &
redis-server 7004/redis.conf &
redis-server 7005/redis.conf &

同理也可以创建关闭脚本(自行操作)
sh start.sh

3.组成集群

老版本生成集群命令
./redis-trib.rb create --replicas 1 192.168.126.131:7000 192.168.126.131:7001 192.168.126.131:7002 192.168.126.131:7003 192.168.126.131:7004 192.168.126.131:7005
命令解释:通过redis-trib.rb可创建redis集群,然后通过–replicas后面接的数字,表示1个主节点对应几个从节点。
redis-trib.rb工具在redis解压目录下的src里
新版本5.0以上生成集群命令
redis-cli --cluster create --cluster-replicas 1 192.168.126.131:7000 192.168.126.131:7001 192.168.126.131:7002 192.168.126.131:7003 192.168.126.131:7004 192.168.126.131:7005
命令解释:通过redis-cli命令可创建redis集群, --cluster-replicas 1表示创建的主节点对应几个从节点
安装
在这里插入图片描述
进入集群:
redis-cli -p port
redis-cli -h 192.168.126.131 -p 7001 (-c可写)
查看信息常用命令:
cluster info
clustrt nodes
info replication

4.增加主节点7006

增加7006到集群里
和步骤1相似先创建启动一台7006端口的redis单机
添加7006到集群中
老版本命令
命令:第一个ip:port 为新增的节点ip和端口,第二个ip:port为集群中的任意节点和端口
./redis-trib.rb add-node 192.168.126.131:7006 192.168.126.131:7000
新版本5.0以上命令
命令:第一个ip:port 为新增的节点ip和端口,第二个ip:port为集群中的任意节点和端口
redis-cli --cluster add-node 192.168.126.131:7006 192.168.126.131:7000
在这里插入图片描述
进入集群任意一台redis-cli -h 192.168.126.131 -p 7000
cluster nodes可查看主机从机数量等信息,可以发现新加的7006为master(主)
在这里插入图片描述
7006目前没有哈希槽,也不会存放数据。
需要给7006分配hash槽。
规则 16384/现在的主节点数量=槽数(这里16384/4=4096)(每4096大小分配一个主节点)
为7006重新分配哈希槽
老版本命令
规则:连接集群中任意一个可用结点都行
./redis-trib.rb reshard 192.168.126.131:7000
新版本5.0以上命令
规则:连接集群中任意一个可用结点都行
redis-cli --cluster reshard 192.168.126.131:7000
填写4096然后填写7006对应的id
在这里插入图片描述
在这里插入图片描述
输入源节点 id,槽将从源节点中拿,分配后的槽在源节点中将不存在
输入 all 从所有源节点中获取槽
输入 done 完成,该node取消分配
在这里插入图片描述

5.新增从节点->7007作为主机7006的从加入集群

类似步骤一创建启动一台7007端口的机器
老版本操作步骤
./redis-trib.rb add-node --slave --master-id 主节点id 新节点的ip:port 集群中节点ip:port(集群中任一节点都可以)
如果cluster-config-file没有指定则默认为nodes.conf,可能会报错:
[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
解决:删除生成的配置文件 nodes.conf,删除后再执行命令。
新版本5.0以上操作步骤
执行
redis-cli --cluster add-node 192.168.126.131:7007 192.168.126.131:7000
在这里插入图片描述
7007此时为主,没有哈希槽
进入7007查看其他节点信息,找到7006信息,并实现挂载到7006
挂载命令cluster replicate 7006的id
在这里插入图片描述
再次执行cluster nodes 发先自己已经是从了,keys *也能获取到主的数据

6.删除从节点

查看主从关系
先进入集群任意一台执行cluster nodes 查看主机和从机(发现有主机7006)
如果移除某台主比如7006这台主机的从机(不知道7006的从机是谁)
进入7006主机,执行info replication可查看从机信息,从而才能进行对应从机移除
从节点未分配槽,所以能直接移除
现在移除7006的从机7007
老版本
./redis-trib.rb del-node 移除的节点ip: 移除的节点port 移除的节点id
新版本5.0以上
redis-cli --cluster del-node 移除的节点ip: 移除的节点port 移除的节点id
执行 redis-cli --cluster del-node 192.168.126.131:7007 7007的id
执行成功7007端口进程会关闭

7. 删除主节点

(直接删除主节点肯会报错,需要把它的从节点先删了)
主节点被分配了hash槽,需要先把槽重新分配给其他主节点。
当前一共有4个主机,每个节点掌管4096个槽,如果移除7006这个主节点需要把7006自身管理的4096个槽交给其他主机管理,然后自己才能移除下线。
执行
redis-cli --cluster reshard 192.168.126.131:7000 (集群的随机一台)
将主机7006管理的槽全部交给7001(槽的交出管理需要保证这两个机器全是主机
(4096值在界面能看出来是4096 slots,具体大小根据界面7006提示槽数量来写,如果提示7006槽数是100,则下面自己填写的参数是100)
在这里插入图片描述
cluster nodes查看发现7001管理了之前7006的槽位,而7006没了槽(有的connected后面没有参数因为它是slave从机,而从机不会被分配槽)
在这里插入图片描述
最后
执行 redis-cli --cluster del-node 192.168.126.131:7006 7006的id
就完成了

我的更多redis操作请点击

我的redis更多原理和功能分析,主从搭建哨兵等等,springboot整合redis

Redis8大数据类型常用操作大全

以上是关于Redis集群生产环境搭建,主从搭建,动态增删步骤的主要内容,如果未能解决你的问题,请参考以下文章

NoSQL 之Redis主从复制哨兵和集群介绍及详细搭建步骤

Redis之集群环境搭建

大数据开发:Redis 主从架构搭建

Redis之集群环境搭建

Jenkins篇:Jenkins 集群搭建(主从)

Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义