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

          

 通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值