cd /home
wget wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make & make install
#设置后台运行
vi redis.conf
daemonize yes
#启动
redis-server /home/redis-5.0.5/redis.conf
#测试连接
redis-cli ping
返回 pong 说明连接成功
#停止服务
redis-cli shutdown
#删除make的时候生成的几个redisXXX的文件
rm -rf /usr/local/bin/redis-*
#删除redis目录
rm -rf /home/redis-5.0.5
创建集群节点
cd /home
mkdir redis-cluster
cd redis-cluster/
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
mkdir bin
cd bin
cp /usr/local/bin/redis-* .
cd /home
cp redis-5.0.5/redis.conf redis-cluster/9001
修改各节点配置文件选项
先改一个9001节点
cd /home/redis-cluster/9001
vi redis.conf
port 9001(每个节点的端口号) daemonize yes(后台运行) dir
/home/redis-cluster/9001/data/(数据文件存放位置) pidfile
/var/run/redis_9001.pid(pid 9001和port要对应) cluster-enabled yes(启动集群模式)
cluster-config-file nodes-9001.conf(9001和port要对应) cluster-node-timeout
15000 appendonly yes
然后复制redis.conf到其他节点
cp redis.conf ../9002
cp redis.conf ../9003
cp redis.conf ../9004
cp redis.conf ../9005
cp redis.conf ../9006
全局替换端口,在vi命令模式下进行替换
:%s/9001/9002/g
:%s/9001/9003/g
:%s/9001/9004/g
:%s/9001/9005/g
:%s/9001/9006/g
编写集群启动脚本
cd /home/redis-cluster/bin
vi redis-cluster-start.sh
#!/bin/sh
redis-server /home/redis-cluster/9001/redis.conf redis-server
/home/redis-cluster/9002/redis.conf redis-server
/home/redis-cluster/9003/redis.conf redis-server
/home/redis-cluster/9004/redis.conf redis-server
/home/redis-cluster/9005/redis.conf redis-server
/home/redis-cluster/9006/redis.conf
chmod 777 redis-cluster-start.sh
#启动
./redis-cluster-start.sh
#查看启动服务
ps -ef | grep redis
redis-cli --cluster create 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006 --cluster-replicas 1
状态检查
redis-cli -c -h 127.0.0.1 -p 9001
cluster info
cluster nodes
redis-cli --cluster info 127.0.0.1:9001
redis-cli --cluster check 127.0.0.1:9001
redis5提供了关闭集群的工具,在目录 /home/redis-5.0.5/utils/create-cluster下
cd /home/redis-5.0.5/utils/create-cluster
vi create-cluster
#修改port为9000
端口PROT设置为9000,NODES为6,工具会自动累加1 生成 9001-9006 六个节点 用于操作.
执行如下命令关闭集群
cd /home/redis-5.0.5/utils/create-cluster
./create-cluster stop
使用之前编写的脚本启动
/home/redis-cluster/bin/redis-cluster-start.sh
redis-cli --cluster check 127.0.0.1:9001 # 此命令查看 node id
redis-cli --cluster del-node 127.0.0.1:9004 121566f7bf121584b5e9435ad2b7025835cf7055
接下来删除一个主节点
redis-cli --cluster del-node 127.0.0.1:9003 1cd54f2a84382a2bbcb9c91563b4ba7fe148f972
删除失败了,因为主节点不可以直接删除,必须先将slot槽重新移动到其他主节点那里再进行删除,不然存放的数据就丢失了。
#迁移slot
redis-cli --cluster reshard 127.0.0.1:9003
How many slots do you want to move (from 1 to 16384)? #全部迁出,设置数量值 5461(上图可以查到)
What is the receiving node ID? #迁出到主节点id 235a89e80cc1df2c34332b90909f95bf88409bb3
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:
#这里让填写源数据节点,这里是9003的id 1cd54f2a84382a2bbcb9c91563b4ba7fe148f972
Source node #2: done #输入done表示可以开始生成迁移计划
..........
Do you want to proceed with the proposed reshard plan (yes/no)? yes
#输入yes表示可以开始执行迁移计划
..........
这个时候就可以删除9003这个主节点了
redis-cli --cluster del-node 127.0.0.1:9001 1cd54f2a84382a2bbcb9c91563b4ba7fe148f972
#基本命令
redis-cli --cluster add-node {新节点IP}:{新节点端口} {任意集群节点IP}:{对应端口} #添加为主节点
–cluster-slave --cluster-master-id {对应的主节点ID} # 在上一条命令后面加上此行命令将新节点添加为 对应主节点的从节点
若是添加 从节点则立即可用了,添加的是 主节点的话,还需要 reshard 分配 slots
#选取新添加的主节点id,进行reshard
redis-cli --cluster reshard {新主节点IP}:{新主节点PORT}
#之后按照提示操作即可
尝试一下,新增一个主节点9003
redis-cli --cluster add-node 127.0.0.1:9003 127.0.0.1:9001
新增失败了,原因是之前删除9003节点时会自动停止节点服务,启动一下
redis-server /home/redis-cluster/9003/redis.conf
然后再次执行新增命令
redis-cli --cluster add-node 127.0.0.1:9003 127.0.0.1:9001
还是没成功,这是因为之前删除了9003节点,但是对应的文件没有删除导致的。
cd /home/redis-cluster/9003/data
#删除以上3个文件,同时清空数据库
rm -rf *
redis-cli -h 127.0.0.1 -p 9003
127.0.0.1:9003> flushdb
#重启9003节点
127.0.0.1:9003> shutdown
redis-server /home/redis-cluster/9003/redis.conf
#再次执行新增命令
redis-cli --cluster add-node 127.0.0.1:9003 127.0.0.1:9001
成功
因为是主节点,所以接下来需要分配slot(当添加节点以后,新增的节点不会有任何数据,因为它没分配任何的slot(hash槽),这是拿来存放数据的,Master必须得有才能存放数据。那么我们需要手动为新节点分配slot。)。
这步操作跟之前删除主节点迁移slot类似,故此省略。。。
为9003节点新增一个子节点(9004)
redis-cli --cluster add-node 127.0.0.1:9004 127.0.0.1:9001 --cluster-slave --cluster-master-id 587b912f185a55092c12eb627f560d6f89e02fb8
https://redis.io/topics/cluster-tutorial
https://blog.csdn.net/u014225733/article/details/84548368
https://blog.csdn.net/u014225733/article/details/84553441
https://my.oschina.net/ruoli/blog/2252393
https://blog.csdn.net/weixin_37882382/article/details/83538367
https://blog.csdn.net/Howinfun/article/details/81938161