Jno*_*Jno 2 postgresql ejabberd
我想知道是否可以使用Postgres数据库设置ejabberd集群?(我发现只有mnesia DB的ejbberd集群文档)
我正在运行这个配置:ejabberd 2.1.2(ubuntu包)Postgres 8.4
Sha*_*ger 18
ejabberd就像任何其他erlang应用程序一样.为了理解如何集群ejabberd,您需要一些erlang集群基础知识.您之前只找到使用mnesia设置群集的文档的原因是因为即使配置了一些与postgres一起使用的模块,您仍然在使用mnesia进行大量的ejabberd.
Mnesia用于存储核心会话和路由信息.此信息必须以本机erlang数据格式在群集中的任何位置可用,因此使用mnesia.Mnesia还维护有关模式表中其他mnesia节点的信息,该节点允许节点记住其他集群成员在启动时的身份.
当您形成ejabberd群集时,您仍然必须按照以下步骤形成mnesia群集关系.我假设你已经计算出你的erlang cookie,以便net_adm:ping('ejabberd @ node1')可以从你的ejabberd @ node2节点运行,并且你在两个节点上都有相同的ejabberd.cfg.
/etc/init.d/ejabberctl live 以"实时"模式启动新节点.application:stop(ejabberd). 停止ejabberd应用程序.mnesia:stop(). 停止mnesia应用程序.mnesia:delete_schema([node()]).删除本地节点上的架构.这使节点进入干净状态,准备加入基于mnesia的集群.mnesia:start().启动空且干净的mnesia实例.Mnesia现在处于一种状态,当您要求他们加入下一步时,它可以接受您的第一个ejabberd节点提供的任何表信息.mnesia:change_config(extra_db_nodes,['ejabberd@node1']). 告诉您的新ejabberd节点在哪里找到它的集群邻居.mnesia:change_table_copy_type(schema,node(),disc_copies). 通过保留"schema"表的本地副本,告诉mnesia在节点重新启动时记住它的新集群邻居.application:start(ejabberd). 启动ejabberd应用程序,以便创建它真正需要的所有mnesia表副本. q().退出erlang vm,然后重新启动以确保群集正确形成.当我验证我的集群状态时,我调用mnesia:info().并查看running_db_nodes值.你可能想知道为什么当你的问题是关于使用PostgreSQL进行聚类时我会经历所有这些.这是因为在ejabberd中没有使用PostgreSQL进行集群的事情,因为应用程序的状态仍然与mnesia集群.当您使用Postgres作为用户和脱机消息之类的存储后端时,您仍然使用mnesia进行群集,您恰好使用Postgres作为某些服务的数据存储.出于这个原因,您在ejabberd群集上看到的大多数指南仅针对mnesia而未提及其他数据库后端.
您使用的SQL数据库的详细信息是您的ejabberd.cfg文件的问题,这对于大多数ejabberd集群指南的编写者来说已成定局.