最近在了解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集群由两个层面组成:
汇聚器和叶子节点共享同一套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查询实现的而非特殊的接口。
原文:http://www.cnblogs.com/caozhangni/p/5049357.html