目录

简介

先决条件

要求

使用的组件

解决方案

条款

执行的步骤

简介

本文档介绍如何在即时消息(IM)和在线状态(IM&P)中的群集间对等体之间移动PostgreSQL数据库。

作者：Joel Burleigh，由Cisco TAC工程师Joseph Koglin编辑

先决条件

要求

思科建议您的环境符合这些条件。

- 您有两个IM&P集群，版本为9.1.1

- 在IM&P群集之间设置了群集间对等体。

- 在一个群集上配置了PostgreSQL数据库，其中有一个数据库实例与IM&P发布服务器关联

使用的组件

本文档中的信息基于以下软件版本和组件：

- IM&P版本9.1.1

- PostgreSQL

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

解决方案

要消除任何混淆，这些术语将用于指代IM&P集群和PostgreSQL数据库。

条款

- Cluster1 — 最初配置外部数据库的IM&P集群

- Cluster2 — 外部数据库配置将移动到的IM&P集群。

- PostgreSQL — 用于外部数据库主机

执行的步骤

警告：只有在没有其他选项的情况下，才应使用这些步骤。在您继续执行这些步骤之前，请在内部讨论，以确保这是您的最佳解决方案。

注意：请注意，如果为集群间对等体正确设置了永久聊天。每个群集上的每个节点都应在PostgreSQL上拥有自己的数据库实例。唯一的例外是版本为11.5及更高版本。

步骤1.首先从当前托管数据库的IM&P发布服务器(Cluster1)输入CLI命令。

run sql select * from tcaliases

记录动态创建的会议ID和手动创建的与本地群集关联的别名。

动态会议ID的示例为conference-2-StandAloneCluster2c2aa.jburleig.local。您可以知道这是主会议ID，因为主会议ID设置为true，并且在fkprocessnode字段中有值

聊天节点别名的示例是pchat1.jburleig.local，您可以告诉这一点，因为主节点设置为false，但它在fkprocessnode列中具有与主会议ID相同的pkid值。

示例输出：

admin:run sql select * from tcaliases

pkid                                  tcalias                                             isprimary  fkprocessnode                        peerclusterid

====================================  ==================================================  =========  ==================================== ==============

50a4cf3b-0474-4723-ba50-4cd2cc1dd277  conference-2-StandAloneCluster2c2aa.jburleig.local      t      2c2aa1f6-cc7a-470a-a0ba-c8a892db68ca  NULL

9eca651d-5a67-3116-a57b-1eb2ab0911bd  pchat1.jburleig.local                                   f      2c2aa1f6-cc7a-470a-a0ba-c8a892db68ca  NULL

838e900a-0d2f-4843-be00-ac0a6c803ab5  conference-2-StandAloneClustercbea5.jburleig.local      f      NULL                                  2202

步骤2.创建当前数据库(PostgreSQL)的备份。

注意：数据库管理员应根据组织要求执行此操作。

步骤3.接下来创建新数据库实例(PostgreSQL)

- 在以下命令中创建的表名为cluster2，用于创建该表的用户为tcuser。

注意：数据库的Encoded方法可能与UTF8不同。

CREATE DATABASE cluster2 WITH OWNER tcuser ENCODING 'UTF8'

步骤4.您需要添加新条目，以允许对步骤2中创建的新数据库的tcuser访问。

如果IM&P群集上的新外部数据库配置将位于新的IP子网上，请确保更新您在pg.hba.conf文件(PostgreSQL)中的条目中的子网。

- 将条目添加到install_dir /data/pg_hba.conf

host      DBName          DBUsere          Subnet             password

host      cluster2        tcuser           10.10.1.0/24       password

步骤5.接下来，您需要在IM&P集群上创建新的外部数据库，该配置将移至(Cluster2)

- 导航至消息>外部服务器设置>外部数据库

- 选择“添加新”按钮并配置新外部数据库，并使用在步骤3中创建的数据库名称和用户

步骤6.现在，在承载持久性聊天配置的当前IM&P上禁用持久性聊天，并取消分配与持久性聊天配置(Cluster1)关联的外部数据库

- 导航至消息>群聊和持续聊天

- 取消选中启用持续聊天复选框

- 将外部数据库设置为未分配

步骤7.接下来删除外部数据库配置(Cluster1)

- 导航至消息>外部服务器设置>外部数据库

- 选中已配置的PostgreSQL持久聊天数据库旁边的复选框，然后选择删除。

步骤8.接下来删除在当前群集(Cluster1)上配置的持久聊天自定义别名

- 导航至“消息传送”>“群聊服务器别名映射”

- 选中已配置的别名旁边的复选框，然后选择删除。

步骤9.完全删除永久聊天和外部数据库配置后(Cluster1)重新启动Cisco XCP路由器(Cluster1)

步骤10.接下来在(Cluster2)上启用持续聊天并分配在步骤5中创建的外部数据库。

- 导航至消息>群聊和持续聊天

- 选中启用持续聊天复选框

- 将外部数据库设置为在步骤5中创建的外部数据库。

步骤11.在启用永久聊天后，验证外部数据库连接测试是否显示ok on(Cluster2)，仅当其全部为绿色复选标记时才继续。

- 导航至消息>外部服务器设置>外部数据库

- 验证外部数据库故障排除器是否显示绿色勾选标记。

- 选择在步骤5中设置的已配置外部数据库

步骤12.在(Cluster2)上创建自定义别名确保使用从旧集群中删除的别名的确切名称。您可以在步骤1的输出中找到别名的名称。

- 导航至“消息传送”>“群聊服务器别名映射”>“添加新的”

- 添加与在Cluster1上配置完全相同的别名。您可以在步骤1的命令输出中找到别名。

步骤13.下一步重新启动XCP路由器(Cluster2)

步骤14. Cisco XCP路由器成功重新启动后(Cluster2)继续并停止Cisco Text Conferencing Manager(Cluster2)

步骤15.使用步骤2中创建的PostgreSQL备份执行数据库还原。确保将备份还原到步骤3中创建的新数据库实例(PostgreSQL)

- 验证导入的数据是否在tc_room、tc_users、tc_messages和tc_msgarchive表中。

步骤16.下一步重新启动PostgreSQL服务(PostgreSQL)

步骤17.接下来在cluster2上启动文本会议管理器。

- 此时，如果用户登录Jabber，他们将能够看到使用持久聊天别名创建的任何聊天室。与动态分配的聊天室会议ID关联的任何聊天室都不会显示，因为它们当前与旧集群关联。您将通过在PostgreSQL服务器上运行SQL update命令来解决此问题。

步骤18.从PostgreSQL命令行执行这些命令，将旧会议ID更新为步骤12中创建的新别名。(PostgreSQL)

注意：您需要调整这些命令以包含您配置的Cluster1会议ID和别名ID。

Updates for tc_rooms

update tc_rooms set room_jid = replace(room_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

Updates for tc_users

update tc_users set room_jid = replace(room_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

update tc_users set nick_jid = replace(nick_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

update tc_users set initiator_jid = replace(initiator_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

Updates for tc_messages

update tc_messages set room_jid = replace(room_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

update tc_messages set msg = replace(msg, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

Updates for tc_msgarchive

update tc_msgarchive set to_jid = replace(to_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

update tc_ msgarchive set nick_jid = replace(nick_jid, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

update tc_ msgarchive set message_string = replace(message_string, ‘conference-2-StandAloneCluster2c2aa.jburleig.local’, ‘pchat1.jburleig.local’);

步骤19.下一步重新启动PostgreSQL服务(PostgreSQL)

步骤20.接下来重新启动文本会议管理器(Cluster2)

步骤21.此时，Jabber客户端应能登录IM&P并检索“所有房间”选项卡中的所有房间。