GaussDB(分散式)實例故障處理

来源:https://www.cnblogs.com/huaweiyun/p/18082876
-Advertisement-
Play Games

本文分享自華為雲社區《GaussDB(分散式)實例故障處理》,作者:subverter。 一、說明 GaussDB Kernel實例出現故障時,可以按照本節的辦法進行實例快速修複。 1、執行gs_om -t status --detail查看集群狀態,cluster_state為Normal,bal ...


本文分享自華為雲社區《GaussDB(分散式)實例故障處理》,作者:subverter。

一、說明

GaussDB Kernel實例出現故障時,可以按照本節的辦法進行實例快速修複。

1、執行gs_om -t status --detail查看集群狀態,cluster_state為Normal,balanced為No,請重置實例狀態。

2、執行gs_om -t status --detail查看集群狀態,cluster_state為Degraded,表示有實例異常,但是集群依然可以正常對外提供服務。此時,雖然不影響業務運行,但是主備實例切換將加重某些節點上的工作負載,時間久了,可能帶來這些對應節點上的資源耗盡,進而影響業務運行。因此集群處於Degraded狀態時,建議儘快定位,使集群恢復至Normal狀態。GaussDB Kernel提供瞭如下辦法,協助用戶在操作系統和硬體正常時的實例快速修複。

3、CN實例異常,優先通過刪除CN和增加CN進行實例恢復。

4、各類實例異常的通用辦法——修改HOSTNAME、IP和埠號。

二、重置實例狀態

1、操作場景

集群在運行過程中,如果發生了主機或某些實例故障,集群管理模塊會自動將備實例提升為主實例繼續提供服務;或是由於資料庫集群管理人員手工進行過主備切換操作後,使當前集群各主機上運行的主實例(GTM,DN)數不均等,造成集群負載不均衡,即集群“balanced”狀態為"No"。這種情況下可以通過集群管理命令將集群中的資料庫實例恢復為初始配置的主備狀態。

存在實例異常時,需要先將實例修複後,才能進行重置。

2、處理方法

1.以操作系統用戶omm登錄資料庫集群任一主機。

2.查詢並確認集群運行狀態及“balanced”狀態。

“cluster_state”為“Normal”表示集群運行正常。“balanced”狀態為“No”表示集群實例發生過主備切換。

gs_om -t status --detail

3.使用如下命令查看集群狀態確認是哪些節點上的實例發生過主備切換。

gs_om -t status --detail

例如下麵示例中,node2節點上的主dn2發生過主備切換。該DN原始為主DN(“state”中的字母“P”代表其初始為Primary DN),當前切換成了備DN(“state ”狀態變成了“Standby Normal”)。

4.使用如下命令將集群中發生切換的實例恢復為初始配置的主備狀態。

gs_om -t switch --reset --time-out=300

300為切換的等待時間,單位為s。切換後集群的“balanced”狀態變為“Yes”。

3、示例

查詢當前發生過切換的實例。

gs_om -t switch
Operation: Switch query.
[     GTM State     ]

node                   instance             state
--------------------------------------------------------------------
(no need to switchover gtm)

[  Datanode State   ]

node     node_ip         instance            state  | node     node_ip        instance                      state            | node     node_ip        instance                       state
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AZ1 1  plat1 192.168.0.11    6001 /gaussdb/data/data_dn1 P Standby Normal | 2  plat2 192.168.0.12   6002 /gaussdb/data/data_dnS1  S Primary Normal | 3  plat1 192.168.0.13   3002 /gaussdb/data/data_dnDS1  R Secondary Normal
Operation succeeded: Switch query.

若實例未發生過主備切換,則查詢結果中會顯示“no need to switchover xxx”。否則,則有實例發生過主備切換。例如,上例中通過查詢發現有一組主備DN都發生過切換。將發生切換的實例恢復為初始配置的主備狀態。

gs_om -t switch --reset --time-out=300
Operating: Switch reset.
cm_ctl: cmserver is rebalancing the cluster automatically.
......
cm_ctl: switchover successfully.
Operation succeeded: Switch reset.

4、錯誤排查

如果重置實例狀態失敗,請根據日誌文件中的日誌信息排查錯誤。

如果指定的超時時間到達後,仍然有某些實例沒有完成狀態切換,可以根據提示,執行3查看切換實例的當前狀態,然後設置更長的時間再次執行或者通過log查看切換失敗的原因。重置操作的預設超時時間為300s。

三、處理CN異常

集群部署多個CN同時對外提供服務,CN的角色是對等的,即執行DML語句時連接到任何一個CN都可以得到一致的結果。而DDL語句需要在所有CN上都執行完成,以保持資料庫對象定義一致。如果其中一個CN發生故障,整個集群將無法執行DDL語句,直到故障CN被修複或剔除。

如果只有CN異常,使用gs_replace工具可以快速將故障CN替換為正常CN。具體請參見修複故障實例。

如果因網路無法連接、硬體故障造成操作系統無法登錄等,短時間內無法恢復CN,又希望集群儘快恢復DDL執行能力,可以先手動刪除故障CN。待DDL業務完成後,再通過增加CN功能將CN加回。

GaussDB Kernel也提供了CN自動剔除功能,此功能預設開啟,開啟和關閉方式請參見自動剔除故障CN。通過設置coordinator_heartbeat_timeout為具體的時間值,則CN故障超過此時間值後GaussDB Kernel將自動剔除故障CN。

多AZ多集群部署結構下:

  • AZ的拓撲結構應當保持相同(由運維人員保證),應當對所有集群進行同樣的增刪CN操作,成功後集群再開始同步操作。
  • CN部署結構變化,可能將引起Roach做全量同步,具體以Roach的約束為準
  • 增刪CN開始時,會自動停止Roach的自動同步操作,完成或者回滾後,需要用戶手動恢復自動同步配置。

1、刪除CN

1.1 操作場景

在集群運行過程中,CN發生故障後,整個集群將無法執行DDL操作。因此,如果CN發生故障且無法快速修複時,可以使用gs_om中的managecn把故障CN從資料庫集群中刪掉,從而使集群可以快速恢復正常工作。

1.2 註意事項

  • “cluster_state”為“Unavailable”時,將無法執行刪除CN操作。
  • 一次僅允許刪除一個CN。
  • 如果因CN故障造成集群處於Degraded狀態,此時如果執行刪除CN操作,必須先刪除因故障被剔除的CN,之後才能刪除其他CN。
  • 若已開啟CN自動剔除功能,CM會自動將故障CN剔除,即從pgxc_node中刪掉,這樣DDL可以正常執行。CN被自動剔除後,不會再被拉起,必須刪除CN或通過實例替換、節點替換、溫備修複,才能進行擴容、升級等其他操作。
  • 刪除CN前不能鎖定集群,不能執行其他運維及變更類操作。
  • 刪除完成後集群中至少剩餘一個正常的CN。
  • 資料庫安裝用戶有足夠的許可權將新xml文件分發到所有主機的相同目錄下。
  • 在執行刪除CN操作時,建議不要進行數據增刪改等DML操作以及DDL操作,以避免數據的丟失。
  • 在刪除CN操作時,執行刪除命令的節點不能是要刪除的CN節點。
  • 單CN的集群不支持繼續縮容操作。
  • 3CN以下的集群不建議進行縮容操作,避免縮容過程中或結束後因為CN故障導致集群功能不可用。
  • 部署kerberos情況下,同時縮容kerberos server主備ip所在的cn會導致集群異常。

1.3 處理方法

1.以操作系統用戶omm登錄資料庫集群任一主機。

如果所登錄的主機因網路或操作系統等故障無法登錄,請更換為登錄另一集群主機。

2.修改集群XML配置文件clusterconfig.xml。

請將要刪除CN對應主機上的cooNum值從1改為0。

<!-- cn -->
<PARAM name="cooNum" value="0"/>
<PARAM name="cooPortBase" value="8000"/>
<PARAM name="cooDir1" value="/gaussdb/data/coordinator"/>

3.使用gs_om工具腳本執行刪除CN操作。

gs_om -t managecn -m delete -X /opt/software/GaussDB_Kernel/clusterconfig.xml

1.4 示例

刪除集群內部節點上的CN實例。
gs_om -t managecn -m delete -X /opt/software/GaussDB_Kernel/clusterconfig.xml
Checking the cluster configuration difference.
Successfully checked the cluster configuration difference.
Checking the cluster status.
Successfully checked the cluster status.
Distributing the XML configuration file to all nodes.
Successfully distributed the XML configuration file.
Creating backup directory.
Successfully created backup directory.
Backing up cluster configuration.
Successfully backed up cluster configuration.
Modifying static configuration files.
Static configuration file's modification is completed.
Locking cluster.
Successfully locked cluster.
Dropping pgxc_node catalog.
Successfully dropped pgxc_node catalog.
Configuring pg_hba on all nodes.
Unlocking cluster.
Successfully unlock cluster.
Waiting for cluster status to become Normal or Degraded.
.
The cluster status is Normal.
Deleting the CN instance.
Successfully cleaned CN instance.
集群運行過程中,某個含有CN的節點損壞短時間內無法修複(網路無法連接、硬體故障造成操作系統無法登錄等),此時會造成其他CN無法執行業務,造成業務中斷。此時,可以選擇進行節點替換,但耗時較長,為了儘可能的快速恢復業務,可以執行對該節點上的CN刪除。以故障節點為SIA1000022048為例:
gs_om -t managecn -m delete -X /opt/software/GaussDB_Kernel/clusterconfig.xml
Checking the cluster configuration difference.
Successfully checked the cluster configuration difference.
Warning: Failed to connect to the node SIA1000022048.
Checking the cluster status.
Successfully checked the cluster status.
Distributing the XML configuration file to all nodes.
Successfully distributed the XML configuration file.
Creating backup directory.
Successfully created backup directory.
Backing up cluster configuration.
Successfully backed up cluster configuration.
Modifying static configuration files.
Static configuration file's modification is completed.
Locking cluster.
Successfully locked cluster.
Dropping pgxc_node catalog.
Successfully dropped pgxc_node catalog.
Configuring pg_hba on all nodes.
Successfully configured pg_hba on all nodes.
Unlocking cluster.
Successfully unlock cluster.
Waiting for cluster status to become Normal or Degraded.
...........
The cluster status is Degraded.
Manage CN is completed.

如果執行完刪除節點SIA1000022048的CN後,該節點又從故障中恢復,此時該節點上記錄的集群信息為刪除CN前的,造成該節點與真實的集群信息不相同,因此需要對該節點執行如下操作,以保障集群信息的統一。

調用gs_om -t generateconf -X /opt/software/GaussDB_Kernel/clusterconfig.xml ,用最新的集群配置文件重新生成各節點的靜態配置文件,並覆蓋此節點上的靜態配置文件。
調用gs_om -t stop -h SIA1000022048和gs_om -t start -h SIA1000022048對該節點進行重啟,使得新的集群配置信息生效。
手動刪除節點SIA1000022048上的CN數據目錄(選做)。

2、增加CN

2.1 操作場景

當集群中的CN數量無法承載業務運行壓力時,可以通過gs_om的managecn功能給集群增加CN。同時,如果CN因故障被刪除後,可以使用增加CN功能將其加回。

2.2 前提條件

  • 增加CN需要集群處於Normal狀態。
  • 在已有主機上增加CN,需要提前創建CN的數據目錄、日誌目錄。
  • 在新增主機上增加CN,需要在配置文件中新增新主機的CM路徑並使用gs_preinstall工具準備好新主機的環境。
  • 需要在一個狀態正常的主機上執行操作。

2.3 註意事項

  • 一次僅允許增加一個CN。
  • 增加CN前不能鎖定集群,不能執行引起集群狀態或結構變化的其他運維操作。
  • 資料庫安裝用戶有足夠的許可權將新xml文件分發到所有主機的相同目錄下。
  • 增加CN過程中集群可以執行業務,特別說明:由於過程中會短暫鎖集群,鎖集群後用戶下發的包含顯式啟動事務的DDL語句會出現等待,集群解鎖後會報錯或等待時間超過20分鐘會報錯。如包含創建臨時表操作,在集群解鎖後會報錯(Don’t support temp table when need reconnect pooler)。
  • 增加、刪除CN過程中系統將關閉“自動剔除故障CN”功能,在完成後系統再次打開該功能。

2.4 處理方法

1.以操作系統用戶omm登錄資料庫集群任一主機。

2.修改集群XML配置文件clusterconfig.xml。

在已有主機上新增CN,請將要增加CN對應主機上的cooNum值從0改為1。

<!-- cn -->
<PARAM name="cooNum" value="1"/>
<PARAM name="cooPortBase" value="8000"/>
<PARAM name="cooDir1" value="/gaussdb/data/coordinator"/>

在新增主機上增加CN,要求該主機上只能配有CN,不能包含DN、GTM、CM Server及ETCD。如下以增加集群外的主機SIA1000056772上的CN為例:

<!-- SIA1000056772的實例部署信息 -->
  <DEVICE sn="1000002">
   <PARAM name="name" value="SIA1000056772"/>
   <PARAM name="backIp1" value="10.180.122.136"/>
   <PARAM name="sshIp1" value="10.180.122.136"/>

   <!--cmserver-->
   <PARAM name="cmsNum" value="0"/>
   <PARAM name="cmServerPortBase" value="28601"/>
   <PARAM name="cmServerPortStandby" value="28611"/>
   <PARAM name="cmServerlevel" value="1"/>
   <PARAM name="cmDir" value=" /data_rt/bigcluster_rt/cmserver"/>
   <PARAM name="cmServerRelation" value="SIA1000056772,SIA1000056672"/>

   <!-- cn -->
   <PARAM name="cooNum" value="1"/>
   <PARAM name="cooPortBase" value="8000"/>
   <PARAM name="cooDir1" value="/gaussdb/data/coordinator"/>

   <!-- gtm -->
   <PARAM name="gtmNum" value="0"/>
   <PARAM name="gtmPortBase" value="6000"/>
   <PARAM name="gtmPortStandby" value="6500"/>
   <PARAM name="gtmDir1" value="/data_rt/bigcluster_rt/gtm,SIA1000056672,/data_rt/bigcluster_rt/gtm"/>
   <PARAM name="gtmRelation" value="SIA1000056772,SIA1000056672"/>

  </DEVICE> 

3.進入安裝包解壓出的script目錄下,執行下麵命令為增加CN準備好前置環境。

./gs_preinstall -U  -G dbgrp -L -X /opt/software/GaussDB_Kernel/clusterconfig.xml --alarm-type=5

4.使用gs_om工具腳本進行增加CN操作。

gs_om -t managecn -m add -X /opt/software/GaussDB_Kernel/clusterconfig.xml

5.(可選)如果增加CN前修改過CN的GUC參數:log_dir,listen_addresses,local_bind_address,port,pgxc_node_name,pooler_port,log_directory和audit_directory。增加CN成功後,新CN無法同步先前的修改。請使用gs_guc工具以reload方式修改重新修改CN上的這些GUC參數。

2.5 示例

增加集群內部節點上的CN實例。

前提條件:在xml中配置好需要增加的CN信息,執行前置命令。

gs_om -t managecn -m add -X /opt/software/GaussDB_Kernel/clusterconfig.xml
Checking the cluster configuration difference.
Successfully checked the cluster configuration difference.
Checking the cluster status.
Successfully checked the cluster status.
Distributing the XML configuration file to all nodes.
Successfully distributed the XML configuration file.
Creating backup directory.
Successfully created backup directory.
Backing up cluster configuration.
Successfully backed up cluster configuration.
Modifying static configuration files.
Static configuration file's modification is completed.
Locking cluster.
Successfully locked cluster.
Building CN instance.
Successfully built CN instance.
Creating pgxc_node catalog.
Successfully created pgxc_node catalog.
Configuring pg_hba on all nodes.
Unlocking cluster.
Successfully unlock cluster.
Waiting for cluster status to become Normal or Degraded.
.
The cluster status is Normal.
增加集群外部伺服器上的CN,首先用新增外部機器CN的配置文件執行前置,然後以下麵命令進行外部增加CN操作,以增加SIA10000622109為例。
gs_om -t managecn -m add -X /opt/software/GaussDB_Kernel/clusterconfig.xml
Checking the cluster configuration difference.
Successfully checked the cluster configuration difference.
Checking the cluster status.
Successfully checked the cluster status.
Distributing the XML configuration file to all nodes.
Successfully distributed the XML configuration file.
Creating backup directory.
Successfully created backup directory.
Installing GaussDB Kernel on the new node.
Checking installation environment on this node (SIA1000062209).
Installing applications on this node (SIA1000062209).
Synchronizing libcgroup configuration to this node (SIA1000062209).
Successfully installed GaussDB Kernel on the new node.
Backing up cluster configuration.
Successfully backed up cluster configuration.
Modifying static configuration files.
Static configuration file's modification is completed.
Locking cluster.
Successfully locked cluster.
Building CN instance.
Successfully built CN instance.
Creating pgxc_node catalog.
Successfully created pgxc_node catalog.
Configuring pg_hba on all nodes.
Unlocking cluster.
Successfully unlock cluster.
Waiting for cluster status to become Normal or Degraded.
.
The cluster status is Normal.

3、自動剔除故障CN

自動剔除故障CN功能預設開啟。
在單機部署場景下,自動剔除CN功能不生效,無需執行本節操作。

3.1 背景信息

  • 集群可部署多個CN同時對外提供服務,CN的角色是對等的,即執行DML語句時連接到任何一個CN都可以得到一致的結果。而DDL語句需要在所有CN上都執行完成,保持相關定義一致,如果其中一個CN發生故障,整個集群將無法執行DDL語句,直到故障CN被修複。
  • 為了不影響用戶業務的執行,GaussDB Kernel 提供了CN故障自動剔除功能,系統檢測到CN故障後在限定時間內將CN自動剔除,用戶的DDL語句就可以繼續執行。

3.2 前提條件

無。

3.3 註意事項

  • 自動剔除故障CN功能預設開啟,預設設置CN剔除時間為25秒。用戶可根據自己實際場景和需求確定是否開啟功能,以及開啟後的剔除時間。
  • 集群中部署的CN少於2個不會自動剔除。多CN場景下,共N個CN時,最多剔除N-1個CN。如果開啟了自動修複CN功能(,已剔除CN的故障解除後,系統可以自動修複CN,或者用戶執行實例替換命令手動修複,參見手動修複剔除的CN。
  • CN故障被剔除後,CN會處於Deleted狀態, 集群處於Degraded狀態,用戶業務可以繼續執行不受影響,但是物理集群的擴容、縮容、升級、增加CN、change IP操作將不能執行。

3.4 處理方法

開啟自動剔除故障CN功能,即CN故障後,自動剔除故障的CN。

gs_guc set -Z cmserver -N all -I all -c "coordinator_heartbeat_timeout=25"

關閉自動剔除故障CN功能,即CN故障後,不剔除故障的CN。

gs_guc set -Z cmserver -N all -I all -c "coordinator_heartbeat_timeout=0"

其中coordinator_heartbeat_timeout為CN自動剔除的時間,單位是秒,預設值25秒,設置為0表示關閉CN自動剔除功能,設置為大於0的數字,表示開啟此功能,用戶可根據自己實際場景和需求確定剔除時間。

重新設置該參數後需要重啟cm_server進程或發信號 kill -1 cm_server進程號才能生效。

4、手動剔除故障CN

CN故障時,除了自動剔除還可以對CN進行手動剔除。在單機部署場景下,手動剔除CN功能不生效,無需執行本節操作。

4.1 註意事項

當coordinator_heartbeat_timeout參數設置為0,自動剔除功能關閉時也可以執行手動剔除。

只有CN狀態為down時,才能手動剔除該CN。

手動剔除CN時,若發生cm_server主故障,有可能會出現剔除超時,超時後重新執行剔除。

4.2 處理方法

執行如下命令進行手動剔除故障CN:

cm_ctl disable -n node_id -D data_path
node_id為CN所在節點的ID,data_path為CN的數據目錄路徑,可通過cm_ctl query -Cvd查詢。

5、手動修複剔除的CN

CN故障被剔除後(狀態顯示為Deleted),資料庫支持自動修複方式和手動修複方式修複被剔除的CN。本小節說明手動修複方式,即手動執行實例替換命令。
在單機部署場景下,手動修複CN功能不生效,無需執行本節操作。

5.1 背景信息

CN手動修複時會短暫阻塞DDL,修複結束後DDL可以繼續執行。

5.2 前提條件

  • 當前CN故障解除後才能啟動手動修複。
  • CN手動修複需要在集群有正常的CN時才能成功。
  • 如果觸發手動修複,自動修複會被停止。

5.3 註意事項

下述兩條命令需要關聯一起執行,若只執行gs_replace -t config -h而未執行gs_replace -t start -h則可能影響集群功能,導致後續使用自動修複方式時功能不可用。

5.4 處理方法

執行如下命令,對需要替換實例的主機進行配置操作。配置操作會清理替換實例的空間,初始化替換實例,配置替換實例。

gs_replace -t config -h hostname

執行如下命令,對需要修複實例的主機進行啟動操作。

gs_replace -t start -h hostname
hostname是故障CN所在主機的主機名稱。

6、修複故障實例

資料庫集群是由多台主機組成的,當集群中主機上的某些實例發生故障後,為了使GaussDB Kernel快速地恢復正常,用戶可以使用gs_replace工具將發生故障的實例替換為正常實例。

6.1 前提條件

  • 集群處於啟動狀態,且處於沒有加鎖。
  • 修複操作需要在一個正常主機上執行。
  • 一組DN的主實例、備實例,其中只能有一個損壞。
  • 集群內如下實例分別至少存在一個正常運行的:CM Server、CM Agent、GTM、CN。
  • 如果集群中部署有ETCD,則正常的ETCD個數必須大於ETCD總個數的一半。
  • 如果集群中未部署ETCD,某個GTM實例存在故障,則要求實例替換前另外一個GTM實例必須為最高可用模式,即該GTM實例正常。
  • 由於在修複實例時,會檢查並修複所有主機上故障的CM Agent實例,所以要求各主機必須互信正常,且安裝目錄下的二進位文件未被損壞。
  • 強制修複多節點時,由於會停止需要修複節點內的所有CN,所以如果集群的所有CN在指定修複的節點中,則不支持強制修複多節點。
  • 強制修複多個節點時,由於會停止需要修複節點上的所有DN主、備實例,所以指定修複的節點的DN主、備均不能在同一個DN環內。
  • 一主多備部署下,修複DN實例時,為保證數據正確,DN環中必須有CM可監控的主存活。

6.2 註意事項

  • 如果集群中含有故障的CN且其狀態不為Deleted,那麼在修複過程中用戶執行DDL會報錯,DML可以正常執行。其他場景執行業務不受影響,特別說明:由於修複CN的過程中會短暫鎖集群,鎖集群後用戶下發的包含顯式啟動事務的DDL語句會出現等待,集群解鎖後會報錯或等待時間超過20分鐘會報錯。如包含創建臨時表操作,在集群解鎖後會報錯(Don’t support temp table when need reconnect pooler)。
  • 如果故障實例所在主機的安裝目錄下($GAUSSHOME/bin/)的二進位文件損壞或丟失,則不能通過替換實例進行修複。需要複製其他正常主機對應的二進位文件到該主機,或者將該主機卸載後,再通過替換主機修複。
  • 在前一次修複結束後才能再次執行修複。因此請不要同時在多個主機上執行修複操作。
  • 實例修複操作會修複故障節點下的全部故障實例。
  • 在修複實例的config階段,先將CM Agent組件修複好,這樣才能獲取到集群中所有實例的狀態。如果主機上的某些實例被人為停止,在CM Agent組件修複好之後,這些原來正常的實例會被正常拉起,而不會被修複。如果在一定時間內拉起失敗,這些實例將會被修複。
  • 修複故障實例過程中系統將關閉“自動剔除故障CN”功能,完成後系統再次打開該功能。因此建議在開始修複前確認故障的CN已經被自動剔除(即故障的CN狀態為Deleted),否則在修複過程中用戶執行DDL會報錯。
  • 修複CN實例過程中,在CN狀態未變為Normal前,不能連接該CN執行業務。
  • 實例修複前用戶手動在故障實例上配置的guc參數、pg_hba.conf配置的白名單會丟失,需要重新設置。

6.3 處理方法

以替換主機plat1、plat2上的實例為例。

1.以操作系統用戶omm登錄資料庫集群任一主機。
操作系統用戶omm登錄的主機為非故障主機。

2.(可選)使用如下命令在需要替換實例的主機上清理可能存在的殘留文件。此命令僅在上次修複故障實例執行失敗的情況下需要執行。

(if [ -f $PGHOST/GaussReplace.dat ];then rm $PGHOST/GaussReplace.dat;fi)

該文件為替換故障實例、替換主機中產生的用於記錄執行步驟的臨時文件,如果在上次執行過程中出現宕機或網卡中斷等,可能會導致該文件殘留。在替換故障實例前檢查該文件是否存在,且生成時間非本次替換故障實例的時間,則可判斷為上次執行的殘留文件,刪除該文件後,繼續執行替換故障實例。

3.使用如下命令對需要替換實例的主機進行配置操作。

gs_replace -t config -h plat1, plat2

配置操作會清理替換實例的空間,初始化替換實例,配置替換實例。

如果收到提示:“GAUSS_50201: The XXX does not exist.”,則請檢查對應的實例數據目錄是否存在。如果不存在,請重新創建目錄後再次執行上述命令。

如果指定主機的表空間所在磁碟出現故障,從而導致表空間中的數據損壞,更換新磁碟後,需要指定–force參數對該主機強制進行表空間數據的恢復。如果在config階段指定–force參數,則在start階段也必須指定–force參數。

4.使用如下命令對需要修複實例的主機進行啟動操作。

gs_replace -t start -h plat1 , plat2

啟動操作會啟動集群替換實例的主機。

5.使用如下命令重置實例狀態。

switch為維護操作:確保集群狀態正常,所有業務結束,並使用pgxc_get_senders_catchup_time()視圖查詢無主備追趕後,再進行switch操作。

gs_om -t switch --reset

重置過程會恢復集群初始狀態,以保證各主機的負載都是均衡的。

6.執行如下命令查詢集群狀態。

gs_om -t status

7、修複DN增量build失敗

7.1 背景信息

在集群DN增量build過程中,會先刪除部分數據,如果原主損壞,那麼主備均損壞。為了集群快速恢復正常,需要手動進行文件替換,然後恢復集群,使集群能夠正常運行。

7.2 前提條件

  • 只在增量build的場景下。
  • 集群已安裝,增量build前集群狀態正常。
  • 只有DN環中包含的主實例、備實例故障,從備實例正常。
  • 集群內如下實例分別至少存在一個正常運行的:CM Server、CM Agent、GTM、CN。
  • 由於在修複實例時,會檢查並修複所有主機上故障的CM Agent實例,所以要求各主機必須互信正常,且安裝目錄下的二進位文件未被損壞。

7.3 註意事項

pg_rewind_bak目錄為增量build時備機的文件備份目錄,不能被手動修改。

7.4 處理方法

1.以操作系統用戶omm登錄集群故障節點的主機。

2.停止所有CN和故障的DN主備從。

3.執行以下命令查看CN和故障DN所在節點信息。

cm_ctl query -Cvd

例如在一個含3個CN和12個DN的主備從集群中,

CN :
node             instance                     state
-----------------------------------------------------
1  lfgp000710736 5001 /data1/mpp/coordinator1 Normal
2  lfgp000710735 5002 /data1/mpp/coordinator2 Normal
3  lfgp000710734 5003 /data1/mpp/coordinator3 Normal

故障DN :

3  lfgp000710734 6017 /data1/mpp/data1/master09 P Down    Disk damaged | 1  lfgp000710736 6018 /data1/mpp/data1/slave09  S Down    Unknown | 2  lfgp000710735 3010 /data1/mpp/data1/dummy09  R Secondary Normal

執行以下命令停止所有CN和故障的dn主備從。

cm_ctl stop -n nodenumber -D CN所在目錄
cm_ctl stop -n nodenumber -D DN所在目錄

其中,nodenumber,CN所在目錄,DN所在目錄可由1獲取。例如,

cm_ctl stop -n 1 -D /data1/mpp/coordinator1
cm_ctl stop -n 2 -D /data1/mpp/coordinator2
cm_ctl stop -n 3 -D /data1/mpp/coordinator3
cm_ctl stop -n 1 -D /data1/mpp/data1/slave09
cm_ctl stop -n 2 -D /data1/mpp/data1/dummy09

執行restore操作,需要登錄到故障的機器上。

gs_ctl restore -D /data1/mpp/data1/slave09

cm_ctl start方式啟動故障結點。

cm_ctl start -n 1 -D /data1/mpp/data1/slave09/ #先變成Standby Need

repair(Disconnected),然後是Standby Promoting,這時候起來從備

啟動從備:

cm_ctl start -n 2 -D /data1/mpp/data1/dummy09

備機升主成功。

啟動原主機:

cm_ctl start -n 3 -D /data1/mpp/data1/master09

原主機啟動成功後降為備機。

啟動CN結點,恢復業務:

cm_ctl start -n 1 -D /data1/mpp/coordinator1
cm_ctl start -n 2 -D /data1/mpp/coordinator2
cm_ctl start -n 3 -D /data1/mpp/coordinator3

檢查結點狀態是否恢復正常:

cm_ctl query –Cvd

數據校驗。

啟動業務。

在數據驗證完成後,啟動業務。

四、修改HOSTNAME、IP和埠號

1、背景信息

在資料庫集群使用過程中,由於網路部署調整、機房搬遷、網路故障等帶來主機IP地址和埠號的變更。GaussDB Kernel提供了gs_om的changeip操作可以在不換主機、不改變集群其他配置的前提下,快速實現集群IP地址、主機名或者埠號的變更。

2、前提條件

  • 確認集群狀態正常後,停止集群。
  • 基於新IP、主機名的用戶互信已配置好。
  • 資料庫安裝用戶有足夠的許可權將新xml文件分發到所有主機的相同目錄下。

3、註意事項

  • 僅換IP地址、主機名或者埠號,不換主機。
  • 以資料庫安裝用戶執行腳本。
  • 外部表IP不處理。
  • 修改IP支持集群backIP,sshIP,HaIP以及實例偵聽IP的修改。修改埠支持修改GTM、CN、ETCD、CM Server以及DN埠。
  • 在修改集群IP過程中,出現異常情況(斷電、宕機)時,通過“gs_om -t status”獲取到的集群以及實例狀態信息是不准確的。重新執行修改集群IP操作,正常結束後才能進行其它操作。
  • 修改IP和埠號操作需要停止業務,執行過程中不支持資料庫DQL、DDL、DML、DCL操作。
  • 當未配置實例埠時,實例初始化的預設埠為cm_server主5000備5500;GTM主6000備6500;CN主8000備8500;DN主40000備45000從50000;ETCD主2379備2380。

4、處理方法

1.以root用戶身份登錄資料庫集群任一主機。

2.修改集群部署配置文件clusterconfig.xml,把主機的IP和hostname或者埠號替換為新的。

3.進入安裝包解壓後的script文件夾。例如,安裝包存放路

為/opt/software/GaussDB_Kernel。

cd /opt/software/GaussDB_Kernel/script

4.準備集群環境。

./gs_preinstall -U omm -G dbgrp -X ../clusterconfig.xml --alarm-type=5

omm為運行集群的操作系統用戶,dbgrp為操作系統用戶的群組名稱,clusterconfig.xml為集群配置文件,此示例中假設其存儲在安裝包存放路徑下。

5.切換為omm用戶。

su - omm

6.執行如下命令進行修改集群IP操作。

gs_om -t changeip -X clusterconfig.xml
clusterconfig.xml為修改後的配置文件。

如果執行修改集群IP過程中出現錯誤,系統調用自動回滾。如果自動回滾過程中,因為磁碟滿等原因,導致回滾失敗,則用戶排除錯誤後,如需繼續執行修改IP則調用本命令,如果要放棄修改IP,則調用如下命令將集群恢復到修改ip之前的狀態:

gs_om -t changeip -X clusterconfig.xml --rollback

5、涉及修改參數列表

集群的IP和埠號都需要使用gs_om工具進行修改。

未標題-1.jpg

點擊關註,第一時間瞭解華為雲新鮮技術~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在用Apache SeaTunnel研發SM2加密組件過程中,發現社區關於本地調試SeaTunnel文章過於簡單,很多情況沒有說明,於是根據自己遇到問題總結這篇文檔。SeaTunnel本地調試官方文檔,希望對大家有所幫助! 使用的引擎為Flink(不需要下載,SeaTunnel中有載入依賴),輸入輸 ...
  • 前言 本文記錄 ES 的一些基本操作,就是對官方文檔的一些整理,按自己的習慣重新排版,湊合著看。官方的更詳細,建議看官方的。 下文以 books 為索引名舉例。 新增 添加單個文檔 (沒有索引會自動創建) POST books/_doc {"name": "Snow Crash", "author" ...
  • 前置概念 無併發的解決方案 一些小型項目,或極少有併發的項目,這些策略在無併發情況下,不會有什麼問題。 讀數據策略:有緩存則讀緩存,然後介面返回。沒有緩存,查詢出數據,載入緩存,然後介面返回。 寫數據策略:數據發生了變動,先刪除緩存,再更新數據,等下次讀取的時候載入緩存,或一步到位更新數據後直接更新 ...
  • mysql語句總結 創建 --create 創建 <create> create database 資料庫名 [charset=utf8]; create table 數據表名 ( (欄位 類型 約束[, 欄位 類型 約束]) | -- 級聯刪除/級聯更新 on delete/update casc ...
  • Redis語句總結 一、基本概念 Redis 全稱: Remote Dictionary Server(遠程字典伺服器)的縮寫,以字典結構存儲數據,並允許其他應用通過TCP協議讀寫字典中的內容。 使用C語言編寫,並以記憶體作為數據存儲介質,所以讀寫數據的效率極高 *redis的官方只提供了linux版 ...
  • 華為雲GeminiDB是一款相容Redis協議的彈性KV(Key-Value)資料庫,支持遠超記憶體的容量和極致的性能,可支撐用戶平滑遷移,在廣告、游戲、電商等行業有著廣泛的應用。 今年3月上線的新版本,GeminiDB已全面支持Redis 6.2,用戶可在華為雲GeminiDB產品官網購買使用。新版 ...
  • 作者本人使用的是vmware17Pro虛擬機,大家可以去網上找相關教程下載安裝,此總結後邊有多次安裝遇到的bug,要是有地方不妥,歡迎相互交流 在剛開始時,我們先部署的是Linux虛擬機,在設置Linux系統基礎環境時,系統就基本具有一些網路服務功能,差不多類似於現實中大型的伺服器,還有設置網路這一 ...
  • 近年來,新質生產力、數據要素及數據資產入表等新興概念猶如一股強勁的浪潮,持續衝擊並革新著企業數字化轉型的觀念視野,昭示著一個以數據為核心驅動力的新時代正穩步啟幕。 面對這些引領經濟轉型的新興概念,為了更好地服務於客戶並提供切實可行的實踐指導,自3月20日起,袋鼠雲將推出全新《袋鼠雲大數據實操指南》系 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...