文章目录
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
就完成了