介绍基本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| redis 集群
主从模式 缺点 从数据库可能会丢失部分数据,操作模式 使用DNS负载均衡,需要人工介入
哨兵模式 自动化,sentinel工具。配置复杂,性能和高可用表现一般。 client应该连接哨兵sentinel节点,从哨兵那拿到 主从节点。 缺陷:1.单点写的节点故障,2. 数据恢复非常慢, 3.写性能瓶颈(10w并发) 主观故障:有一半节点认为主节点下线,哨兵启动巡警模式,处理,把主节点下线,从节点选出一个作为主节点 。从新的主节点复制数据。 客观故障:
集群模式: 一个主节点+2个副本节点为一个集群, 可以有多个集群。 且master节点提供对外节点。 16384虚拟节点,平均给每个集群,每个节点负责部分范围的hash slot。 Client: 从 16384 % hashkey 的余数 落在那个集群上。理论上集群最大为 16384个,一般是1000个。 当一个集群master挂了,就从副本选一个数据全的作为master。 访问瞬断损失最小
|
实战,by docker
下载 redis-default.conf redis.conf
默认 port 6379
1 2 3 4 5
| #redis.conf wget -O redis.conf /usr/uploads/2022/09/3831797556.conf
#redis-default.conf wget -O redis.conf /usr/uploads/2022/09/1047504143.conf
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| redis.conf 修改 daemonize yes #进程守护运行 port 端口 protected-mode no #关闭保护模式 bind 127.0.0.1 #改成0.0.0.0 dir /usr/local/rediscluster/node1 #存放路径 #集群参数 cluster-enabled yes cluster-config-file nodes1.conf #redis自动维护的,建议改成节点名 cluster-node-timeout 5000 #集群内网超时 appendonly yes #数据同步 requirepass xxx ##主从复制的时候密码 masterauth xxx #副本连接Master密码
docker run -v `pwd`/redis.conf:/redis.conf -p 6379:6379 --name redis_cluster1 redis /redis.conf
docker run -v `pwd`/redis.conf:/redis.conf -p 6379:6379 --name redis_cluster2 redis /redis.conf
docker run -v `pwd`/redis.conf:/redis.conf -p 6379:6379 --name redis_cluster3 redis /redis.conf
|
创建集群,redis版本 >=5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| redis-cli --cluster #--cluster-relicas 1 副本个数 # -a 密码登录 redis-cli --cluster create ip:port ip:port ip:port --cluster-relicas 1 -a 密码
## 连接测试
redis-cli -a 密码 -h IP地址 -p 端口
## 智能客户端 redis-cli -a 密码 -c -h IP地址 -p 端口 ## 计算哈希槽 cluster keyslot a 展示slot 应该在那个槽
## cluster info 集群信息
|
流量倾斜, 比如热点关键词
big key
常见问题
1.为什么Waiting for the cluster to join 一直卡在这里
1 2
| https://www.cnblogs.com/luck-pig/p/12311320.html
|
2.At least 6 nodes are required.
1 2 3
| redis集群必须至少3个master , --cluster-replicas 为1 的时候 一个master配1个s 副本,
所以最少要6个redis
|
3.WRONGPASS invalid username-password pair
实战Docker集群
访问链接