Redis集群的补充
(1)问题:
- redis提供的服务QPS可以达到10万/秒,当前业务QPS已经达到20万/秒
(QPS等概念:https://www.cnblogs.com/longxiaojiangi/p/9259745.html)
- 内存单机容量达到256G,当前业务需求内存容量1T
2)集群架构
概念:集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
作用:
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展性
- 降低单台服务器宕机带来的业务灾难
(3)Redis集群结构设计
集群结构搭建
(1)搭建的两种方式:
- 原生安装(单条命令)
- 配置服务器(3主3从)
- 建立通信(Meet)
- 分槽(Slot)
- 搭建主从(master-slave)
- 工具安装(批处理)
2)Cluster配置
# 添加节点
cluster-enabled yes|no
# cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file <filename>
#节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
cluster-node-timeout <milliseconds>
# master连接的slave最小数量
cluster-migration-barrier <count>
(3)Cluster节点操作命令
# 查看集群节点信息
cluster nodes
# 进入一个从节点 redis,切换其主节点
cluster replicate <master-id>
# 发现一个新节点,新增主节点
cluster meet ip:port
# 忽略一个没有solt的节点
cluster forget <id>
# 手动故障转移
cluster failover
(4)redis-trib命令(5.0以前命令,现在是用redis-cli)
# 添加节点
redis-trib.rb add-node
# 删除节点
redis-trib.rb del-node
# 重新分片
redis-trib.rb reshard
(5)实验步骤(原生命令的配置)
创建六个redis,三主三从,配置文件如下:
port 6379
# 添加节点
cluster-enabled yes
# cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file nodes-6379.conf
#节点服务响应超时时间,用于判定该节点是否下线或切换为从节点(10000是10秒)
cluster-node-timeout 10000
复制并修改配置文件(sed 命令是利用脚本来处理文本文件)
[[email protected] redis]# sed "s/6379/6380/g" redis-6379.conf >redis-6380.conf
[[email protected] redis]# sed "s/6379/6381/g" redis-6379.conf >redis-6381.conf
[[email protected] redis]# sed "s/6379/6381/g" redis-6379.conf >redis-6381.conf
[[email protected] redis]# sed "s/6379/6382/g" redis-6379.conf >redis-6382.conf
[[email protected] redis]# sed "s/6379/6383/g" redis-6379.conf >redis-6383.conf
[[email protected] redis]# sed "s/6379/6384/g" redis-6379.conf >redis-6384.conf
分别启动
[[email protected] redis]# redis-server /etc/redis/redis-6379.conf
…
查看启动情况
添加节点(命令后面的1,代表一主一从,如果你要一主二从,设置为2)
[[email protected] redis]# redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
连接集群存取数据
redis-cli -c -p 6379
4. 主从下线和主从切换
(1)从服务器下线,不影响
(2)主服务器下线,从服务器顶替
(3)如果原主服务器重新上线,就变从服务器了
5. 常见问题及解决办法
(1)问题一:[ERR] Node 192.168.83.128.6379 is not empty.Either the node already knows other nodes(check with CLUSTER NODES) or contains some key in database 0.
需要停止redis服务,将这个服务器中redis的备份,nodes-6379.conf删除,再重新启动redis服务器,及部署集群