redis 集群

环境信息

centos7
redis5

安装redis

wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -zxvf redis-5.0.3.tar.gz
cd redis-5.0.3 
yum install gcc
make MALLOC=libc
# 安装到 /usr/local/redis 目录中 安装的文件只有一个bin目录
make install PREFIX=/usr/local/redis/ 
# 创建配置文件和data存放目录
mkdir /usr/local/redis/conf /usr/local/redis/data

修改配置文件

首先我们需要准备六台服务器,搭建三个一主一从结构,也就是四个redis服务,由于没有六台服务器,我们修改端口号,端口号分别为:6379,6380,6381,6382,6383,6384
并在每个配置文件中加入:

#端口号
port 6379
#后台启动的意思
daemonize yes 
# redis数据文件存放的目录
dir /usr/local/redis/data
bind 0.0.0.0
# 开启集群
cluster-enabled yes
# 会自动生成在上面配置的dir目录下
cluster-config-file nodes-6379.conf
cluster-node-timeout 5000 
# 这个文件会自动生成
pidfile /usr/local/redis/conf/redis_6379.pid 

启动6个Redis实例

/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis1.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis2.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis3.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis4.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis5.conf

创建cluster

/usr/local/redis/bin/redis-cli --cluster create 192.168.130.128:6379 192.168.130.128:6380 192.168.130.128:6381 192.168.130.128:6382 192.168.130.128:6383 192.168.130.128:6384 --cluster-replicas 1

自动设置主从,而且会提示你,是否运行使用自动的配置
Can I set the above configuration? (type ‘yes’ to accept): yes

集群检验和测试

检查集群,查看所有节点信息

/usr/local/redis/bin/redis-cli -c -h 192.168.130.128 -p 6379 cluster nodes

执行后结果:

[root@localhost conf]# /usr/local/redis/bin/redis-cli -c -h 192.168.130.128 -p 6379 cluster nodes
ee091364b2511c96f823d9ea6436ef56ee2c5537 192.168.130.128:6381@16381 master - 0 1601644106810 3 connected 10923-16383
29cb50aa256bddb9d4abc7c7453c8d76552b2636 192.168.130.128:6379@16379 myself,master - 0 1601644107000 1 connected 0-5460
d09929dd6be03ecfcb36e5ba33b98feaaed32de9 192.168.130.128:6382@16382 slave ee091364b2511c96f823d9ea6436ef56ee2c5537 0 1601644108523 4 connected
a2b4a1d58296c6859e262146491a8680ff8217b0 192.168.130.128:6383@16383 slave 29cb50aa256bddb9d4abc7c7453c8d76552b2636 0 1601644108523 5 connected
4679a80039b5e60cf3207bd6405fbb9e9e762e20 192.168.130.128:6380@16380 master - 0 1601644108000 2 connected 5461-10922
648b66b11474bd94a61203743471f83c7404e386 192.168.130.128:6384@16384 slave 4679a80039b5e60cf3207bd6405fbb9e9e762e20 0 1601644107817 6 connected

节点id ip+端口 角色 masterid 处理的ping数量 最后一个pong时间 节点配置版本 节点连接状态 slot槽分配情况

进入redis:
-c 是支持cluster重定向

/usr/local/redis/bin/redis-cli -c -h 192.168.130.128 -p 6381
#当存入的key不属于当前节点时自动重定向
192.168.130.128:6381> set test1 a
-> Redirected to slot [4768] located at 192.168.130.128:6379
OK
# 查看一个key属于哪一个节点
192.168.130.128:6379> CLUSTER KEYSLOT key
(integer) 12539
192.168.130.128:6379> CLUSTER KEYSLOT test1
(integer) 4768
192.168.130.128:6379> get test1
"a"
192.168.130.128:6379>

集群slot数量整理 reshard

redis-cli --cluster reshard  <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes

我们将6381中的一千个slot移至6379中
由前面输出的节点信息我们知道:
6379ID:29cb50aa256bddb9d4abc7c7453c8d76552b2636
6381ID: ee091364b2511c96f823d9ea6436ef56ee2c5537
即执行此命令:

/usr/local/redis/bin/redis-cli --cluster reshard  192.168.130.128:6379 --cluster-from ee091364b2511c96f823d9ea6436ef56ee2c5537 --cluster-to 29cb50aa256bddb9d4abc7c7453c8d76552b2636 --cluster-slots 1000 --cluster-yes

重新检查集群

/usr/local/redis/bin/redis-cli --cluster check 192.168.130.128:6382

可以看到移动成功
在这里插入图片描述

扩容

加入到已经存在的集群作为master

/usr/local/redis/bin/redis-cli --cluster add-node 192.168.130.128:6385 192.168.130.128:6379

新节点没有分配hash槽,需要手动分配

加入到已经存在的集群作为slave

redis-cli --cluster add-node 192.168.130.128:6383 192.168.130.128:6379 --cluster-slave

手工指定master,否则就是选择一个slave数量较少的master

redis-cli --cluster add-node 192.168.130.128:6383 192.168.130.128:6379 --cluster-slave --cluster-master-id <node-id>

缩容(删除节点)

# 注意:删除master的时候要把数据清空或者分配给其他主节点
/usr/local/redis/bin/redis-cli --cluster del-node 192.168.100.242:6381 <node-id>

故障转移

redis中的当一个主节点宕机时,其从节点会默认成为主节点,继续提供服务。
我们也可以手动故障转移

# 可能某个节点需要维护(机器下线、硬件升级、系统版本调整等等场景),需要手动的实现转移
# 在slave节点上执行命令
CLUSTER FAILOVER 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值