| 角色 | 主机名 | IP 地址 |
|---|---|---|
| 主库 | dm1 | 192.168.234.21 |
| 备库 | dm2 | 192.168.234.22 |
| 监视器 | dm3 | 192.168.234.23 |
| 项目 | 配置 |
|---|---|
| 操作系统 | CentOS 7.9 |
| CPU | Intel Core i9-13900HX,2 核 |
| 内存 | 4 GB |
| 用途 | 路径 |
|---|---|
| 数据根目录 | /dmdata/ |
| 数据库软件目录 | /home/dmdba/dmdbms |
| 实例数据目录 | /dmdata/data/DAMENG |
| 归档目录 | /dmdata/arch |
| 备份目录 | /dmdata/dmbak |
| 用途 | 端口 | 说明 |
|---|---|---|
| 数据库服务 | 5236 | PORT_NUM |
| MAL 通信 | 5336 | MAL_PORT |
| 守护进程通信 | 5436 | MAL_DW_PORT |
| 实例与守护进程通信 | 5536 | MAL_INST_DW_PORT |
以上端口以当前配置为例,部署前需确认未被其他进程占用,并按实际网络策略开放。
以下系统配置需要在三台主机上按需完成。
查看状态:
systemctl status firewalld
本次实验选择关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
生产环境应根据实际端口规划配置防火墙规则,不建议直接关闭防火墙。
查看状态:
getenforce
临时切换为宽松模式:
setenforce 0
如需永久禁用,编辑 /etc/selinux/config:
SELINUX=disabled
修改后需重启系统生效。
创建服务文件:
cat > /etc/systemd/system/disable-thp.service <<'EOF'
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled; echo never > /sys/kernel/mm/transparent_hugepage/defrag"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
加载配置并启用:
systemctl daemon-reload
systemctl enable --now disable-thp
检查设置:
cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag
查看当前值:
cat /proc/sys/vm/overcommit_memory
本次实验设置为 0:
sysctl -w vm.overcommit_memory=0
如需持久化,在 /etc/sysctl.conf 中增加:
vm.overcommit_memory = 0
应用配置:
sysctl -p
检查当前配置:
grep -vE '^\s*#|^\s*$' /etc/security/limits.conf
按部署要求,为 dmdba 配置以下限制:
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
修改后重新登录 dmdba 用户,使配置生效。
本次实验使用 chronyd 同步节点时间。请根据实际网络配置时间服务器,并确保相关网络端口可达。
在时间服务器节点编辑 /etc/chrony.conf,按需配置:
allow all
local stratum 10
rtcsync
在其他节点配置时间服务器地址,例如:
server 192.168.234.21 iburst prefer
makestep 1.0 3
rtcsync
重启服务并检查同步状态:
systemctl restart chronyd chronyc tracking
在需要部署 DM8 的主机上执行:
groupadd -g 2001 dinstall useradd -u 1001 -g dinstall dmdba passwd dmdba
如果用户或用户组已经存在,请先检查现有配置,不要重复创建。
mkdir -p /dmdata/{data,arch,dmbak} chown -R dmdba:dinstall /dmdata/{data,arch,dmbak} chmod -R 755 /dmdata/{data,arch,dmbak}
三台主机均需安装 DM8 软件。
将安装介质挂载到系统,并确认安装文件可访问。切换至 dmdba 用户,进入安装介质目录执行:
./DMInstall.bin -i
本次安装选项如下:
| 项目 | 选择 |
|---|---|
| 安装语言 | 简体中文 |
| Key 文件 | 未指定,按实验环境选择 |
| 时区 | 中国标准时间(GTM+08:00) |
| 安装类型 | 典型安装 |
| 软件目录 | /home/dmdba/dmdbms |
安装完成后,以 root 用户执行:
/home/dmdba/dmdbms/script/root/root_installer.sh
检查 DMAP 服务:
systemctl status DmAPService
在 /home/dmdba/.bash_profile 中配置相应环境变量。若已设置 DM_HOME,可增加:
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
使配置生效并检查工具路径:
source /home/dmdba/.bash_profile
echo "$DM_HOME"
which dminit
which disql
本节先完成主库初始化、归档和 DW 所需参数配置,再执行全量备份。这样备库恢复时使用的是完成基础配置后的备份。
以 dmdba 用户执行:
dminit PATH=/dmdata/data/ INSTANCE_NAME=node_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD='<SYSDBA密码>' SYSAUDITOR_PWD='<SYSAUDITOR密码>'
初始化完成后,主库配置文件为:
/dmdata/data/DAMENG/dm.ini
前台启动实例:
dmserver /dmdata/data/DAMENG/dm.ini
通过 disql 连接后,配置并启用本地归档:
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;
确认数据库正常打开,且本地归档配置符合预期。
dm.ini 参数通过 disql 设置参数:
SP_SET_PARA_VALUE(2, 'PORT_NUM', 5236); SP_SET_PARA_VALUE(2, 'DW_INACTIVE_INTERVAL', 60); SP_SET_PARA_VALUE(2, 'ALTER_MODE_STATUS', 0); SP_SET_PARA_VALUE(2, 'ENABLE_OFFLINE_TS', 2); SP_SET_PARA_VALUE(2, 'MAL_INI', 1); SP_SET_PARA_VALUE(2, 'ARCH_INI', 1); SP_SET_PARA_VALUE(2, 'RLOG_SEND_APPLY_MON', 64);
dmarch.ini编辑:
vi /dmdata/data/DAMENG/dmarch.ini
配置示例:
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = node_02
ARCHIVE_LOCAL 为本地归档配置;ARCHIVE_REALTIME1 指向备库实例 node_02。请确认配置与当前 DM8 版本及实际主备规划一致。
dmmal.ini编辑:
vi /dmdata/data/DAMENG/dmmal.ini
示例配置如下。IP 地址必须按实际环境修改:
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /dmdata/data/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0
[MAL_INST1]
MAL_INST_NAME = node_01
MAL_HOST = 192.168.234.21
MAL_PORT = 5336
MAL_INST_HOST = 192.168.234.21
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST2]
MAL_INST_NAME = node_02
MAL_HOST = 192.168.234.22
MAL_PORT = 5336
MAL_INST_HOST = 192.168.234.22
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
确保临时目录存在且 dmdba 有权限:
mkdir -p /dmdata/data/malpath chown -R dmdba:dinstall /dmdata/data/malpath
dmwatcher.ini编辑:
vi /dmdata/data/DAMENG/dmwatcher.ini
配置示例:
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /dmdata/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
以 root 用户执行:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p node_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
在备份前,确认:
dm.ini 中 MAL_INI=1、ARCH_INI=1 等参数已正确写入;dmarch.ini、dmmal.ini、dmwatcher.ini 已按规划配置;执行全量备份:
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/BACKUP_FILE';
确认备份集生成且备份成功,再将备份文件传输到备库。
在 B 节点(node_02)以 dmdba 用户执行:
dminit PATH=/dmdata/data/ INSTANCE_NAME=node_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD='<与主库一致的SYSDBA密码>' SYSAUDITOR_PWD='<SYSAUDITOR密码>'
备库初始化后将使用主库备份覆盖并恢复数据库文件。执行恢复前请确认路径和目标实例正确,避免覆盖错误的数据目录。
在 B 节点执行,源 IP 按实际主库地址修改:
scp dmdba@192.168.234.21:/dmdata/dmbak/BACKUP_FILE /dmdata/dmbak/
确认备份集已完整传输,并由 dmdba 用户具备访问权限。
在 B 节点执行:
dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'"
dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
确认各步骤均成功结束后,再进行备库参数配置。
dm.ini检查并调整 /dmdata/data/DAMENG/dm.ini,确保至少包含以下配置:
INSTANCE_NAME = node_02
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
特别注意:MAL_INI 和 ARCH_INI 必须为 1。本次排障时,B 节点这两个参数实际为 0,导致守护服务启动时报错:
dm.ini has not configured arch_ini or mal_ini!
fail to read ini file
修改后核对文件中的实际值,并在需要时重启数据库实例后再启动守护服务。
dmarch.ini编辑:
vi /dmdata/data/DAMENG/dmarch.ini
示例:
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = node_01
备库实时归档目标应指向主库 node_01。
dmmal.ini备库 dmmal.ini 应与主库使用相同的 MAL 集群视图,即均包含 node_01 和 node_02 两个实例,并且两端的实例名、IP 和端口映射一致。请将第 5.5 节配置按实际 IP 写入 B 节点。
dmwatcher.ini备库的 dmwatcher.ini 可参照第 5.6 节,确认以下配置与主库一致:
DW_TYPE = GLOBALDW_MODE = AUTOINST_OGUID = 45331INST_INI = /dmdata/data/DAMENG/dm.iniINST_AUTO_RESTART = 1INST_STARTUP_CMD 指向实际 dmserver 路径在 B 节点以 root 用户执行:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p node_02 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
如果服务已注册,不要重复注册;先用 systemctl cat 确认服务指向的配置文件。
在 A 节点执行:
systemctl start DmServicenode_01
disql SYSDBA/'<SYSDBA密码>'
连接数据库后执行:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
在 B 节点执行:
systemctl start DmServicenode_02
disql SYSDBA/'<SYSDBA密码>'
连接数据库后执行:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
确认主备实例状态、OGUID、MAL 配置和归档配置无误后,在 A、B 两个节点分别执行:
systemctl start DmWatcherServiceWatcher systemctl status DmWatcherServiceWatcher
如启动失败,查看服务日志:
journalctl -u DmWatcherServiceWatcher -n 50 --no-pager
监视器部署在第三台主机(dm3,IP:192.168.234.23)。以下配置中的 IP、目录及服务名需按实际环境核对。
创建配置文件:
vi /home/dmdba/dmdbms/bin/dmmonitor.ini
写入以下配置:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.234.21:5436
MON_DW_IP = 192.168.234.22:5436
参数说明:
MON_DW_CONFIRM = 1:配置确认监视器。MON_LOG_PATH:监视器日志目录。MON_LOG_INTERVAL:日志记录间隔,单位为秒。MON_LOG_FILE_SIZE:单个日志文件大小,单位为 MB。MON_LOG_SPACE_LIMIT:日志空间上限,单位为 MB。MON_DW_IP:填写主、备节点的守护进程通信地址,端口对应 MAL_DW_PORT。注册监视器服务:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
启动并检查服务:
systemctl start DmMonitorServiceMonitor systemctl status DmMonitorServiceMonitor
如需使用非确认监视器,可创建另一份配置文件:
vi /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
写入以下配置:
MON_DW_CONFIRM = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.234.21:5436
MON_DW_IP = 192.168.234.22:5436
其中,MON_DW_CONFIRM = 0 表示非确认监视器。该配置与确认监视器使用不同的配置文件,按实际部署需求选择,不要在未确认服务用途时重复注册或启动。
需要前台启动时,可执行:
cd /home/dmdba/dmdbms/bin
./dmmonitor dmmonitor_manual.ini
监视器启动后,可通过监视器命令行输入 tip 查看当前集群状态。
至此,DM8 DW 主备集群部署记录整理完毕。
文章
阅读量
获赞
