武进建设局网站首页网上购物商城排名
武进建设局网站首页,网上购物商城排名,wordpress一行多图片,网站开发技术服务协议从零到一#xff1a;在Linux上构建达梦DM8 DSC高可用数据库集群的实战指南
如果你正在为关键业务系统寻找一个稳定、高性能且具备国产化属性的数据库高可用方案#xff0c;那么达梦数据库的DSC集群很可能已经进入了你的视野。与传统的单机或主备模式不同#xff0c;DSC集群允…从零到一在Linux上构建达梦DM8 DSC高可用数据库集群的实战指南如果你正在为关键业务系统寻找一个稳定、高性能且具备国产化属性的数据库高可用方案那么达梦数据库的DSC集群很可能已经进入了你的视野。与传统的单机或主备模式不同DSC集群允许多个数据库实例同时读写同一份数据这不仅意味着更高的吞吐量和更低的单点故障风险也代表着更复杂的部署与运维挑战。对于许多初次接触DSC的技术人员来说面对一堆陌生的概念和繁复的配置文件难免会感到无从下手。这篇文章正是为你准备的。我们将抛开晦涩的理论手册从一个实战者的视角出发手把手地带你走完在Linux环境下搭建一套DM8 DSC集群的全过程。我会分享在真实部署中容易踩到的“坑”以及如何通过清晰的步骤和配置来规避它们。无论你是为中小型企业构建核心业务数据库还是希望深入理解国产数据库集群技术这篇指南都将提供一条清晰的路径。1. 理解DSC集群架构核心与部署前思考在动手敲下第一行命令之前花点时间理解DSC集群的运作机理至关重要。这能帮助你在后续配置时“知其然更知其所以然”尤其在排查故障时清晰的架构认知能让你快速定位问题根源。达梦DSC集群是一种多实例、单数据库的共享存储架构。想象一下有两台甚至多台服务器我们称之为节点它们像一支训练有素的队伍共同管理和服务同一个数据库。这个数据库的所有数据文件、控制文件都存放在一套所有节点都能访问的共享存储上而每个节点又有自己独立的内存结构和日志体系。这种设计带来了两大核心优势负载均衡和高可用性。应用可以连接到任意一个活跃的实例进行读写操作当一个节点故障时其他节点可以无缝接管其工作业务中断时间极短。整个集群的协调工作依赖于几个关键服务与组件DMCSS集群同步服务是集群的“总指挥”负责节点的启动、退出、故障处理和重加入等集群生命周期管理。DMASM达梦自动存储管理你可以把它理解为一个专为达梦优化的“集群文件系统”它管理着共享存储上的裸设备简化了存储空间的分配与管理。在生产环境中强烈推荐使用DMASM而非直接使用裸设备。DCR集群注册表它像集群的“户口本”记录了所有节点、实例、服务的配置信息必须存放在共享存储上。表决磁盘用于节点间心跳检测和故障仲裁当网络出现“脑裂”时它帮助决定哪个节点应该继续留在集群内。为了让你对组件间的关系有更直观的认识可以参考下面的简要交互表组件主要作用存储位置关键依赖DMCSS集群控制与协调各节点本地依赖DCR获取配置DMASM管理共享存储空间各节点本地运行依赖MAL链路进行节点间通信DCR存储集群元数据共享存储裸设备集群所有节点可访问表决磁盘心跳与故障仲裁共享存储裸设备集群所有节点可访问数据库实例提供数据库服务各节点本地进程依赖DMASM访问共享数据文件提示在规划阶段务必确保网络质量。节点间的MAL通信链路用于DMASM和数据库实例间通信以及DMCSS的心跳网络建议使用万兆网络并做物理隔离以避免公网流量干扰导致误判节点故障。理解了这些我们的部署思路就清晰了先搭建稳定的共享存储和网络基础然后初始化集群管理所需的DCR和表决磁盘接着配置并启动DMASM来管理存储空间最后在各个节点上创建数据库实例并纳入集群管理。下面我们就从环境准备开始。2. 基础环境搭建存储、网络与系统配置一个稳固的地基是高楼大厦的前提。对于DSC集群而言这个地基就是共享存储、网络和操作系统环境。我们以两个节点NodeA和NodeB的典型测试环境为例假设你已经准备好了两台满足基本性能要求的Linux服务器。第一步操作系统与用户准备在两台节点服务器上我们需要进行统一的系统配置。首先创建专用的操作系统用户和组这有利于权限管理和安全隔离。# 在两台节点上分别执行 groupadd -g 1000 dinstall useradd -u 1001 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo YourSecurePassword123! | passwd --stdin dmdba # 创建所需的目录结构并赋予权限 mkdir -p /dm8/{dmdbms,config,arch} chown -R dmdba:dinstall /dm8这里/dm8/dmdbms将用于安装数据库软件/dm8/config存放集群配置文件/dm8/arch用于存放归档日志生产环境建议每个节点使用独立路径如arch_1arch_2。第二步配置共享存储访问在生产环境中你会使用专业的SAN存储。在测试或概念验证环境中我们可以用一台独立的Linux服务器模拟iSCSI共享存储。假设存储服务器的IP是192.168.1.100并已经配置好iSCSI Target提供了两块LUN。在NodeA和NodeB上安装iSCSI Initiator并连接存储# 安装客户端工具 yum install -y iscsi-initiator-utils # 发现存储服务器上的目标 iscsiadm -m discovery -t st -p 192.168.1.100 # 登录并连接目标假设目标名为iqn.2023-08.com.example:storage.target iscsiadm -m node -T iqn.2023-08.com.example:storage.target -p 192.168.1.100 -l # 设置为开机自动连接 iscsiadm -m node -T iqn.2023-08.com.example:storage.target -p 192.168.1.100 --op update -n node.startup -v automatic连接成功后使用fdisk -l命令你应该能看到新的磁盘设备例如/dev/sdb和/dev/sdc。这些磁盘将在后续步骤中被初始化为集群所需的裸设备。第三步配置内核参数与资源限制为了确保数据库稳定运行需要调整一些Linux内核参数和用户资源限制。编辑/etc/sysctl.conf添加或修改以下行# 增加系统信号量、共享内存和端口范围限制 kernel.sem 50100 64128000 50100 1280 kernel.shmall 4294967296 kernel.shmmax 68719476736 kernel.shmmni 4096 fs.file-max 6815744 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.wmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_max 4194304执行sysctl -p使配置生效。接着编辑/etc/security/limits.conf为dmdba用户设置资源限制dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft stack 10240 dmdba hard stack 32768完成以上步骤后建议重启服务器以使所有配置完全生效。环境准备就绪后我们就可以开始安装数据库软件了。3. 数据库软件安装与DMASM存储初始化现在我们将在两个节点上安装达梦数据库软件并开始初始化集群最核心的共享存储部分——DCR、表决磁盘和DMASM磁盘。第一步安装DM8数据库软件在两个节点上以dmdba用户身份挂载DM8安装镜像并执行安装程序。安装过程是交互式的关键点在于选择正确的安装路径。# 切换到dmdba用户 su - dmdba # 挂载ISO镜像根据实际情况调整 mkdir -p /mnt/dm8 sudo mount -o loop /path/to/dm8_setup.iso /mnt/dm8 # 执行图形化或命令行安装 cd /mnt/dm8 ./DMInstall.bin -i在安装向导中选择“典型安装”并将安装路径设置为/dm8/dmdbms。非常重要的一点是在安装类型中只选择“安装数据库软件”不要创建数据库实例。集群的数据库实例我们将在后续步骤中统一初始化。第二步准备裸设备并绑定回到root用户我们需要将共享磁盘分区并绑定为裸设备以便DMASM使用。假设我们有两块共享磁盘/dev/sdb和/dev/sdc。我们规划sdb1(100MB): 用于DCRsdb2(100MB): 用于表决磁盘sdb3(20GB): 用于日志磁盘组sdb4(剩余空间): 用于数据磁盘组的一部分sdc1(整个磁盘): 用于数据磁盘组的另一部分使用fdisk或parted工具进行分区。完成后创建udev规则文件/etc/udev/rules.d/70-dm-raw.rules实现裸设备的自动绑定和权限设置ACTIONadd, KERNELsdb1, RUN/bin/raw /dev/raw/raw1 %N ACTIONadd, KERNELsdb2, RUN/bin/raw /dev/raw/raw2 %N ACTIONadd, KERNELsdb3, RUN/bin/raw /dev/raw/raw3 %N ACTIONadd, KERNELsdb4, RUN/bin/raw /dev/raw/raw4 %N ACTIONadd, KERNELsdc1, RUN/bin/raw /dev/raw/raw5 %N KERNELraw[1-5], OWNERdmdba, GROUPdinstall, MODE660执行udevadm trigger或重启服务器使规则生效。使用ls -l /dev/raw/raw*检查设备是否存在且权限正确。第三步配置并初始化DCR与表决磁盘切换到dmdba用户在任一节点如NodeA的/dm8/config目录下创建集群核心配置文件dmdcr_cfg.ini。这个文件定义了整个集群的拓扑结构。# /dm8/config/dmdcr_cfg.ini DCR_N_GRP 3 DCR_VTD_PATH /dev/raw/raw2 DCR_OGUID 45331 [GRP] DCR_GRP_TYPE CSS DCR_GRP_NAME GRP_CSS DCR_GRP_N_EP 2 DCR_GRP_DSKCHK_CNT 60 [GRP_CSS] DCR_EP_NAME CSS0 DCR_EP_HOST 192.168.1.101 DCR_EP_PORT 5336 [GRP_CSS] DCR_EP_NAME CSS1 DCR_EP_HOST 192.168.1.102 DCR_EP_PORT 5337 [GRP] DCR_GRP_TYPE ASM DCR_GRP_NAME GRP_ASM DCR_GRP_N_EP 2 DCR_GRP_DSKCHK_CNT 60 [GRP_ASM] DCR_EP_NAME ASM0 DCR_EP_SHM_KEY 93360 DCR_EP_SHM_SIZE 10 DCR_EP_HOST 192.168.1.101 DCR_EP_PORT 5436 DCR_EP_ASM_LOAD_PATH /dev/raw [GRP_ASM] DCR_EP_NAME ASM1 DCR_EP_SHM_KEY 93361 DCR_EP_SHM_SIZE 10 DCR_EP_HOST 192.168.1.102 DCR_EP_PORT 5437 DCR_EP_ASM_LOAD_PATH /dev/raw [GRP] DCR_GRP_TYPE DB DCR_GRP_NAME GRP_DSC DCR_GRP_N_EP 2 DCR_GRP_DSKCHK_CNT 60 [GRP_DSC] DCR_EP_NAME DSC0 DCR_EP_SEQNO 0 DCR_EP_PORT 5236 DCR_CHECK_PORT 5536 [GRP_DSC] DCR_EP_NAME DSC1 DCR_EP_SEQNO 1 DCR_EP_PORT 5236 DCR_CHECK_PORT 5537配置文件中的IP地址、端口和OGUID需要根据你的实际规划修改。接着使用dmasmcmd工具初始化DCR磁盘和表决磁盘cd /dm8/dmdbms/bin ./dmasmcmd # 在dmasmcmd交互界面中执行 create dcrdisk /dev/raw/raw1 dcr create votedisk /dev/raw/raw2 vote init dcrdisk /dev/raw/raw1 from /dm8/config/dmdcr_cfg.ini identified by 你的密码 init votedisk /dev/raw/raw2 from /dm8/config/dmdcr_cfg.ini至此集群的“大脑”和“心脏”就已经在共享存储上准备就绪了。4. 启动集群服务与初始化数据库实例基础打好后现在是启动各项集群服务并最终创建出数据库实例的时候了。这个过程需要严格按照顺序操作并密切观察日志输出。第一步配置节点服务文件并启动DMCSS和DMASMSVR首先在两个节点上分别创建相同的dmasvrmal.ini文件用于DMASM服务间的通信# /dm8/config/dmasvrmal.ini [MAL_INST0] MAL_INST_NAME ASM0 MAL_HOST 192.168.1.101 MAL_PORT 7236 [MAL_INST1] MAL_INST_NAME ASM1 MAL_HOST 192.168.1.102 MAL_PORT 7237然后创建每个节点自身的dmdcr.ini文件。注意两个节点的DMDCR_SEQNO必须不同例如0和1。# NodeA上的 /dm8/config/dmdcr.ini DMDCR_PATH /dev/raw/raw1 DMDCR_MAL_PATH /dm8/config/dmasvrmal.ini DMDCR_SEQNO 0 DMDCR_ASM_RESTART_INTERVAL 30 DMDCR_ASM_STARTUP_CMD /dm8/dmdbms/bin/dmasmsvr dcr_ini/dm8/config/dmdcr.ini DMDCR_DB_RESTART_INTERVAL 60 DMDCR_DB_STARTUP_CMD /dm8/dmdbms/bin/dmserver /dm8/dsc0_config/dm.ini dcr_ini/dm8/config/dmdcr.ini现在在两个节点上分别启动DMCSS和DMASMSVR服务。建议先在前台启动观察日志无报错后再放入后台。# 在NodeA上打开两个终端 cd /dm8/dmdbms/bin # 终端1启动DMCSS ./dmcss DCR_INI/dm8/config/dmdcr.ini # 终端2启动DMASMSVR ./dmasmsvr DCR_INI/dm8/config/dmdcr.ini # 在NodeB上执行同样的操作使用其自己的dmdcr.ini查看日志确认服务正常启动并且节点间建立了连接。第二步创建DMASM磁盘组在任一节点如NodeA使用dmasmtool工具将之前绑定的裸设备创建为DMASM磁盘组。cd /dm8/dmdbms/bin ./dmasmtool DCR_INI/dm8/config/dmdcr.ini # 在交互界面中执行 create diskgroup DMLOG asmdisk /dev/raw/raw3 create diskgroup DMDATA asmdisk /dev/raw/raw4 alter diskgroup DMDATA add asmdisk /dev/raw/raw5DMLOG磁盘组用于存放数据库的重做日志DMDATA用于存放数据文件。你可以使用list diskgroup命令来验证创建结果。第三步使用dminit初始化集群数据库这是最关键的一步。在任一节点上创建数据库初始化参数文件dminit.ini。# /dm8/config/dminit.ini db_name dscdb system_path DMDATA/data main DMDATA/data/dscdb/main.dbf main_size 256 roll DMDATA/data/dscdb/roll.dbf roll_size 256 system DMDATA/data/dscdb/system.dbf system_size 128 ctl_path DMDATA/data/dscdb/dm.ctl ctl_size 8 log_size 1024 dcr_path /dev/raw/raw1 dcr_seqno 0 auto_overwrite 1 PAGE_SIZE 32 CASE_SENSITIVE Y CHARSET 0 [DSC0] config_path /dm8/dsc0_config port_num 5236 mal_host 192.168.1.101 mal_port 5736 log_path DMLOG/log/dsc0_log01.log log_path DMLOG/log/dsc0_log02.log [DSC1] config_path /dm8/dsc1_config port_num 5236 mal_host 192.168.1.102 mal_port 5737 log_path DMLOG/log/dsc1_log01.log log_path DMLOG/log/dsc1_log02.log执行初始化命令cd /dm8/dmdbms/bin ./dminit control/dm8/config/dminit.ini初始化成功后会在当前节点的/dm8目录下生成dsc0_config和dsc1_config两个实例配置目录。你需要将dsc1_config目录完整地拷贝到NodeB节点的/dm8目录下。第四步启动数据库实例并验证现在可以在两个节点上分别启动各自的数据库实例了。# 在NodeA上 cd /dm8/dmdbms/bin ./dmserver /dm8/dsc0_config/dm.ini dcr_ini/dm8/config/dmdcr.ini # 在NodeB上 cd /dm8/dmdbms/bin ./dmserver /dm8/dsc1_config/dm.ini dcr_ini/dm8/config/dmdcr.ini观察启动日志确认两个实例都成功启动并加入了集群。你可以使用达梦的管理工具disql连接到任意一个实例如disql SYSDBA/SYSDBA192.168.1.101:5236执行select * from v$instance;和select * from v$dsc_ep_info;来查看集群实例状态。第五步注册系统服务可选但推荐测试无误后为了便于管理可以将DMCSS、DMASMSVR和数据库实例注册为系统服务。在每个节点上使用root身份执行cd /dm8/dmdbms/script/root # NodeA ./dm_service_installer.sh -t dmcss -dcr_ini /dm8/config/dmdcr.ini -p DSC0 ./dm_service_installer.sh -t dmasmsvr -dcr_ini /dm8/config/dmdcr.ini -y DmCSSServiceDSC0 -p DSC0 ./dm_service_installer.sh -t dmserver -dcr_ini /dm8/config/dmdcr.ini -dm_ini /dm8/dsc0_config/dm.ini -p DSC0 # NodeB注意修改-p参数和dm.ini路径 ./dm_service_installer.sh -t dmcss -dcr_ini /dm8/config/dmdcr.ini -p DSC1 ./dm_service_installer.sh -t dmasmsvr -dcr_ini /dm8/config/dmdcr.ini -y DmCSSServiceDSC1 -p DSC1 ./dm_service_installer.sh -t dmserver -dcr_ini /dm8/config/dmdcr.ini -dm_ini /dm8/dsc1_config/dm.ini -p DSC1注册后就可以使用systemctl start DmServiceDSC0这样的命令来启停服务了。最后别忘了在应用服务器上配置dm_svc.conf文件将两个实例的地址都列入连接串这样应用就能自动实现故障转移和负载均衡。例如# /etc/dm_svc.conf DSC_GROUP(192.168.1.101:5236, 192.168.1.102:5236)完成以上所有步骤一个具备高可用能力的达梦DM8 DSC集群就已经部署完成并可以投入使用了。整个过程中最需要耐心的是服务启动顺序和日志排查一旦理解了各个组件的作用和依赖关系部署就会变得有条不紊。