资源池化DORADO双集群部署

内容简介

openGauss资源池化是openGauss推出的一种新型的集群架构.通过DMS和DSS组件,实现集群中多个节点的底层存储数据共享和节点间的内存实时共享,达到节省底层存储资源以及集群内部支持一写多读且可以实时一致性读的目的。 本文主要介绍基于日志合一的资源池化部署同城双中心。

  • 在社区上正式发布的企业版安装包中, 如果需要搭建资源池化同城双中心, 在硬件上需要准备磁阵, 服务器和光交换机,且需要部署CM和OM组件。
  • 当前版本只支持资源池化本地xlog日志和远程同步复制xlog日志共存的实现下部署资源池化主备双集群容灾。

手动部署同城双中心示例

资源池化部署通过om管理工具部署两个资源池化单集群,再配置容灾参数,从而搭建同城双中心。

资源池化DORADO双集群部署 - 图1 说明: 此处的手动安装是指工程编译之后,可通过om管理工具执行相关命令进行资源池化集群安装部署,openGauss常规安装请参照《安装指南》。

  • 前置条件

  • 工程已完成代码编译,编译请参见软件安装编译。

  • 主备存储已经挂载磁阵LUN设备,并且已经安装ultrapath多路径软件,磁阵设备可用。
  • 限制条件

  • 两套正常的dorado存储,需要搭建两套资源池化集群。

  • 为了支持日志合一,需要将集群内xlog日志全部存放在一个卷上。
  • 组网方式
生产中心 主端 业务计算节点0 10.0.0.10 主存储 Dorado1
业务计算节点1 10.0.0.20
容灾中心 备端 业务计算节点0 20.0.0.10 备存储 Dorado2
业务计算节点1 20.0.0.20
- 操作步骤

第一步: 在主存储上创建资源池化需要的lun,以及远程同步复制xlog卷对应的lun,并且所有lun全部映射到业务计算节点上

  • 需要保证同一个Dorado lun在一个集群内多台机器上映射的盘符一致,若不一致可以通过建立软链接的方法,使其对openGauss暴露的盘符一致即可。
  • 例如wwn为00000000000001的盘在主集群0节点的盘符为sd0,在主集群1节点的盘符为sd1,我们可以通过

    1. ll /dev/disk/by-id // 查看lun对应的wwn来确定具体的盘符 2. ln -s /dev/sd0 /dev/data // 在0节点执行 [建议四块盘符均创建一个软链接] 3. ln -s /dev/sd1 /dev/data // 在1节点执行 [建议四块盘符均创建一个软链接]

    然后将/dev/data作为我们可用的盘

    lun 盘符
    data /dev/sda
    xlog /dev/sdb
    votingDiskPath /dev/sdc
    shareDiskDir /dev/sdd
    - 磁阵操作步骤

资源池化DORADO双集群部署 - 图2 说明:

  • DeviceManager是在有了存储设备后自行配置的一个用于管理存储设备的网页。
  • 取消从资源保护在主集群和备集群DeviceManager中都可以执行,执行效果一样,需要先更改关系为分裂,才可以执行取消从资源保护。
  • 在第一次扫描、查询盘符时,如果查找不到,则可以使用iscsiadm -m node —logoutall=all和iscsiadm -m node -p ip -l来断开连接并重新登录连接,注意该操作会影响所有连接的存储设备,可能会影响其他用户,请谨慎操作。这里的ip是存储设备的ip地址,可以使用iscsiadm -m node来查询。
  1. 登录主集群DeviceManager,选择服务->LUN组->创建 来创建主集群LUN组;
  2. 登录主集群DeviceManager,选择数据保护->LUN->远程复制Pair->创建 为xlog卷创建远程复制Pair,执行完成后DeviceManager会在对端自动创建一个与本端xlog卷有同步复制关系的卷;
  3. 点击创建好的远程复制Pair,通过操作->分裂 将上一步建立的远程复制Pair分裂,此步骤是为了先分别拉起主备集群。
  4. 登录备集群DeviceManager,执行相同的创建LUN的操作,在创建的LUN组中点击成员LUN->增加,然后选择主集群上已经创建的xlog卷,添加xlog盘,并在备集群存储创建并映射剩余的3个lun。
  5. 在备集群DeviceManager中选择数据保护->LUN->远程复制Pair,然后搜索已经创建的远程复制Pair,通过操作->取消从资源保护使从端可读写。
  6. 在服务->LUN组->LUN中搜索刚才创建的LUN名称,查询本端WWN,用来在服务器上映射到对应的盘符。在服务器root用户下,执行rescan-scsi-bus.sh脚本扫描创建的LUN组,执行 ll /dev/disk/by-id | grep xxx 查询对应的盘符。

第二步: 主存储上准备xml文件。

在创建XML配置文件中的配置数据库名称及各项目录里有配置说明。

根据配置说明准备资源池化集群需要的xml文件,以一主一备举例:

``` 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.

  1. ```

将xml保存在/opt/software/openGauss/cluster_config.xml中

Tips: 用户需要修改节点名称、节点IP、目录、盘符、端口号

第三步: 在主存储上执行如下操作安装部署主集群,安装用户omm。

执行《文档->安装指南->企业版安装->安装openGauss->初始化安装环境》中的步骤, <https://docs.opengauss.org/zh/docs/5.0.0/docs/InstallationGuide/%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AE%89%E8%A3%85%E7%8E%AF%E5%A2%83.html>

简化步骤如下:

``` 1. su - root 2. mkdir -p /opt/software/openGauss 3. chmod 755 -R /opt/software 4. 将下载的安装包放置/opt/software/openGauss目录下

  1. cd /opt/software/openGauss
  2. tar -zxvf openGauss-All-x.x.x-openEuler20.03-x86_64.tar.gz
  3. tar -zxvf openGauss-OM-x.x.x-openEuler20.03-x86_64.tar.gz

  4. cd /opt/software/openGauss/script

  5. ./gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/cluster_config.xml --sep-env-file=/home/omm/env

  6. su - omm

  7. source /home/omm/env
  8. gs_install -X /opt/software/openGauss/cluster_config.xml ```

参数解释:

  • sep-env-file 分离环境变量,参数取值是一个安装用户omm可以访问到的文件目录
  • omm 操作系统用户
  • dbgrp 操作系统用户属组

第四步: 查询主集群状态。

建立容灾关系之后就是主集群,未建立容灾关系之前还是资源池化单集群。

``` [huawei@node1 dn_6001]$ cm_ctl query -Cvidp [ CMServer State ]

## node node_ip instance state

1 node1 10.0.0.10 1 /opt/huawei/install/cm/cm_server Primary 2 node2 10.0.0.20 2 /opt/huawei/install/cm/cm_server Standby

1. [ Defined Resource State ]

3. node           node_ip         res_name instance  state
4. ---------------------------------------------------------
5. 1  node1 10.0.0.10   dms_res  6001      OnLine
6. 2  node2 10.0.0.20   dms_res  6002      OnLine
7. 1  node1 10.0.0.10   dss      20001     OnLine
8. 2  node2 10.0.0.20   dss      20002     OnLine

10. [   Cluster State   ]

12. cluster_state   : Normal
13. redistributing  : No
14. balanced        : Yes
15. current_az      : AZ_ALL

17. [  Datanode State   ]

19. node           node_ip         instance                             state            | node           node_ip         instance                             state
20. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
21. 1  node1 10.0.0.10   6001 25400  /opt/huawei/install/data/dn P Primary Normal | 2  node2 10.0.0.20   6002 25400  /opt/huawei/install/data/dn S Standby Normal
22. ```

24. 第五步: 在备存储上准备lun和xml文件。同第1步和第2步一样。

26. `Tips`: 用户需要修改节点名称、节点IP、目录、盘符、端口号

28. 第六步: 在备存储上执行如下操作安装部署备集群,安装用户omm。

30. 简化步骤如下:

32. ```
33. su - root
34. mkdir -p /opt/software/openGauss
35. chmod 755 -R /opt/software
36. 将下载的安装包放置/opt/software/openGauss目录下

38. cd /opt/software/openGauss
39. tar -zxvf openGauss-All-x.x.x-openEuler20.03-x86_64.tar.gz
40. tar -zxvf openGauss-OM-x.x.x-openEuler20.03-x86_64.tar.gz

42. cd /opt/software/openGauss/script
43. gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/cluster_config.xml --sep-env-file=/home/omm/env

45. su - omm
46. gs_install -X /opt/software/openGauss/cluster_config.xml
47. ```

49. 第七步: 查询备存储上集群(建立容灾关系之后就是备集群)状态。

51. ```
52. 建立容灾关系之后就是备集群,未建立容灾关系之前还是资源池化单集群。
53. [omm@node1 dn_6001]$ cm_ctl query -Cvidp
54. [  CMServer State   ]

56. node           node_ip         instance                           state
57. -------------------------------------------------------------------------
58. 1  node1 20.0.0.10   1    /opt/huawei/install/cm/cm_server Primary
59. 2  node2 20.0.0.20   2    /opt/huawei/install/cm/cm_server Standby

62. [ Defined Resource State ]

64. node           node_ip         res_name instance  state
65. ---------------------------------------------------------
66. 1  node1 20.0.0.10   dms_res  6001      OnLine
67. 2  node2 20.0.0.20   dms_res  6002      OnLine
68. 1  node1 20.0.0.10   dss      20001     OnLine
69. 2  node2 20.0.0.20   dss      20002     OnLine

71. [   Cluster State   ]

73. cluster_state   : Normal
74. redistributing  : No
75. balanced        : Yes
76. current_az      : AZ_ALL

78. [  Datanode State   ]

80. node           node_ip         instance                             state            | node           node_ip         instance                             state
81. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
82. 1  node1 20.0.0.10   6001 25400  /opt/huawei/install/data/dn P Primary Normal | 2  node2 20.0.0.20   6002 25400  /opt/huawei/install/data/dn S Standby Normal
83. ```

85. 第八步: 停止主集群,配置容灾参数,重新拉起主集群

87. ```
88. cm_ctl stop

90. 主节点
91. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "application_name = 'dn_master_0'"
92. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "ss_disaster_mode = dorado"
93. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo1='localhost=10.0.0.10 localport=25400 remotehost=20.0.0.10 remoteport=25400'"
94. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo2='localhost=10.0.0.10 localport=25400 remotehost=20.0.0.20 remoteport=25400'"
95. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "ha_module_debug = off"

97. gs_guc set -N node1 -D /opt/mpp/install/data/dn -h "host    all             all             20.0.0.10/32        trust"
98. gs_guc set -N node1 -D /opt/mpp/install/data/dn -h "host    all             all             20.0.0.20/32        trust"

100. 在$DSS_HOME/cfg/dss_inst.ini文件中修改
101. STORAGE_MODE=SHARE_DISK --> STORAGE_MODE=CLUSTER_RAID

103. 备节点
104. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "application_name = 'dn_master_1'"
105. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "ss_disaster_mode = dorado"
106. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo1='localhost=10.0.0.20 localport=25400 remotehost=20.0.0.10 remoteport=25400'"
107. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo2='localhost=10.0.0.20 localport=25400 remotehost=20.0.0.20 remoteport=25400'"
108. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "ha_module_debug = off"

110. gs_guc set -N node2 -D /opt/mpp/install/data/dn -h "host    all             all             20.0.0.10/32        trust"
111. gs_guc set -N node2 -D /opt/mpp/install/data/dn -h "host    all             all             20.0.0.20/32        trust"

113. 在$DSS_HOME/cfg/dss_inst.ini文件中修改
114. STORAGE_MODE=SHARE_DISK --> STORAGE_MODE=CLUSTER_RAID

116. 设置主集群cm参数
117. cm_ctl set --param --agent -k ss_double_cluster_mode=1
118. cm_ctl set --param --server -k ss_double_cluster_mode=1

120. 启动主集群
121. cm_ctl start
122. ```

124. 参数解释:

126. -   cross\_cluster\_replconninfo 主备集群建立连接信息,localport为数据库HA端口(上述示例用的xml里的dataPortBase,当开启线程池enable\_thread\_pool时,需配置为实际HAPort)

128. `Tips`: gs\_guc为openGauss提供的修改配置文件工具,也可以通过直接打开/opt/huawei/install/data/dn($PGDATA)下的postgresql.conf与pg\_hba.conf文件将上面双引号中的内容手动写入文件中。

130. 第九步: 停止备存储上的资源池化单集群(建立容灾关系之后就是备集群),配置容灾参数

132. ```
133. cm_ctl stop

135. 主节点
136. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "application_name = 'dn_standby_0'"
137. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "ss_disaster_mode = dorado"
138. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo1='localhost=20.0.0.10 localport=25400 remotehost=10.0.0.10 remoteport=25400'"
139. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo2='localhost=20.0.0.10 localport=25400 remotehost=10.0.0.20 remoteport=25400'"
140. gs_guc set -N node1 -D /opt/mpp/install/data/dn -c "ha_module_debug = off"

142. gs_guc set -N node1 -D /opt/mpp/install/data/dn -h "host    all             all             10.0.0.10/32        trust"
143. gs_guc set -N node1 -D /opt/mpp/install/data/dn -h "host    all             all             10.0.0.20/32        trust"

145. 在$DSS_HOME/cfg/dss_inst.ini文件中修改
146. STORAGE_MODE=SHARE_DISK --> STORAGE_MODE=CLUSTER_RAID

148. 备节点
149. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "application_name = 'dn_standby_1'"
150. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "ss_disaster_mode = dorado"
151. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo1='localhost=20.0.0.20 localport=25400 remotehost=10.0.0.10 remoteport=25400'"
152. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "cross_cluster_replconninfo2='localhost=20.0.0.20 localport=25400 remotehost=10.0.0.20 remoteport=25400'"
153. gs_guc set -N node2 -D /opt/mpp/install/data/dn -c "ha_module_debug = off"

155. gs_guc set -N node2 -D /opt/mpp/install/data/dn -h "host    all             all             10.0.0.10/32        trust"
156. gs_guc set -N node2 -D /opt/mpp/install/data/dn -h "host    all             all             10.0.0.20/32        trust"

158. 在$DSS_HOME/cfg/dss_inst.ini文件中修改
159. STORAGE_MODE=SHARE_DISK --> STORAGE_MODE=CLUSTER_RAID
160. ```

162. 第十步: 拉起首备dssserver,执行build

164. ```
165. export DSS_MAINTAIN=TRUE                                                        // 打开dss手动模式
166. dssserver -D /opt/huawei/install/dss_home &                                     // 拉起dssserver,-D 指定$DSS_HOME
167. gs_ctl build -D /opt/huawei/install/data/dn -b cross_cluster_full -q
168. dsscmd stopdss                                                                  // 停止手动模式的dssserver
169. export DSS_MAINTAIN=FALSE

171. `Tips`: build必须需要加-q,指build成功后不拉起数据库。
172. ```

174. 第十一步: 配置备集群cm参数,重新拉起备集群

176. ```
177. cm_ctl set --param --agent -k ss_double_cluster_mode=2
178. cm_ctl set --param --server -k ss_double_cluster_mode=2
179. 在$DSS_HOME/cfg/dss_inst.ini文件中增加一行(备集群所有节点都需要修改,dsscmd setcfg需要dssserver在线,所以这里手动修改)
180. CLUSTER_RUN_MODE=cluster_standby

182. 切换同步复制关系 分裂改为同步(非常关键)

184. cm_ctl start
185. ```

187. 补充说明:

189. -   这里的切换同步复制关系步骤是非常关键的,这一步需要登录主集群DeviceManager去进行,选择**数据保护-&gt;LUN-&gt;远程复制Pair**,点击之前创建好的远程复制Pair,通过**操作-&gt;同步**将同步复制关系改为同步。

191. 第十二步: 查询集群状态

193. ```
194. 主集群使用cm_ctl query -Cvidp查询出来同第七步一样
195. 备集群查询结果如下,备集群节点0从没有建立容灾关系时的primary变成建立容灾关系之后的Main Standby

197. [mpp@node2 dn_6002]$ cm_ctl query -Cvidp
198. [  CMServer State   ]

200. node           node_ip         instance                           state
201. -------------------------------------------------------------------------
202. 1  node1 20.0.0.10   1    /opt/huawei/install/cm/cm_server Primary
203. 2  node2 20.0.0.20   2    /opt/huawei/install/cm/cm_server Standby

206. [ Defined Resource State ]

208. node           node_ip         res_name instance  state
209. ---------------------------------------------------------
210. 1  node1 20.0.0.10   dms_res  6001      OnLine
211. 2  node2 20.0.0.20   dms_res  6002      OnLine
212. 1  node1 20.0.0.10   dss      20001     OnLine
213. 2  node2 20.0.0.20   dss      20002     OnLine

215. [   Cluster State   ]

217. cluster_state   : Normal
218. redistributing  : No
219. balanced        : Yes
220. current_az      : AZ_ALL

222. [  Datanode State   ]

224. node           node_ip         instance                             state            | node           node_ip         instance                             state
225. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
226. 1  node1 20.0.0.10   6001 25400  /opt/huawei/install/data/dn P Main Standby Normal | 2  node2 20.0.0.20   6002 25400  /opt/huawei/install/data/dn S Standby Normal
227. ```

229. 第十三步: 在主集群主机和备集群首备执行查询,可观察到流复制信息

231. ```
232. 主集群主节点0
233. [omm@node1 dn]$ gs_ctl query -D /opt/huawei/install/data/dn
234. [2023-04-18 09:38:34.397][1498175][][gs_ctl]: gs_ctl query ,datadir is /opt/huawei/install/data/dn
235. HA state:
236. local_role                     : Primary
237. static_connections             : 2
238. db_state                       : Normal
239. detail_information             : Normal

241. Senders info:
242. sender_pid                     : 1456376
243. local_role                     : Primary
244. peer_role                      : StandbyCluster_Standby
245. peer_state                     : Normal
246. state                          : Streaming
247. sender_sent_location           : 2/5C8
248. sender_write_location          : 2/5C8
249. sender_flush_location          : 2/5C8
250. sender_replay_location         : 2/5C8
251. receiver_received_location     : 2/5C8
252. receiver_write_location        : 2/5C8
253. receiver_flush_location        : 2/5C8
254. receiver_replay_location       : 2/5C8
255. sync_percent                   : 100%
256. sync_state                     : Async
257. sync_priority                  : 0
258. sync_most_available            : Off
259. channel                        : 10.0.0.10:25400-->20.0.0.10:43350

261. Receiver info:
262. No information

264. 备集群首备节点0
265. [omm@nodename pg_log]$ gs_ctl query -D /opt/huawei/install/data/dn
266. [2023-04-18 11:33:09.288][2760315][][gs_ctl]: gs_ctl query ,datadir is /opt/huawei/install/data/dn
267. HA state:
268. local_role                     : Main Standby
269. static_connections             : 2
270. db_state                       : Normal
271. detail_information             : Normal

273. Senders info:
274. No information
275. Receiver info:
276. receiver_pid                   : 1901181
277. local_role                     : Standby
278. peer_role                      : Primary
279. peer_state                     : Normal
280. state                          : Normal
281. sender_sent_location           : 2/5C8
282. sender_write_location          : 2/5C8
283. sender_flush_location          : 2/5C8
284. sender_replay_location         : 2/5C8
285. receiver_received_location     : 2/5C8
286. receiver_write_location        : 2/5C8
287. receiver_flush_location        : 2/5C8
288. receiver_replay_location       : 2/5C8
289. sync_percent                   : 100%
290. channel                        : 20.0.0.10:43350<--10.0.0.10:25400
291. ```

293. 第十四步:集群如何切换主备关系

295. ```
296. 1. 停止主集群(如果无法停止则跳过这一步)

298. 2. 在deveice manage上调整同步pair:1.分裂,2.取消从资源保护,3.反转同步方向

300. 3. 在原备集群所有节点上修改dss参数
301. dsscmd setcfg -n CLUSTER_RUN_MODE -v cluster_primary

303. 4. 在原备集群首备节点上修改cm参数
304. cm_ctl set --param --agent -k ss_double_cluster_mode=1
305. cm_ctl set --param --server -k ss_double_cluster_mode=1
306. cm_ctl reload --param --agent
307. cm_ctl reload --param --server

309. 5. 在原备集群首备节点执行
310. gs_ctl failover [-D $PGDATA]

312. 6. 等待升主完成后可以利用cm_ctl query -Cvipd查询新主集群状态(若原主集群已损坏,至此结束)

314. 7. 在原主集群全量build(预期内切换可跳过)
315. export DSS_MAINTAIN=TRUE
316. dssserver -D /opt/huawei/install/dss_home &
317. gs_ctl build -b cross_cluster_full -q
318. dsscmd stopdss
319. export DSS_MAINTAIN=FALSE

321. 8. 在原主集群所有节点上修改dss参数
322. 在$DSS_HOME/cfg/dss_inst.ini文件中调整
323. CLUSTER_RUN_MODE=cluster_standby

325. 9. 在原主集群主节点上修改cm参数
326. cm_ctl set --param --agent -k ss_double_cluster_mode=2
327. cm_ctl set --param --server -k ss_double_cluster_mode=2

329. 10. 在deveice manage上调整同步pair:1.启用从资源保护,2.同步

331. 11. 启动新备集群
332. cm_ctl start
333. ```

常见问题

一. 双集群如何扩容

数据盘可以直接通过dsscmd adv扩容,xlog盘需要通过以下步骤:

  1. 停止备集群
  2. 同时在主备集群准备一块同样大小的lun建立远程同步关系,并使其对数据库暴露的盘符一致,详见本文档第一步
  3. 将原本的xlog pair与我们新增的pair分裂,取消从资源保护
  4. 主集群通过在线dsscmd adv扩容
  5. 备集群通过离线dsscmd adv扩容
  6. 将两个pair都进行同步,均同步完成后启动备集群即可

二. 双集群如何容灾解除、容灾搭建

需要使用gs_ddr工具来进行,相关具体操作命令请参考gs_ddr

三. 双集群如何卸载

主集群、备集群均执行gs_uninstall —delete-data命令即可,具体操作命令详情请参考gs_uninstall