安装redis所需环境
yum install -y gcc-c++
yum install -y wget
创建文件夹
cd /
mkdir redis/redis-cluster/7001
cd redis/redis-cluster
mkdir 7002 7003 7004 7005 7006 7007 7008
下载redis压缩包并解压安装
wget https://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
# 安装redis
cd redis-stable
make install PREFIX=/redis/redis-cluster/7001
#拷贝配置文件
cp ./redis.conf /redis/redis-cluster/7001
cd /redis/redis-cluster/7001
vi redis.conf
修改配置 将下面几个参数修改
#bind 0.0.0.0 #允许访问的ip
#protected-mode no #保护模式
#port 7001 #运行端口
#daemonize yes #后台启动
#cluster-enabled yes #开启集群
#运行测试
./redis-server redis.conf
#客户端连接进行操作
./redis-cli -h 127.0.0.1 -p 7001
集群搭建三主三从
开始复制配置好的7001文件夹下的文件
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7002
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7003
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7004
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7005
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7006
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7007
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7008
复制完成后修改对应的端口
创建启动脚本进行启动
vi start.sh
内容
cd 7001/bin
./redis-server redis.conf
cd ..
cd ..
cd 7002/bin
./redis-server redis.conf
cd ..
cd ..
cd 7003/bin
./redis-server redis.conf
cd ..
cd ..
cd 7004/bin
./redis-server redis.conf
cd ..
cd ..
cd 7005/bin
./redis-server redis.conf
cd ..
cd ..
cd 7006/bin
./redis-server redis.conf
cd ..
cd ..
授权
chmod u+x start.sh
启动
./start.sh
查看有无启动成功
ps -ef | grep redis
创建redis集群时redis里不要数据
进入到一个redis,bin目录下执行命令
注意ip一定不能用127.0.0.1 不然外部无法重定向访问集群 cluster-replicas后面的1表示一个主机有几个从机 因为现在只有一个因此是1 工作中根据具体从机数
演示:
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
命令客户端连接集群并使用
注意:-c表示以redis集群方式进行连接
./redis-cli -h 127.0.0.1 -p 7001 -c
查看集群状态
cluster info
查看集群中的节点
cluster nodes
添加数据看看
由图可以知道我们存放的key:001根据crc16算法算出值然后对16384取余算出的值恰好落在分配到7001的槽中,所以就存放到7001中。我们去7002进行获取的时候。会重定向到7001中进行获取。
交互流程图
集群扩容
数据迁移
1.新节点加入
2.节点下线
3.负载不均衡需要调整slot分别
添加7007节点作为新节点,并启动
启动7007节点 进入bin目录进行启动
./redis-server redis.conf
申请加入集群
添加节点7007去meet7001申请加入集群
./redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
查看是否加入集群
cluster nodes
已经连接但没有分配hash槽
第一步:对该节点进行hash槽分配,这样该主节点才可以存储数据
./redis-cli --cluster reshard 127.0.0.1:7007
reshard分配hash槽 后面跟上ip和端口 给某个节点分配
第二步:输入要分配槽的数量
第三步:输入接收槽的节点id
根据自己机器上的7007的id进行填写
第四步:输入源节点id输入all完工
第五步:输入yes开始移动槽到目标节点id
第六步:查询节点
cluster nodes
添加7008从节点,将7008作为7007的从节点 首先启动7008
./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave -cluster-master-id 主节点id
./redis-cli --cluster add-node 127.0.0.1:7008 127.0.1.1:7007 --cluster-slave --cluster-master-id 8a91a546a42b897bf72487105aae756c08589fa1
查看集群节点 7007 7008均已上线
集群缩容
缩容命令
./redis-cli --cluster del-node 127.0.0.1:7008 8a91a546a42b897bf72487105aae756c08589fa1
注意:删除已经占有的hash槽的节点会失败,必须先分出去 否则报错如下:
[ERR] Node 127.0.0.1:7008 is not empty! Reshard data away and try again.
开始hash槽重新分配—参考上面hash槽分配步骤
./redis-cli --cluster reshard 127.0.0.1:7008
*** The specified node (8969be5eb5ac8fd1cf5965a2b2f6d431300b0552) is not known or not a master, please retry.
当出现这个错误代表要删除的节点不是master节点重新主节点7007
注意要点:在重新分配槽根据当前节点的槽的数量一致,不然执行不成功
再次删除7007删除成功
如果需要新节点–按照集训扩展章节操作即可。