DMDSC 使用说明

DMDSC集群针对同一份数据,提供了多个活动的数据库实例,因此具有负载均衡、高可靠性等特征。但与单机系统相比,DMDSC具有更复杂的架构、更多的组件,因此对DMDSC集群的使用也提出了更高的要求。本章主要说明使用DMDSC集群的一些注意事项。

16.1 统一组件版本

搭建DMDSC环境时,应注意DMDSC中各实例使用的DM服务器版本应一致,同时还应注意各实例所在主机的操作系统位数、大小端模式、时区及时间设置都应一致。

此外,DMDSC集群包含dmcss/dmasmsvr/dmasmapi/dmserver等诸多组件,并且dmasmsvr和dmasmapi之间需要用到共享内存进行数据交换。因此,搭建和使用DMDSC集群时,要特别注意各个组件的版本号是否一致。是否同为32位或64位。如果各组件版本号不一致,可能会导致系统异常,无法正常使用。

16.2 提升DMDSC性能

DMDSC通过缓存交换和全局事务管理等机制,协调、管理多个节点的CPU、内存等计算资源,以提升数据库管理系统的事务处理能力。数据和信息需要在节点间通过网络频繁地进行传输,如果多个数据库实例过多地访问、修改相同的数据页,就会导致缓存交换频繁,内部网络流量过高,形成DMDSC集群的性能瓶颈。为了提升DMDSC集群的整体性能,建议:

1.使用带宽更大、速度更快的网络设备,降低数据和信息在节点之间传递的从网络延迟,比如使用InfiniBand或者万兆的以太网。

2.根据业务逻辑,把不同类别的数据库请求分别部署到不同的节点,减少不同节点对相同数据页或者数据库对象的共享访问、和修改。

3.优化应用逻辑和每一句SQL,DMDSC集群并不是解决性能问题的万能方案,未经优化、糟糕的SQL查询可能会极大降低数据库的吞吐量。

4.充分分析应用系统特征,以及性能瓶颈在哪里。比如一些IO密集型的应用系统,性能瓶颈往往出现在存储的IO上,这种情况下单纯地增加DMDSC节点数并不会提高性能,反而可能由于节点数增加,缓存交换更加频繁,进一步降低系统性能。针对这种情况,正确的选择是增加磁盘,将IO分散到更多的磁盘;或者使用速度更快的固态盘来提升IO性能。

5.使用’ALTER TABLE XXX WITHOUT COUNTER’语句,关闭频繁插入、删除记录表的快速计数功能。DM8默认开启表快速记录功能,系统动态维护表上的记录总数,并将记录数写入到表的控制页中;DMDSC环境开启这个功能,并且多个节点并发向同一张表插入记录时,控制页的访问权限在节点间不断地进行回收和授权,控制页的内容也会不断地在节点间进行传递,进而影响DMDSC整体的并发性能。

16.3 心跳说明

DMDSC集群中,DMCSS依赖心跳机制来判断集群中的各个实例是否处于正常状态。DMDSC集群支持磁盘心跳检测机制。

磁盘心跳的载体是共享存储上的Voting Disk,DMCSS、DMASMSVR、和dmserver启动后,每间隔1秒往Voting Disk各自固定的偏移写入时间戳,DMCSS定时读取Voting Disk信息,根据时间戳变化情况来判断被监控对象是否活动。实例故障认定时间取决于配置参数DCR_GRP_DSKCHK_CNT,一般建议DCR_GRP_DSKCHK_CNT至少配置为60秒以上,避免在系统极度繁忙情况下,由于操作系统调度原因导致误判实例故障。在规划DMDSC集群存储时,最好将Voting Disk与IO密集的数据库文件和日志文件分开存放,分别保存在不同的物理磁盘上,避免由于数据库IO影响心跳信息的写入和读取,导致极端情况下误判实例故障。

DMDSC集群中磁盘心跳检测失败,DMCSS会认为对应实例故障,启动故障处理流程。

16.4 重新格式化DMASM

DMASM文件系统格式是自描述的,DMASMSVR启动时会从指定路径扫描裸设备,根据裸设备的头信息判读是否是DMASM磁盘,进而获取DMASM磁盘组元数据信息,初始化DMASM文件系统。所以要求一套硬件环境只能搭建一套DMASM文件系统,否则会产生冲突,会导致dmasmsvr启动失败。如果要重新初始化DMASM文件系统,需要将指定路径下的所有裸设备头信息格式化一遍,避免新老环境DMASM磁盘信息冲突。

如果出现磁盘id相同导致dmasmsvr启动失败的情况,在可以确定某一磁盘为无效磁盘的情况下,用dmasmcmd工具执行create asmdisk disk_path name的方式清理无效磁盘信息。

16.5 重新初始化DMDSC库

dmserver发生异常的情况下,DMCSS会根据配置的心跳时间来确认节点故障,并写入故障信息到DCR Disk中,然后执行对应的故障处理或故障恢复。

对于dmserver节点全部故障的情况,如果想直接重新初始化数据库,则需要手动清理DCR Disk中的故障信息(DCR Disk没有重新初始化),避免DMCSS对新初始化的库再次执行故障处理。

注意手动清理的时机,需要在DMCSS写入故障信息到DCR Disk之后,否则手动清理完成后,DMCSS再写入故障信息(dmserver的心跳时间配置比较长时会出现这种情况),清理操作仍然起不到作用。

DMCSS手动清理之前,可通过下面三种方式避免DMCSS在清理之后再次修改DCR Disk中的故障信息:

  1. 等待配置的心跳时间之后,确保DMCSS已写入故障信息之后,再执行手动清理
  2. 确定dmserver确实故障时,通过监视器的ep halt命令,通知DMCSS写入故障信息,然后再执行手动清理
  3. 直接退出DMCSS,在手动清理完成之后再重启DMCSS

可使用以下两种方式对指定组的故障节点信息进行清理:

  1. 通过dmasmcmd的export命令,将DCR Disk的配置信息导出,手动修改dmserver对应组中的DCR_GRP_N_ERR_EP值为0,DCR_GRP_ERR_EP_ARR内容为空,则通过asmcmd的import命令导入到DCR Disk中
  2. 通过dmasmcmd的clear命令,直接清理指定组的故障节点信息

命令的具体用法请参考6.6 DMASMCMD的用法说明。

16.6 内部网络异常

DMDSC环境多个dmserver之间的很多功能都通过MAL系统来传递控制命令或数据(事务管理、封锁管理等等,详见4.DMDSC实现原理)。如果网络故障导致dmserver间MAL通讯失败,出现MAL邮件丢失等情况,会导致dmserver一直收不到请求响应,整个系统卡住。

遇到这种情况,dmserver会通过Voting Disk通知DMCSSMAL链路故障。两节点实例中,由DMCSS挑选出节点号大的dmserver强制其主动HALT退出,保留节点号小的dmserver。例如,0,1两节点,会杀掉1号节点。对于两节点实例来说,接下来进行故障处理,将DMDSC集群恢复为单节点,尽快对外提供数据库服务。如果多节点实例中,需要根据网络联通状态来进一步判断,最终保留节点数比较多的组。

由于dmserver的这种主动通知机制,DMDSC系统可能会比MAL_CONN_FAIL_INTERVAL和MAL_CHECK_INTERVAL设置值更早发现内部网络故障,从而进行处理。

16.7 创建DBLink

DMDSC系统可支持DBLink的创建和访问。DMDSC系统和单节点之间、DMDSC和DMDSC系统之间都支持DBLink的创建,由于同构的DBLink之间依赖于MAL系统,只需要通过配置dmmal.ini文件即可实现。将每个实例mal项都加入dmmal.ini文件,并拷贝到每个实例目录下,即可创建DBLink。

DMDSC和单节点的DBLink配置,需在DSC节点的dmmal.ini中加入单节点mal项,同时复制到单节点,打开单节点的MAL配置,全部实例重新启动后即可创建DBLink。

举例如下:

[MAL_INST1]
MAL_INST_NAME = DSC01
MAL_HOST = 10.0.2.101
MAL_PORT = 7236
MAL_INST_HOST = 192.168.0.101
MAL_INST_PORT = 5336
MAL_LINK_MAGIC = 0
[MAL_INST2]
MAL_INST_NAME = DSC02
MAL_HOST = 10.0.2.102
MAL_PORT = 7237
MAL_INST_HOST = 192.168.0.102
MAL_INST_PORT = 5336
MAL_LINK_MAGIC = 0
[MAL_INST3] ##单节点的配置项
MAL_INST_NAME = EP01
MAL_HOST = 10.0.2.103
MAL_PORT = 7238
MAL_INST_HOST = 192.168.0.103
MAL_INST_PORT = 5336
MAL_LINK_MAGIC = 0

两个DMDSC系统之间也类似,需在一套DMDSC的dmmal.ini中加入另一套的dmmal.ini内容,并拷贝到两套DSC系统的所有实例。

举例如下:

[MAL_INST1]
MAL_INST_NAME              = DSC011
MAL_HOST                   = 10.0.2.101
MAL_PORT                   = 7236
MAL_INST_HOST              = 192.168.0.101
MAL_INST_PORT              = 5336
MAL_LINK_MAGIC             = 0
[MAL_INST2]
MAL_INST_NAME              = DSC012
MAL_HOST                   = 10.0.2.102
MAL_PORT                   = 7237
MAL_INST_HOST              = 192.168.0.102
MAL_INST_PORT              = 5337
MAL_LINK_MAGIC             = 0

##另一套DSC系统
[MAL_INST3]
MAL_INST_NAME              = DSC021
MAL_HOST                   = 10.0.2.102
MAL_PORT                   = 7238
MAL_INST_HOST              = 192.168.0.102
MAL_INST_PORT              = 5338
MAL_LINK_MAGIC             = 0
[MAL_INST4]
MAL_INST_NAME              = DSC022
MAL_HOST                   = 10.0.2.101
MAL_PORT                   = 7239
MAL_INST_HOST              = 192.168.0.101
MAL_INST_PORT              = 5339
MAL_LINK_MAGIC             = 0

某些应用场景下,DBLINK需要跨网段访问数据库实例,我们只要根据实际情况,修改MAL配置参数,将处于相同网段实例的MAL_LINK_MAGIC配置为相同的值,不同网段实例的MAL_LINK_MAGIC配置为不同的值,就可以实现跨网段访问。详情可参考《DM8系统管理员手册》dmmal.ini配置章节。

16.8 节点硬件故障,如何启动DMDSC集群

正常的DMDSC集群启动流程,dmcss会在监控到所有节点都启动后,再执行正常的数据库启动流程。当某个节点出现硬件故障无法启动时,DMDSC集群无法自动启动。针对这种情况,dmcssm监视器提供了open force命令,通知dmcss将未启动节点设置为故障状态,强制启动活动节点,以尽快恢复数据库服务。

16.9 MOUNT/OPEN操作

登录DSC下任意节点都可以执行MOUNT/OPEN操作,仅在登录节点生效,如果需要所有节点都MOUNT或者OPEN,需要登录所有节点执行命令。

16.10 裸设备路径变化

基于DMASM的DMDSC在运行过程中,如果磁盘重新进行规划,可能会导致磁盘对应的裸设备名有变化,从而导致DMASM环境配置可能也需要进行改变。

DMASM文件系统是自描述系统,会自动扫描/dev/raw/下的所有裸设备,根据头信息来获取信息,和裸设备名路径没有关系。只是DCR和Voting磁盘的路径必须指定,若这两个路径没有变化,可以不用修改DMASM环境配置。

如果DCR和Voting磁盘的路径发生了改变,则需要用dmasmcmd工具重新格式化DCR和Voting磁盘,不会影响其他DMASM磁盘,也不影响已经存在的DMASM文件。格式化后需要对DCR和Voting磁盘进行初始化:

  • 如果保存了原始的dmdcr_cfg.ini文件,修改dmdcr_cfg.ini的DCR_VTD_PATH路径信息,再用dmasmcmd工具初始化就可以;
  • 如果没有保存原始dmdcr_cfg.ini文件,可以用dmasmcmd工具先export出一份dmdcr_cfg.ini文件,再修改其中DCR_VTD_PATH路径信息,然后重新初始化。
微信扫码
分享文档
扫一扫
联系客服