经过上两篇博客的学习大伙已经初步了解了mnesia的创建和库内表的创建,已经各种对表的操作。
接下来我们就要了解一下mnesia数据库和其他关系型数据区别最大的特性,就是它的分布式特性。首先需要介绍的是mneisa分布式架构的拓扑图:
通过上图我们可以了解到,先由一个以上的erlang节点组成一个相互之间的对等的master集群,这个master集群中的任何一台master节点宕机的话,都不会影响master集群对外发布的数据服务。master集群中的表需要设置为disc_copies类型的数据表,那么宕机之后恢复节点并且重启之后并不会丢失数据,而且会自动同步在宕机这段时间中其他master节点上的增量数据。
在master节点之外,可以启动若干个mnesia的slaver节点,在slaver节点上存放的数据是master节点内存副本,所以一旦slaver节点宕机之后,重启slaver节点会发现数据库中的表已经全部丢失,需要重新连接到master节点上把master节点上的数据同步到本地的内存中来。
现在就来详细介绍一下如何构建这个分布式mnesia数据库集群。
首先需要构建一个全联通的erlang节点网络,这个没有什么难度通过epmd框架,在节点启动的时候在命令行上设置节点名称,命令是, erl -name mst -setcookie xxxxxx -mnesia dir ‘“/tmp/mnesia_store”’,设置不同的name启动若干个erlang节点,需要保证每个节点使用相同的cookie值,否者节点之间无法联通了。
通过以下步骤创建master节点:
1. 启动集群中准备用来作为master角色的节点启动,
2. 通过net_adm:ping('mst1@node1'). 这样的命令打通所有节点,
3. 使用nodes().函数确认所有节点是否已经联通
4. 调用mnesia:create_schema([nodes()]). 注意,这里参数是用的nodes()函数,他会取得集群中所有节点,通过这个函数在所有master节点上创建了一份schema文件,在各个节点上执行 ls /tmp/mnesia_store命令可以在文件夹中看到已经创建的schema文件。
5. 启动mneisa数据库,调用mnesia:start() 启动数据库,执行mneisa:info() 查看mneisa数据库的状态,如下:
从上图我们可以了解到,本地d:/tmp/mnesia 保存数据的目录已经启用,并且数据库的两个副本:'baisui@aliyun-18097n.taobao.ali.com','mynode@aliyun-18097n.taobao.ali.com'已经启动,另外还有两个副本节点(stopped db nodes)尚未启动。在所有master节点上重复执行mnesia:info() 命令显示的结果应该是一样的。
至此,所有所有master节点已经启动完毕。
通过以下步骤创建slaver节点:
通过
相关推荐
备忘录:Mnesia分布式数据库的简单+强大接口
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时 特性的Erlang应用。
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台——开放式电信平台(OTP)的一部分。
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...
4.4 4.5 5.1 5.2 5.3 5.4 5.5 5.6 Mnesia 数据库 调试第五部分:程序库 Guardian(基础) Poolboy Benchee Bypass Distillery(基础) StreamData 3 Introduction 绪⾔第⼀部分:基础 基础集合Enum 模块 模式匹配 控制...
数据库文件系统 Elixir中基于分布式区块链的文件存储 :satellite_antenna: DBFS是一项在Elixir中使用区块链实现(非常幼稚)分布式文件存储服务的实验。 随着人们对区块链和加密货币的兴趣日益浓厚,我想了解区块链...
“即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。..., • 使用内置的Mnesia数据库和其他表存储功能。, 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。
它提供了基本功能,例如进程管理,用于请求处理的虚拟节点环,会话,帧编码,mq和缓存服务。核心功能目的:高性能协议中继端点:WebSocket,MQTT,TCP 代码库:700 LOC(Erlang),500 LOC(JavaScript) 透析仪:...
openpoker, 德克萨斯成立hold游戏服务器 这个项目是基于 wagerlabs/OpenPoker插件,但是我修改了几乎所有代码:除了分布式,我不关心这个。...删除数据库脏操作并使用mnesia事务。反射所有德克萨斯
分布式:去掉了依赖 mnesia 集群的代码,来支持更大的集群,以及防止由于网络分区导致的集群状态不一致。 消息处理:通过ejabberd和kafka相连接,实现了消息的路由和订阅发布,可以对消息添加更丰富的处理逻辑。 ...