目錄

簡介

必要條件

需求

採用元件

解決方案

期限

執行的步驟

簡介

本文檔介紹如何在即時消息(IM)和線上狀態(IM&P)中的集群間對等體之間移動PostgreSQL資料庫。

作者：Joel Burleigh，編輯者：Joseph Koglin，思科TAC工程師

必要條件

需求

思科建議您建立一個滿足這些條件的環境。

- 您有兩個版本為9.1.1的IM&P集群

- 在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，因為主要會議設定為true，並且在fkprocessnode欄位中有值

例如，聊天節點別名是pchat1.jburleig.local，您可以告訴這一點，因為主節點設定為false，但是它在fkprocessnode列中的pkid值與主會議ID的值相同。

輸出範例：

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，並且用於建立該表的使用者更簡單。

附註：資料庫的Encoded方法可能不同於UTF8。

CREATE DATABASE cluster2 WITH OWNER tcuser ENCODING 'UTF8'

步驟4.您將需要新增一個新條目，以允許訪問步驟2中建立的新資料庫。

如果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)

- 導航到消息>外部伺服器設定>外部資料庫

- 選擇Add New按鈕並配置新的外部資料庫，並使用在步驟3中建立的資料庫名稱和使用者

步驟6.現在在承載持續聊天配置的當前IM&P上禁用持續聊天，並取消分配與持續聊天配置(Cluster1)關聯的外部資料庫

- 導航到消息>群聊和持續聊天

- 取消選中Enable Persistent Chat覈取方塊

- 將外部資料庫設定為未分配

步驟7.接下來刪除外部資料庫配置(Cluster1)

- 導航到消息>外部伺服器設定>外部資料庫

- 選中已配置的PostgreSQL持久聊天資料庫旁邊的覈取方塊，然後選擇「刪除」。

步驟8.接下來刪除當前群集(Cluster1)上配置的持久聊天自定義別名

- 導航到消息>群組聊天伺服器別名對映

- 選中配置的別名旁邊的覈取方塊，然後選擇「刪除」。

步驟9.完全刪除持久聊天和外部資料庫配置後(Cluster1)重新啟動Cisco XCP路由器(Cluster1)

步驟10.接下來，在(Cluster2)上啟用持續聊天，並分配在步驟5中建立的外部資料庫。

- 導航到消息>群聊和持續聊天

- 選中Enable Persistent Chat覈取方塊

- 將外部資料庫設定為在步驟5中建立的外部資料庫。

步驟11.啟用持續聊天後，驗證外部資料庫連線測試在(Cluster2)上是否顯示ok，僅當該測試具有所有綠色複選標籤時才繼續。

- 導航到消息>外部伺服器設定>外部資料庫

- 驗證外部資料庫故障排除程式是否顯示綠色複選標籤。

- 選擇在步驟5中設定的已配置的外部資料庫

步驟12.在上建立自定義別名(Cluster2)確保使用從舊群集中刪除的別名的確切名稱。您可以在步驟1的輸出中找到該別名的名稱。

- 導航到消息>群組聊天伺服器別名對映>新增新

- 新增與Cluster1上配置的別名完全相同的別名。您可以在步驟1的命令輸出中找到別名。

步驟13.接下來重新啟動XCP路由器(Cluster2)

步驟14.Cisco XCP路由器成功重新啟動(Cluster2)後，繼續並停止Cisco Text Conferencing Manager(Cluster2)

步驟15.使用步驟2中的PostgreSQL備份執行資料庫還原。請確保將備份還原到步驟3中建立的新資料庫例項(PostgreSQL)

- 驗證匯入的資料位於tc_rooms、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並檢索「所有房間」頁籤中的所有房間。