`
mozhenghua
  • 浏览: 319505 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

分布式数据库mnesia管理

 
阅读更多

      经过上两篇博客的学习大伙已经初步了解了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节点:

          

 通过

  • 大小: 31.6 KB
  • 大小: 58.5 KB
  • 大小: 108 KB
分享到:
评论

相关推荐

    备忘录:Mnesia分布式数据库的简单+强大接口

    备忘录:Mnesia分布式数据库的简单+强大接口

    Mnesia用户手册.zip

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时 特性的Erlang应用。

    erlang mnesia 数据库基本查询

    Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...

    Mnesia用户手册

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台——开放式电信平台(OTP)的一部分。

    Mnesia用户手册 4.4.10版.rar

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...

    Elixir程序设计语言.pdf

    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 模块 模式匹配 控制...

    dbfs:基于分布式区块链的文件存储:satellite_antenna:

    数据库文件系统 Elixir中基于分布式区块链的文件存储 :satellite_antenna: DBFS是一项在Elixir中使用区块链实现(非常幼稚)分布式文件存储服务的实验。 随着人们对区块链和加密货币的兴趣日益浓厚,我想了解区块链...

    Erlang编程指南

    “即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。..., • 使用内置的Mnesia数据库和其他表存储功能。, 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。

    n2o::hollow_red_circle:N2O:分布式应用程序服务器

    它提供了基本功能,例如进程管理,用于请求处理的虚拟节点环,会话,帧编码,mq和缓存服务。核心功能目的:高性能协议中继端点:WebSocket,MQTT,TCP 代码库:700 LOC(Erlang),500 LOC(JavaScript) 透析仪:...

    openpoker, 德克萨斯成立hold游戏服务器.zip

    openpoker, 德克萨斯成立hold游戏服务器 这个项目是基于 wagerlabs/OpenPoker插件,但是我修改了几乎所有代码:除了分布式,我不关心这个。...删除数据库脏操作并使用mnesia事务。反射所有德克萨斯

    xmljava系统源码-ejabberd:即时通讯的后端服务器。它是从ejabberd开发和定制的

    分布式:去掉了依赖 mnesia 集群的代码,来支持更大的集群,以及防止由于网络分区导致的集群状态不一致。 消息处理:通过ejabberd和kafka相连接,实现了消息的路由和订阅发布,可以对消息添加更丰富的处理逻辑。 ...

Global site tag (gtag.js) - Google Analytics