C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 数据库原理

    • 数据库原理 - MySQL概述
    • 数据库原理 - 数据库是如何工作的
  • SQL语言

    • SQL语言 - 知识体系结构
    • SQL语言 - 语法
    • SQL语言 - 约束
    • SQL语言 - 函数
    • SQL语言 - 连接查询
    • SQL语言 - 多表查询
    • SQL语言 - 子查询
    • SQL语言 - 使用技巧
  • SQL - MySQL

    • MySQL基础

      • ♥MySQL语言知识体系详解♥
      • MySQL基础 - 基本概念
      • MySQL基础 - 三范式
      • MySQL基础 - 数据类型
      • MySQL基础 - 视图
      • MySQL基础 - 存储过程
    • MySQL进阶

      • MySQL进阶 - 存储引擎
      • MySQL进阶 - InnoDB引擎
      • MySQL进阶 - 索引基础
      • MySQL进阶 - 聚簇索引和非聚簇索引
      • MySQL进阶 - 索引使用
      • MySQL进阶 - SQL性能分析
      • MySQL进阶 - SQL性能优化
      • MySQL进阶 - 锁
      • MySQL进阶 - 触发器
      • MySQL进阶 - 事务
      • MySQL进阶 - 管理工具
    • MySQL运维

      • MySQL运维 - 主从复制
      • MySQL运维 - 分库分表
      • MySQL运维 - 读写分离
      • MySQL进阶 - 日志分析
    • MySQL实战

      • MySQL实战 - 一条 SQL 的执行过程详解
      • MySQL实战 - SQL是如何解析的
      • MySQL实战 - MyCat使用
  • NoSQL - Redis

    • Redis基础 - 简介
    • Redis基础 - 命令
    • Redis进阶 - 持久化
    • Redis进阶 - 事务
    • Redis进阶 - 删除策略
    • Redis进阶 - 主从复制
    • Redis进阶 - 哨兵模式
    • Redis应用 - 集群概念以及应用
    • Redis应用 - 企业级解决方案
  • NoSQL - ElasticSearch

    • ElasticSearch集群 - 概念
    • ElasticSearch集群 - 安装
    • ElasticSearch集群 - 部署
    • ElasticSearch数据 - 分析与处理
    • ElasticSearch数据 - 搜索
    • ElasticSearch数据 - 存储
    • ElasticSearch应用 - ES与MySQL数据同步

Redis应用 - 集群概念以及应用

  • 简介
  • Redis集群结构设计
    • 数据存储设计
    • 集群内部通讯设计
    • Cluster集群结构搭建

简介

业务发展过程中遇到的峰值瓶颈:

  • redis服务器可以提供的服务OPS(Operation Per Second.每秒操作次数)已经可以达到10万/秒,但是仍然无法满足业务的高并发操作应该如何解决?
  • 单机的内存不可能持续扩展,即使扩大到1T,仍然无法满足业务想内存存储需求怎么办?
  • ....

集群

针对上述问题,redis衍生出 的概念,**集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果。**利用集群的方式进行管理,能够有效解决上述问题。集群示意图:

集群

集群作用:

  • 分散单台服务器的访问压力,实现负载均衡
  • 分散单台服务器的存储压力,实现可扩展性
  • 降低单台服务器宕机带来的业务灾难

集群作用

集群的数据交互:

集群作用

Redis集群结构设计

数据存储设计

数据存储设计

当加入新的节点时,可以根据算法将其他值均匀地挪动到新的节点上。

存储之槽

集群内部通讯设计

各个数据库相互通讯,保存各个库中槽的编号数据。如果客户端向A发起请求,根据key计算得到其保存的位置,例如15。然后根据A中记录的槽的编号数据,找到对应存储内容在B中。

即数据命中仅存在以下两种情况:

  1. 一次命中,直接返回

  2. 一次未命中,告知具体位置

集群内部通讯设计

Cluster集群结构搭建

原生安装(单条命令)

  • 配置服务器(3主3从)
  • 建立通信(Meet)
  • 分槽(Slot)
  • 搭建主从(master-slave)
1.首先安装ruby
[root@192 src]#yum install ruby
[root@192 src]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@192 src]# gem -v
2.0.14.1

2.打开六个窗口分别启动服务器
cd /home/believe123/myproject/redis/cluster/

redis-server ./redis-6379.conf
redis-server ./redis-6380.conf
redis-server ./redis-6381.conf
redis-server ./redis-6382.conf
redis-server ./redis-6383.conf
redis-server ./redis-6384.conf

3.创建集群
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

创建集群后返回信息如下,最后还需确认直接输入yes即可。

创建集群

如果直接连接到6379客户端,执行set name操作,提示重定向到6380,要用redis-cli -c才可以,-c表示集群。

[root@192 ~]# redis-cli
127.0.0.1:6379> set name jason
(error) MOVED 5798 127.0.0.1:6380
127.0.0.1:6379>
[root@192 ~]# redis-cli  -c
127.0.0.1:6379> set name jason
-> Redirected to slot [5798] located at 127.0.0.1:6380
OK
127.0.0.1:6380> get name
"jason"
127.0.0.1:6380>


127.0.0.1:6381> get name
-> Redirected to slot [5798] located at 127.0.0.1:6380
"jason"
127.0.0.1:6380>
Last Updated:
Contributors: klc407073648
Prev
Redis进阶 - 哨兵模式
Next
Redis应用 - 企业级解决方案