86 redis集群分片之3主集群搭建
3主3从redis集群配置
找3台真实虚拟机,各自新建
mķdir -p /myredis/cluster
新建6个独立的redis实例服务
IP:192.168.111.175+端口6381/端口6382
vim /myredis/cluster/redisCluster6381.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6381
logfile "/myredis/cluster/cluster6381.log'
pidfile /myredis/cluster6381.pid
dir /myredis/cluster
dbfilename dump6381.rdb
appendonly yes
appendfilename "appendonly6381.aof"
requirepass 111111
masterauth 111111cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000
cluster-enabled yes //打开集群
cluster-config-file nodes-6381.conf //声明集群配置文件
cluster-node-timeout 5000 //集群之间的超时时间5s
vim /myredis/cluster/redisCluster6382.conf
IP:192.168.111.172+端口6383/端口6384
IP:192.168.111.174+端口6385/端口6386
三主三从:
通过redis-cli命令为6台机器构建集群关系
启动6台redis机器实例
后面有[cluster]告诉你这是以集群方式启动的
构建主从的关系命令
--cluster create以集群形式创建
-- cluster-replicas 1 表示为每个master创建一个slave节点
集群联通成功后会产生nodes-6381.conf和nodes-6382.conf
链接进入6381作为切入点,查看并检验集群状态
info replication 查看主从状态
cluster nodes 查看集群节点之间的关系
cluster info 展示关于节点、集群健康状态、槽位、配置等的摘要信息。
88 redis集群分片之3主3从集群读写
当前连接6381 发现没有k1但有k2。set k1告诉你应该在6385
但在6385中可以set k1但却不能set k2,告诉你k2在6381
为什么报错?
如何解决
防止路由失效加参数-c并新增两个key
重新连接,记得加-c,-c的含义:开启客户端的 自动重定向支持(cluster support / follow MOVED/ASK redirects)
此时在6381连接的redis中set k1 v1会重定向到6385连接的redis
如何查看某个key属于哪个槽位
CLUSTER KEYSLOT k1
根据分片,12706应该落在6385上
89 redis集群分片之主从容错切换
主从容错切换迁移案例
容错切换迁移
- 主6381和从机切换,先停止主机6381
-
6381主机停了,对应的真实从机6384会不会上位? 会! 目前是3主2从
-
- 再次查看集群信息
- 6384变为主机且能够正常使用
- 随后,6381原来的主机回来了,是否会上位?
- 不会,并且以从节点形式回归
集群不保证数据一致性,一定会有数据丢失情况
Redis集群不保证强一致性,这意味着在特定的条件下,Redis集群可能会丢掉一些被系统收到的写入请求命令
手动故障转移or节点从属调整该如何处理
上面一换后6381、6384主从对调了,和原始设计图不一样了,该如何调换回去?
重新登陆6381机器
常用命令 CLUSTER FAILOVER
此时6381重新变为主机,6384变为6381的从机