MemSQL分布式架构介绍(一)
最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/
分布式架构
MemSQL的分布式架构被设计为直接的、简单的并且快速的。这里概述了MemSQL集群,包括各式组件的交互。同时介绍了当你执行一个查询或者管理操作的时候,MemSQL环境发生了什么。
几个概念:
1、Aggregators(汇聚器) MemSQL集群的一种节点,为访问MemSQL集群的网关,一个集群中可以有多个汇聚器,汇聚器主要负责向叶子节点发送DML请求、汇聚操作结果并返回给客户端
2、Master Aggregator(主汇聚器) 是一种特殊的汇聚器,除了一般汇聚器的功能,还负责监控集群、失效切换及DDL语句的操作。每一个MemSQL的集群只能有一个主汇聚器。当主汇聚器失效时,MemSQL的集群和DDL语句操作将被挂起,而一般的DML语句仍可以通过其他的汇聚器进行操作。如果主汇聚器的程序文件没有丢失,那么只要重启一下主汇聚器即可,主汇聚器将会自动重连。否则的话,可以在一个子汇聚器上执行命令来将子汇聚器提升为主汇聚器。
3、Leaf Node(叶子节点) 在MemSQL集群中,叶子节点的作用是存储和计算。负责在集群中存储数据的切片。为了优化性能,MemSQL会围绕叶子节点自动分布数据到分区。每一个叶子节点由若干个分区组成。每一个分区其实就是一个database。
4、Partitions(分区) 一个叶子节点由多个分区组成。每一个分区其实就是一个database。比如说,如有你创建了一个database名为test,那么当你在一个叶子节点执行SHOW DATABASES 时,会看到数据库名为类似test_5,表明这是分区5。通过SHOW DATABASES EXTENDED命令输出的State列,可以查看分区是Master或者slave分区或者正处于其他状态的分区。Master分区是数据库真正执行操作的分区,而slave分区则是通过网络和sql操作将Master上的数据复制到slave上。另外,slave分区是只读的。
设计原则
MemSQL分布式系统的设计遵循如下的原则:
- 性能优先 MemSQL是世界上最快的single-box数据库,分布式部署在多台服务器上时更是能让性能有线性的提升。MemSQL集群能够处理每秒数十亿行数据,而硬件只需要普通的商用硬件即可。
- 将集群分为汇聚层和叶子层同时尽可能多的将工作交由叶子层处理 这允许你在线增加额外的叶子节点到集群来提升集群容量和查询性能
- 无单点失败风险 通过运行冗余的集群,可以确保每一个数据分区都有一个热备份。当叶子节点失效时,MemSQL将自动切换到salve分区。汇聚层同样也有类似的技术来规避单节点风险。
- 强大但又简单的集群管理 分布式系统提供了REBALANCE PARTITIONS功能来恢复分区数据
- 没有隐式的数据移动
集群组件
一个MemSQL集群由两个层面组成:
- 汇聚器 汇聚器处理分布式系统的元数据,路由查询并汇聚结果。依赖于查询量,一个集群可能有一个或者多个汇聚器。主汇聚器是一个特殊的汇聚器,只处理元数据并负责集群的监控和失效切换
- 叶子节点 叶子节点存储和执行sql查询。一个叶子节点是一个由多个分区组成的MemSQL服务实例。
汇聚器和叶子节点共享同一套MemSQL的二进制程序文件,因此你在集群中部署时可以完全相同。默认的话MemSQL只会作为叶子节点来运行。要运行MemSQL作为一个汇聚器,需要使用./memsqld --master-aggregator来指定主汇聚器。
MemSQL集群最小安装只需要一个主汇聚器和一个叶子几点即可。你可以添加更多的汇聚器,这些汇聚器会从主汇聚器读取元素据,也能够在叶子节点运行DML命令
已部署的汇聚器和叶子节点的数量决定了集群的存储容量和性能。典型的部署结构中,叶子节点和汇聚器的比例为5:1。在一个设计良好的集群中:
- 当集群需要比较高的连接能力的时候,汇聚器比叶子节点的比率要较高
- 当集群需要比较大的存储容量时,叶子节点比汇聚器的比率要比较高
你能够列出所有的汇聚器和叶子节点通过使用SHOW AGGREGATORS 和 SHOW LEAVES命令
memsql> SHOW AGGREGATORS;
+---------------+-------+--------+--------------------+---------------------------+-------------------+
| Host | Port | State | Opened_Connections | Average_Roundtrip_Latency | Master_Aggregator |
+---------------+-------+--------+--------------------+---------------------------+-------------------+
| 127.0.0.1 | 3306 | online | 0 | NULL | 1 |
| 192.168.1.116 | 3306 | online | 1 | 0.200 | 0 |
+---------------+-------+--------+--------------------+---------------------------+-------------------+
2 rows in set (0.00 sec) memsql> SHOW LEAVES;
+---------------+-------+--------------------+---------------+-----------+--------+--------------------+---------------------------+
| Host | Port | Availability_Group | Pair_Host | Pair_Port | State | Opened_Connections | Average_Roundtrip_Latency |
+---------------+-------+--------------------+---------------+-----------+--------+--------------------+---------------------------+
| 192.168.1.110 | 3306 | 1 | 192.168.1.112 | 3306 | online | 5 | 0.299 |
| 192.168.1.111 | 3306 | 1 | 192.168.1.113 | 3306 | online | 5 | 0.293 |
| 192.168.1.112 | 3306 | 2 | 192.168.1.110 | 3306 | online | 1 | 0.271 |
| 192.168.1.113 | 3306 | 2 | 192.168.1.111 | 3306 | online | 1 | 0.264 |
+---------------+-------+--------------------+---------------+-----------+--------+--------------------+---------------------------+
集群通信
除了复制时的数据传输,所有MemSQL节点间的通信都是通过SQL命令实现的。比如说,集群心跳是通过select 1查询实现的而非特殊的接口。
后续内容将在MemSQL分布式架构介绍(二)中继续记录
MemSQL分布式架构介绍(一)的更多相关文章
- MemSQL分布式架构介绍(二)
接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...
- MySQL之九---分布式架构(Mycat/DBLE)
MyCAT基础架构图 双主双从结构 MyCAT基础架构准备 准备环境 环境准备: 两台虚拟机 db01 db02 每台创建四个mysql实例:3307 3308 3309 3310 删除历史环境 p ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...
- Windows平台分布式架构实践 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- Java分布式应用技术架构介绍
分布式架构的演进 系统架构演化历程-初始阶段架构
- 大型网站技术架构介绍--squid
一.大型网站技术架构介绍 1.pv高 ip高 并发量 2.大型网站架构重点 1. 高性能:响应时间,TPS,系统性能计数器.缓存,消息队列等. 高可用性High Availabilit ...
- 基于Storm 分布式BP神经网络,将神经网络做成实时分布式架构
将神经网络做成实时分布式架构: Storm 分布式BP神经网络: http://bbs.csdn.net/topics/390717623 流式大数据处理的三种框架:Storm,Spark和Sa ...
- [原创].NET 分布式架构开发实战五 Framework改进篇
原文:[原创].NET 分布式架构开发实战五 Framework改进篇 .NET 分布式架构开发实战五 Framework改进篇 前言:本来打算这篇文章来写DAL的重构的,现在计划有点改变.之前的文章 ...
随机推荐
- 使用HttpDownLoadHelper下载文件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...
- SpringMVC框架介绍
1. SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何接口. 2.支持REST风格的URL请求. 3.采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵 ...
- 高性能的分布式服务框架 Dubbo
我思故我在,提问启迪思考! 1. 什么是Dubbo? 官网:http://dubbo.io/,DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的 ...
- 低信噪比的HTML5优化
百度搜索引擎建议是我们的HTML文件最好不要超过128KB,其实现在对于那些大文件搜索引擎也是很容易就抓取到的,只不过我们是尽量在可能的情况下把我们的网页代码越精简越好,我们要知道搜索引擎抓取网页的时 ...
- Python遍历文件夹
许多次需要用python来遍历目录下文件, 这一次就整理了记录在这里. 随实际工作,不定期更新. import os class FileTraversal: def __init__(self, r ...
- python 颜色定义
1.颜色定义说明格式:\033[显示方式;前景色;背景色m前景色 背景色 颜色---------------------------------------30 40 黑色31 41 红色32 42 ...
- easyui datagrid 点击表头的事件
在用datagrid的时候我们可能要用到点击表头来触发一个function,这里有个简单的例子. 首先你得有个能用的datagrid. <div> <table id=&quo ...
- Bootstrap左侧下拉三级菜单
在线实例 效果一 效果二 效果三 使用方法 <script src="/api/jq/BootstrapCaidan/js/metismenu.js"></scr ...
- Ionic – 强大的 HTML5 Mobile App 开发框架
Ionic 是一个强大的 HTML5 应用程序开发框架,可以帮助您使用 Web 技术,比如 HTML.CSS 和 Javascript 构建接近原生体验的移动应用程序.Ionic 主要关注外观和体验, ...
- 小谈React、React Native、React Web
React有三个东西,React JS 前端Web框架,React Native 移动终端Hybrid框架,React Web是一个源码转换工具(React Native 转 Web,并之所以特别提出 ...