分布式数据库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节点:

          

 通过

Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia 数据库管理系统( DBMS ) . . .. . . .. . 4 2 、开始 Mnesia . . .. . .. . . .. . 7 2.1 首次启动 Mnesia . . .. . .. . .. . 7 2.2 一个示例 . . .. . . . .. . 8 3 、构建 Mnesia 数据库 . . .. . .. . 22 3.1 定义模式 . . .. . .. . .. . 22 3.2 数据模型 . . .. . .. . .. . 23 3.3 启动 Mnesia . . . 23 3.4 创建新表 . . .. . .. . .. . 26 4 、事务和其他上下文存取 . . .. . .. . .. . 29 4.1 事务属性 . . .. . .. . .. . 29 4.2 锁 . . .. . .. . .. . 30 4.3 脏操作 . . .. . . .. . 33 4.4 记录名与表 . . .. . .. . . .. . 34 4.5 作业( Activity )概念和多种存取上下文 . . .. . .. . 37 4.6 嵌套事务 . . .. . .. . .. . 38 4.7 模式匹配 . . .. . .. . .. . 39 4.8 迭代 . . .. . . .. . 41 5 、其它 Mnesia 特性 . . .. . .. . .. . 45 5.1 索引 . . .. . . .. . 45 5.2 分布和容错 . . .. . .. . . .. . 45 5.3 表分片 . . .. . . . .. . 46 5.4 本地内容表 . . .. . .. . . .. . 53 5.5 无盘节点 . . .. . .. . .. . 54 5.6 更多的模式管理 . . .. . .. . .. . 55 5.7 Mnesia 事件处理 . . . . .. . 55 5.8 调试 Mnesia 应用 . . .. . . 57 5.9 Mnesia 里的并发进程 . . .. . . . .. . 58 5.10 原型 . . .. . . .. . 58 5.11 Mnesia 基于对象的编程 . . .. . .. . .. . . 61 6 Mnesia 系统信息 . . .. . .. . . .. . 64 6.1 数据库配置数据 . . .. . .. . .. . 64 6.2 内核转储 (Core Dumps ). . .. . .. . .. . 64 6.3 转储表 . . .. . . . .. . 64 3 6.4 检查点 . . .. . . . .. . 64 6.5 文件 . . .. . . .. . 65 6.6 在启动时加载表 . . .. . .. . .. . 67 6.7 从通信失败中恢复 . . .. . .. . . .. . 68 6.8 事务的恢复 . . .. . .. . . .. . 68 6.9 备份、回滚以及灾难恢复 . . .. . .. . . .. . 69 7 Mnsia 与 SNMP 的结合 . . .. . .. . 74 7.1 结合 Mnesia 与 SNMP . . .. . . . .. . 74 8 附录 A : Mnesia 错误信息 . . .. . . 75 8.1 Mnesia 中的错误 . . . . .. . 75 9 附录 B :备份回调函数接口 . . .. . .. . . .. . 76 9.1 Mnesia 备份回调行为 . . .. . . . .. . 76 10 附录 C :作业存取回调接口 . . .. . . .. . 83 10.1 Mnnesia 存取回调行为 . . . . .. . 83 11 附录 D :分片表哈希回调接口 . . . .. . 92 11.1 mnesia_frag_hash 回调行为 . . .. . . .. . . 92
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值