注册
达梦DataWatch搭建
专栏/培训园地/ 文章详情 /

达梦DataWatch搭建

Daniel 2024/05/24 894 0 0
摘要

达梦Data Watch配置

一、整体规划

1)架构规划

image-20231024104649532

2)环境规划

A 机器 B 机器
业务 IP 172.16.50.49 172.16.50.48
心跳 IP 10.10.10.49 10.10.10.48
实例名 danieldb danieldb_bk
实例端口 5236 5236
MAL 端口 5336 5336
MAL 守护进程端口 5436 5436
守护进程端口 5536 5536
OGUID 45331 45331
守护组 GRP1 GRP1
安装目录 /dm8 /dm8
实例目录 /dm8/data/ /dm8/data/
归档上限 51200 51200

3)版本支持检查

su - dmdba disql sysdba/Mema_1234@localhost:5236 select * from v$license; # 参数 CLUSTER_TYPE 规定了 key 授权使用的集群类型,格式为字符串“XXXX”,每一位上 0 表示禁止,1 表示授权使用第 1 个字符:表示数据守护;第 2 个字符:表示 MPP;第 3 个字符:表示读写分离;第 4 个字符:表示 DSC。例如,“0010” 表示授权该可作为读写分离集群的节点使用。

image-20231023032833827

二、主库环境准备

1)修改归档模式

su - dmdba disql SYSDBA/Mema_1234@localhost:5236 ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/data/danieldb/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; ALTER DATABASE OPEN;

image-20231016103135727

3)修改 dm.ini

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,'RLOG_SEND_APPLY_MON',64);

image-20231016103419612

4)修改 dmarch.ini

cd $DM_HOME/data/danieldb/ mv dmarch.ini dmarch.ini.bak cat > $DM_HOME/data/danieldb/dmarch.ini << EOF ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/danieldb/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = danieldb_bk #实时归档目标实例名 EOF

5)创建 dmmal.ini

cat > $DM_HOME/data/danieldb/dmmal.ini << EOF MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dm8/data/malpath/ #临时文件目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = danieldb #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_INST_HOST = 172.16.50.49 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_HOST = 10.10.10.49 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = danieldb_bk MAL_INST_HOST = 172.16.50.48 MAL_INST_PORT = 5236 MAL_HOST = 10.10.10.48 MAL_PORT = 5336 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536 EOF

6)创建 dmwatcher.ini

cat > $DM_HOME/data/danieldb/dmwatcher.ini << EOF [GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/danieldb/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 EOF

2)备份主库数据

DmServicedanieldb stop ## disql SYSDBA/Mema_1234@localhost:5236 ## BACKUP DATABASE BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'; dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/danieldb/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'"

image-20231022095631539

7)copy备份到备机

scp -r /dm8/data/danieldb/bak/BACKUP_FILE dmdba@10.10.10.48:/dm8/

image-20231017174201134

6)注册服务(root用户)

# 删除服务,重新注册 /dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb # 注册服务 /dm8/script/root/dm_service_installer.sh -t dmserver -p danieldb -dm_ini /dm8/data/danieldb/dm.ini -m mount /dm8/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/data/danieldb/dmwatcher.ini #####--如果要删除服务 # /dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb # /dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

image-20231017174329844

三、备库环境准备

1)初始化实例(dmdba)

su - dmdba dminit path=/dm8/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=danieldb INSTANCE_NAME=danieldb_bk PORT_NUM=5236

image-20231017174740931

2)恢复数据(dmdba)

cp -r /dm8/BACKUP_FILE /dm8/data/danieldb/bak/ dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/danieldb/dm.ini' FROM BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'" dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/danieldb/dm.ini' FROM BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'" dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/danieldb/dm.ini' UPDATE DB_MAGIC"

image-20231017174906147

3)替换 dmarch.ini

cat > /dm8/data/danieldb/dmarch.ini << EOF ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/danieldb/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = danieldb #实时归档目标实例名 EOF

4)配置 dm.ini、dmmal.ini 和 dmwatcher.ini

修改配置dm.ini

# 快速编辑 sed -i '/INSTANCE_NAME / c INSTANCE_NAME = danieldb_bk' /dm8/data/danieldb/dm.ini sed -i '/DW_INACTIVE_INTERVAL / c DW_INACTIVE_INTERVAL = 60 ' /dm8/data/danieldb/dm.ini sed -i '/ALTER_MODE_STATUS / c ALTER_MODE_STATUS = 0 ' /dm8/data/danieldb/dm.ini sed -i '/ENABLE_OFFLINE_TS / c ENABLE_OFFLINE_TS = 2 ' /dm8/data/danieldb/dm.ini sed -i '/MAL_INI / c MAL_INI = 1 ' /dm8/data/danieldb/dm.ini sed -i '/ARCH_INI / c ARCH_INI = 1 ' /dm8/data/danieldb/dm.ini sed -i '/RLOG_SEND_APPLY_MON / c RLOG_SEND_APPLY_MON = 64 ' /dm8/data/danieldb/dm.ini # 手工vi修改以下参数 # INSTANCE_NAME = DANIELDB_BK # PORT_NUM = 5236 #数据库实例监听端口 # DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 # ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID # ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 # MAL_INI = 1 #打开 MAL 系统 # ARCH_INI = 1 #打开归档配置 # RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

配置 dmmal.ini 和 dmwatcher.ini

cat > $DM_HOME/data/danieldb/dmmal.ini << EOF MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dm8/data/malpath/ #临时文件目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = danieldb #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_INST_HOST = 172.16.50.49 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_HOST = 10.10.10.49 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = danieldb_bk MAL_INST_HOST = 172.16.50.48 MAL_INST_PORT = 5236 MAL_HOST = 10.10.10.48 MAL_PORT = 5336 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536 EOF
cat > $DM_HOME/data/danieldb/dmwatcher.ini << EOF [GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/danieldb/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 EOF

5)注册服务(root用户)

/dm8/script/root/dm_service_installer.sh -t dmserver -p danieldb_bk -dm_ini /dm8/data/danieldb/dm.ini -m mount /dm8/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/data/danieldb/dmwatcher.ini

image-20231017175134246

四、配置监视服务器

  • 手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
  • 自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。

1)创建dmmonitor.ini

# 备份文件,如果有 su - dmdba cat > /dm8/bin/dmmonitor.ini << EOF MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /dm8/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB [GRP1] MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值 MON_DW_IP = 10.10.10.49:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 10.10.10.48:5436 EOF

2)注册服务(root)

/dm8/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm8/bin/dmmonitor.ini # 如果需要删除服务 # /dm8/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor

image-20231017175414257

五、启动服务

1)启动数据库并修改参数

## 主机(dmdba) su - dmdba DmServicedanieldb start disql SYSDBA/Mema_1234@localhost:5236 select status$ from v$instance; SP_SET_OGUID(45331); ALTER DATABASE PRIMARY; ## 备机(dmdba) su - dmdba DmServicedanieldb_bk start disql SYSDBA/Mema_1234@localhost:5236 select status$ from v$instance; SP_SET_OGUID(45331); ALTER DATABASE STANDBY;

image-20231017182208048

2)启动守护进程

## 主机及备机(dmdba) /dm8/bin/DmWatcherServiceWatcher start

主机:

image-20231017182444792

备机:

image-20231017185129120

3)启动监视器

# 监视服务器(dmdba) /dm8/bin/DmMonitorServiceMonitor start ## 前台启动 /dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini

image-20231023033914809

4)集群管理

## 启动 ## 主机及备机 /dm8/bin/DmWatcherServiceWatcher start ##停止 ## 主机及备机 /dm8/bin/DmWatcherServiceWatcher stop ## 主机 /dm8/bin/DmServicedanieldb stop ## 备机 /dm8/bin/DmServicedanieldb_bk stop

六、同步测试

1)主库插入数据

disql SYSDBA/Mema_1234@localhost:5236
create table test (id number(10));
insert into test values(1);
insert into test values(2);
commit;

image-20231023102640623

2)备库查看数据

disql SYSDBA/Mema_1234@localhost:5236
select * from test;

image-20231023102656540

七、切换测试

1)Switchover

/dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini # 登录,并输入用户名口令 login # 查看组中可选择对象 choose switchover GRP1 # 手工切换 switchover GRP1.danieldb_bk # 登录主备库检查状态 disql SYSDBA/Mema_1234@localhost:5236 select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;

image-20231023103536298

2)Takeover

/dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini # 登录,并输入用户名口令 login choose takeover

image-20231023104325256

# 强制关闭主机网络模拟中断 ifdown eth3

image-20231023104612240

# 强制切换 choose takeover takeover GRP1.danieldb_bk

image-20231023104747499

# 待主角网络恢复,自动修复 ifup eth3

image-20231023104926211

如果脑裂后无法修复,则需要重新备库搭建的方式,恢复集群。

八、服务连接

1)配置dm_svc.conf

## 配置 DM 数据守护,一般要求配置连接服务名,以实现故障自动重连。连接服务名可以在 DM 提供的 JDBC、 DPI 等接口中使用,连接数据库时指定连接服务名,接口会随机选择一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连接,直至连接成功或者遍历了所有 IP。 # 可以通过编辑 dm_svc.conf 文件配置连接服务名。 dm_svc.conf 配置文件在 DM 安装时生成。 # Windows 平台下位于%SystemRoot%\system32 目录, Linux 平台下位于/etc 目录。 # 连接服务名格式: `SERVERNAME=(IP[:PORT],IP[:PORT],......)` # 主库和备库 su - dmdba cat >> /etc/dm_svc.conf &lt;&lt; EOF TIME_ZONE=(480) LANGUAGE=(cn) DANIELDB=(172.16.50.49:5236,172.16.50.48:5236) ##服务配置,读写分离模式必须 [DANIELDB] LOGIN_MODE=(1) RW_SEPARATE=(1) # 表示是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。 RW_PERCENT=(30) SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) EOF # 服务名 # 用于连接数据库的服务名,参数值格式为: # 服务名=(IP[:PORT],IP[:PORT],......)。 # TIME_ZONE # 指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。 # KEYWORDS # 该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。 # 例如:KEYWORDS=(versions,VERSIONS,type,TYPE) # LOGIN_MODE # 指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。

2)测试连接

# 连接数据库 disql SYSDBA/Mema_1234@danieldb select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance; # 切换后连接数据库 # 登录dmmonitor /dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini login switchover GRP1.danieldb_bk # 再测试连接 disql SYSDBA/Mema_1234@danieldb select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;

附录

1)常用命令

# 强制打开数据库 SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); alter database open force; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); # 查看数据库状态 select i.HOST_NAME ,i.NAME ,i."STATUS$" ,d.ARCH_MODE from v$instance i ,v$database d ; select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;

2)环境清理重建

# 清理配置,主库 /dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb /dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher rm -rf /dm8/data/danieldb # 清理配置,备库 /dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb_bk /dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher rm -rf /dm8/data/danieldb rm -rf /dm8/BACKUP_FILE
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服