主备集群 新增达梦实例并配置实时主备集群(三)

字数: 5458

新增实例与数据守护、监视器

说明

在原先的 A 、B 机器搭建好的实时主备集群已有实例的基础上,新增一个实例,即一个集群,多个实例的效果

并且,一定要事先规划好端口配置、实例名、路径、数据守护组名

1.规划的端口是否与现有的实例端口冲突

2.主备机器端口之间是否打通

3.实例路径、数据守护组都要配置端口的

部署信息

A机器 B机器
IP 192.168.163.9 192.168.163.10
实例名 GRP_TEST_01 GRP_TEST_02
实例端口 5236 5236
守护进程端口 5536 5536
MAL端口 5336 5336
守护组 GRP1 GPR1
安装目录 /home/dmdba/dmdbms /home/dmdba/dmdbms
实例目录 /home/dmdba/dmdbms/DMDB /home/dmdba/dmdbms/DMDB
归档上限 51200 51200

新增实例规划

A机器 B机器
IP 192.168.163.9 192.168.163.10
实例名 GRP_ADDTEST_01 GRP_ADDTEST_02
实例端口 5237 5237
守护进程端口 5537 5537
MAL端口 5337 5337
守护组 GRP2 GPR2
实例目录 /home/dmdba/ADDTEST_data /home/dmdba/ADDTEST_data
归档上限 51200 51200

初始化实例

本次新增并没有停止已有实例服务

注意:

  • 除非必要说明,默认使用 dmdba 数据库用户进行操作
  • 配置过程中需要使用对于的目录,目录别整错了

A 机器新增实例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@linux1 bin]# ./dminit path=/home/dmdba/ADDTEST_data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=0 DB_NAME=ADDTEST INSTANCE_NAME=GRP_ADDTEST_01 PORT_NUM=5237
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-03-21
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

 log file path: /home/dmdba/ADDTEST_data/ADDTEST/ADDTEST01.log


 log file path: /home/dmdba/ADDTEST_data/ADDTEST/ADDTEST02.log

write to dir [/home/dmdba/ADDTEST_data/ADDTEST].
create dm database success. 2024-07-27 10:09:55

这里我忘记了切换到 dmdba 用户下了,问题不大,我更改实例目录权限,将目录权限改成 dmdba

1
2
cd /home/dmdba
chown dmdba:dinstall -R ADDTEST_data/

B 机器新增实例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@linux2 bin]# su - dmdba
上一次登录:一 7月 22 22:01:45 CST 2024pts/0 上
[dmdba@linux2 ~]$ cd /home/dmdba/dmdbms/bin

[dmdba@linux2 bin]$ ./dminit path=/home/dmdba/ADDTEST_data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=0 DB_NAME=ADDTEST INSTANCE_NAME=GRP_ADDTEST_01 PORT_NUM=5237
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-03-21
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL

 log file path: /home/dmdba/ADDTEST_data/ADDTEST/ADDTEST01.log


 log file path: /home/dmdba/ADDTEST_data/ADDTEST/ADDTEST02.log

write to dir [/home/dmdba/ADDTEST_data/ADDTEST].
create dm database success. 2024-07-27 10:15:34

配置 A 机器

启动新增的实例服务

前台命令启动,启动后该窗口不能动,需要重新开一个窗口

1
2
[dmdba@linux1 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@linux1 bin]$ ./dmserver /home/dmdba/ADDTEST_data/ADDTEST/dm.ini

开启归档

注意:

  • 这里使用 @IP:PORT 的形式,来区分进入哪个实例
  • 归档路径别填错了,在新增的实例数据文件目录下
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[dmdba@linux1 bin]$ ./disql SYSDBA/SYSDBA@192.168.163.9:5237

服务器[192.168.163.9:5237]:处于普通打开状态
登录使用时间 : 7.226(ms)
disql V8

SQL> ALTER DATABASE MOUNT;
操作已执行
已用时间: 2.814(毫秒). 执行号:0.

SQL> ALTER DATABASE ARCHIVELOG;
操作已执行
已用时间: 23.121(毫秒). 执行号:0.

SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/ADDTEST_data/ADDTEST/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=10240';
操作已执行
已用时间: 3.945(毫秒). 执行号:0.
SQL> ALTER DATABASE OPEN;
操作已执行
已用时间: 22.566(毫秒). 执行号:0.

备份数据

1
2
3
SQL> BACKUP DATABASE BACKUPSET '/home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST';
操作已执行
已用时间: 00:00:07.540. 执行号:64401.

修改 dm.ini

1
2
3
4
5
6
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5237); #数据库实例监听端口,配置成新的端口
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); #接收守护进程消息超时时间
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);  #不允许手工方式修改实例模式/状态/OGUID
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);  #不允许备库 OFFLINE 表空间
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);     #打开 MAL 系统
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);    #统计最近 64 次的日志重演信息

退出并关闭数据库服务

1
2
3
SQL> exit;

# 到开启服务的linux窗口,终止前台服务

修改 dmarch.ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[dmdba@linux1 bin]$ vi /home/dmdba/ADDTEST_data/ADDTEST/dmarch.ini

#DaMeng Database Archive Configuration file
#this is comments

        ARCH_WAIT_APPLY      = 0

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /home/dmdba/ADDTEST_data/ADDTEST/arch
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 10240
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_HANG_FLAG       = 1

[ARCHIVE_REALTIME1]
        ARCH_TYPE            = REALTIME
        ARCH_DEST            = GRP_ADDTEST_02

创建 dmmal.ini

注意:文件目录、实例名、端口别配置错了!!

 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
[dmdba@linux1 bin]$ vi /home/dmdba/ADDTEST_data/ADDTEST/dmmal.ini


MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /home/dmdba/ADDTEST_data/ADDTEST/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            = GRP_ADDTEST_01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 192.168.163.9  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5337  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 192.168.163.9  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5237  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5437  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5537  #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME            = GRP_ADDTEST_02
MAL_HOST                 = 192.168.163.10
MAL_PORT                 = 5337
MAL_INST_HOST            = 192.168.163.10
MAL_INST_PORT            = 5237
MAL_DW_PORT              = 5437
MAL_INST_DW_PORT         = 5537

创建 dmwatcher.ini

注意:

  • 数据守护组名,别错了,这里是 [GRP2]
  • 实例路径也别整错了
  • 数据守护的 OGUID 需要唯一,与其他实例的 OGUID 不能相同,也需要改
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[dmdba@linux1 bin]$ vi /home/dmdba/ADDTEST_data/ADDTEST/dmwatcher.ini

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

拷贝备份文件到备库

备份文件就是【2.3 步骤】执行的

1
BACKUP DATABASE BACKUPSET '/home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST';

生成的 BACKUP_FILE_ADDTEST 文件

如下拷贝

1
2
3
4
5
[dmdba@linux1 bin]$ scp -r /home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST dmdba@192.168.163.10:/home/dmdba/ADDTEST_data/ADDTEST/bak/
dmdba@192.168.163.10's password: !@#$qwer
BACKUP_FILE_ADDTEST.bak                                                                                                          100%   30MB  19.7MB/s   00:01
BACKUP_FILE_ADDTEST_1.bak                                                                                                        100%   41KB  13.9MB/s   00:00
BACKUP_FILE_ADDTEST.meta                                                                                                         100%  110KB   9.6MB/s   00:00

注册服务

使用 root 用户操作

注意:

  • 实例路径别错、实例名别错
  • 数据守护的名称记得也改一下,别冲突
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@linux1 ~]# cd /home/dmdba/dmdbms/script/root/

####################
# 创建数据库服务
####################
[root@linux1 root]# ./dm_service_installer.sh -t dmserver -p GRP_ADDTEST_01 -dm_ini /home/dmdba/ADDTEST_data/ADDTEST/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceGRP_ADDTEST_01.service to /usr/lib/systemd/system/DmServiceGRP_ADDTEST_01.service.
创建服务(DmServiceGRP_ADDTEST_01)完成

####################
# 创建数据守护服务
# 数据守护服务的名称别跟原有的冲突 -p 参数
####################
[root@linux1 root]# ./dm_service_installer.sh -t dmwatcher -p WatcherADDTEST -watcher_ini /home/dmdba/ADDTEST_data/ADDTEST/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcherADDTEST.service to /usr/lib/systemd/system/DmWatcherServiceWatcherADDTEST.service.
创建服务(DmWatcherServiceWatcherADDTEST)完成

如果需要删除服务

1
2
[root@~]# ./dm_service_uninstaller.sh -n DmServiceGRP_ADDTEST_01
[root@~]# ./dm_service_uninstaller.sh -n DmWatcherServiceWatcherADDTEST

配置 B 机器

B 机器上是备库,将数据还原与 A 机器的主库一致

无必要说明,默认使用 dmdba 用户操作

备库恢复数据

 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
39
40
41
[dmdba@linux2 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/ADDTEST_data/ADDTEST/dm.ini' FROM BACKUPSET '/home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST'"
dmrman V8
RESTORE DATABASE '/home/dmdba/ADDTEST_data/ADDTEST/dm.ini' FROM BACKUPSET '/home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST'
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00]
restore successfully.
time used: 00:00:03.464

[dmdba@linux2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/ADDTEST_data/ADDTEST/dm.ini' FROM BACKUPSET '/home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST'"
dmrman V8
RECOVER DATABASE '/home/dmdba/ADDTEST_data/ADDTEST/dm.ini' FROM BACKUPSET '/home/dmdba/ADDTEST_data/ADDTEST/bak/BACKUP_FILE_ADDTEST'
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[42819], file_lsn[42819]
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]
recover successfully!
time used: 00:00:03.146

[dmdba@linux2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/ADDTEST_data/ADDTEST/dm.ini' UPDATE DB_MAGIC"
dmrman V8
RECOVER DATABASE '/home/dmdba/ADDTEST_data/ADDTEST/dm.ini' UPDATE DB_MAGIC
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[42900], file_lsn[42900]
recover successfully!
time used: 00:00:01.192

如果少执行了中间的 RECOVER DATABASE 步骤,则会报错

1
2
[-8308]:需要先执行RECOVER DATABASE操作,再执行RECOVER DATABASE UPDATE DB_MAGIC操作
dmrman_main end, code[-8308], return -1.

创建 dmarch.ini

A 机器开了归档, B 机器也要开归档(可以简单的理解通过归档同步数据)

因为没启 B 机器的备库实例服务,要手动创建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[dmdba@linux2 bin]$ vi /home/dmdba/ADDTEST_data/ADDTEST/dmarch.ini


ARCH_WAIT_APPLY            = 0   #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /home/dmdba/ADDTEST_data/ADDTEST/arch/  #本地归档存放路径
ARCH_FILE_SIZE           = 1024  #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 10240  #归档上限,单位 MB
ARCH_FLUSH_BUF_SIZE      = 0
ARCH_HANG_FLAG           = 1


[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = GRP_ADDTEST_01  #实时归档目标实例名,这里则填主库的实例

修改 dm.ini

并且确保文件里的实例名为:GRP_ADDTEST_02 ,端口为 5237 ,并且配置如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[dmdba@linux2 DMDB]$ vi /home/dmdba/dmdbms/DMDB/dm.ini

INSTANCE_NAME  = GRP_TEST_02
PORT_NUM = 5237                        #数据库实例监听端口
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

同主库配置

注册服务

使用 root 用户执行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@linux2 ~]# cd /home/dmdba/dmdbms/script/root/

####################
# 创建数据库服务
####################
[root@linux2 root]# ./dm_service_installer.sh -t dmserver -p GRP_ADDTEST_02 -dm_ini /home/dmdba/ADDTEST_data/ADDTEST/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceGRP_ADDTEST_01.service to /usr/lib/systemd/system/DmServiceGRP_ADDTEST_01.service.
创建服务(DmServiceGRP_ADDTEST_01)完成

####################
# 创建数据守护服务
# 数据守护服务的名称别跟原有的冲突 -p 参数
####################
[root@linux2 root]# ./dm_service_installer.sh -t dmwatcher -p WatcherADDTEST -watcher_ini /home/dmdba/ADDTEST_data/ADDTEST/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWatcherADDTEST.service to /usr/lib/systemd/system/DmWatcherServiceWatcherADDTEST.service.
创建服务(DmWatcherServiceWatcherADDTEST)完成

配置新实例的监视器

使用 dmdba 操作

创建 dmmonitor.ini

在主库机器上创建,A 机器(在 B 机器或者第三台机器上都可以,随意),这个是确认监视器

监视器的日志路径最好使用绝对路径,不然就是默认在达梦数据库的按照目录下

还有就是,日志路径最好与原有的实例监视器日志路径区分,否则两个实例的监视器日志会写到一起

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[dmdba@linux1 root]# vi /home/dmdba/ADDTEST_data/ADDTEST/dmmonitor.ini


MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log_monitor/ADDTEST  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 32  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 1024  #日志上限,单位 MB

[GRP2]
MON_INST_OGUID           = 45332  #组 GRP2 的唯一 OGUID 值
MON_DW_IP                = 192.168.163.9:5437  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 192.168.163.10:5437

创建 dmmonitor_manual.ini

非确认监视器,配置同上,除了 MON_DW_CONFIRM 是 0 外

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[dmdba@linux1 root]# vi /home/dmdba/ADDTEST_data/ADDTEST/dmmonitor_manual.ini

MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log_monitor/ADDTEST  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 32  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 1024  #日志上限,单位 MB

[GRP2]
MON_INST_OGUID           = 45332  #组 GRP2 的唯一 OGUID 值
MON_DW_IP                = 192.168.163.9:5437  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 192.168.163.10:5437

注册监视器服务

使用root 用户操作

1
2
3
[root@linux1 root]# ./dm_service_installer.sh -t dmmonitor -p MonitorADDTEST -monitor_ini /home/dmdba/ADDTEST_data/ADDTEST/dmmonitor.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitorADDTEST.service to /usr/lib/systemd/system/DmMonitorServiceMonitorADDTEST.service.
创建服务(DmMonitorServiceMonitorADDTEST)完成

启动监视器服务

1
2
[dmdba@linux1 bin]$ ./DmMonitorServiceMonitorADDTEST start
Starting DmMonitorServiceMonitorADDTEST:                   [ FAILED ]

监视器需要在实例服务起来后才能启,顺序如下:

数据库实例 » 守护进程 » 监视器

启动服务

启动数据库并修改参数

A 机器启动、修改

启动实例服务报错

主要是修改 OGUID(就是数据守护的组) 与数据库模式

1
2
[dmdba@linux1 bin]$ ./DmServiceGRP_ADDTEST_01 start
Starting DmServiceGRP_ADDTEST_01:                          [ FAILED ]

查看最近的日志

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd ../log

[dmdba@linux1 log]$ ls -lrt
总用量 2384
-rw-r--r--. 1 dmdba dinstall  400805 7月  21 00:02 install_ant.log
-rwxr-xr-x. 1 dmdba dinstall     480 7月  21 00:02 install.log
-rw-r--r--. 1 dmdba dinstall       0 7月  21 00:03 DmAPService.log
-rw-r--r--. 1 dmdba dinstall       0 7月  21 00:43 DmServiceDMSERVER.log
-rw-r--r--. 1 dmdba dinstall   97806 7月  21 00:57 dm_DMDBSERVER_202407.log
-rw-r--r--. 1 dmdba dinstall       0 7月  21 11:19 DmServiceGRP_TEST_01.log
-rw-r--r--. 1 dmdba dinstall       0 7月  21 14:48 DmWatcherServiceWatcher.log
-rw-r--r--. 1 dmdba dinstall       0 7月  22 21:34 DmMonitorServiceMonitor.log
-rw-r--r--. 1 dmdba dinstall  540272 7月  27 09:47 dm_dmwatcher_GRP_TEST_01_202407.log
-rw-r--r--. 1 root  root        2193 7月  27 10:09 dm_GRP_ADDTEST_01_202407.log
-rw-r--r--. 1 dmdba dinstall    2385 7月  27 10:26 dm_dmap_202407.log
-rw-r--r--. 1 dmdba dinstall    1188 7月  27 10:26 dm_dmap_br_202407.log
-rw-r--r--. 1 dmdba dinstall   36265 7月  27 10:26 dm_BAKRES_202407.log
-rw-r--r--. 1 dmdba dinstall       0 7月  27 11:45 DmMonitorServiceMonitorADDTEST.log
-rw-r--r--. 1 dmdba dinstall 1329521 7月  27 11:56 dm_GRP_TEST_01_202407.log
-rw-r--r--. 1 dmdba dinstall       0 7月  27 11:56 DmServiceGRP_ADDTEST_01.log
-rw-r--r--. 1 dmdba dinstall    5324 7月  27 11:56 dm_unknown_202407.log
-rw-r--r--. 1 dmdba dinstall    4353 7月  27 11:57 dmsvc_sh.log

最近更新的日志 dmsvc_sh.log ,查看日志

1
2
3
[dmdba@linux1 log]$ tail -f dmsvc_sh.log
[2024-07-27 11:56:52] [localhost] [2886311096] [DmServiceGRP_ADDTEST_01] start service by dmdba
[2024-07-27 11:57:08] [localhost] [2886311096] [DmServiceGRP_ADDTEST_01] failed to start service by dmdba (code:0)

既然是 dmsvc_sh.log 报错了,猜测与 dm_svc.conf 配置有关,这个是用来配置服务名连接的文件

文件内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
TIME_ZONE=(480)
LANGUAGE=(CN)
GRP1=(192.168.163.9:5236,192.168.163.10:5236)

# 服务配置
[GRP1]
TIME+ZONE=(+480)
# 指定优先登录的服务器模式 0-优先PRIMARY 1-只连接主库 2-只连接备库 3-优先STANDBY 4-优先NORMAL(缺省默认)
LOGIN_MODE=(0)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(200)

尝试添加新增的实例服务名进去

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
TIME_ZONE=(480)
LANGUAGE=(CN)
GRP1=(192.168.163.9:5236,192.168.163.10:5236)
GRP2=(192.168.163.9:5237,192.168.163.10:5237)

# 服务配置
[GRP1]
TIME+ZONE=(+480)
# 指定优先登录的服务器模式 0-优先PRIMARY 1-只连接主库 2-只连接备库 3-优先STANDBY 4-优先NORMAL(缺省默认)
LOGIN_MODE=(0)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(200)

[GRP2]
TIME+ZONE=(+480)
# 指定优先登录的服务器模式 0-优先PRIMARY 1-只连接主库 2-只连接备库 3-优先STANDBY 4-优先NORMAL(缺省默认)
LOGIN_MODE=(0)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(200)

还是报错

额。。。

理论上讲,实例的报错应该是写入实例的日志文件啊?怎么最近写入的日志只有 dmsvc_sh.log

发现启动报错的日志没写进去,原来是日志文件的用户主组是 root,先用 root 变更

1
chown -R dmdba:dinstall /home/dmdba/dmdbms/log/*

重启切换到 dmdba 启动新增的实例服务,并查看实例日志 ``

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[dmdba@linux1 bin]$ ./DmServiceGRP_ADDTEST_01 start
Starting DmServiceGRP_ADDTEST_01:                          [ FAILED ]

[dmdba@linux1 log]$ tail -f dm_GRP_ADDTEST_01_202407.log
2024-07-27 12:13:15.145 [INFO] database P0000080255 T0000000000000080298  dm_mal_tsk_thd started, src_site:0, dest_site:1, port_data
2024-07-27 12:13:15.145 [INFO] database P0000080255 T0000000000000080297  dm_mal_recv_thd started, src_site:0, dest_site:0, port_data
2024-07-27 12:13:15.195 [INFO] database P0000080255 T0000000000000080255  rsys_rarch_obj_fil_collect path:[/home/dmdba/ADDTEST_data/ADDTEST/arch] begin.
2024-07-27 12:13:15.200 [INFO] database P0000080255 T0000000000000080255  rsys_rarch_obj_fil_collect seqno[0] end, total 1 rfils, last_g_seqno:5043
2024-07-27 12:13:15.200 [INFO] database P0000080255 T0000000000000080255  rsys_rarch_obj_fil_collect seqno[0] end, total_size 69632.
2024-07-27 12:13:15.201 [INFO] database P0000080255 T0000000000000080255  rsys_rarch_obj_fil_collect path:[GRP_ADDTEST_02] begin.
2024-07-27 12:13:15.203 [FATAL] database P0000080255 T0000000000000080304  comm_create_lsnr_sockets_low failed to create socket or listen port:5336, errno:107.
2024-07-27 12:13:15.203 [FATAL] database P0000080255 T0000000000000080304  [for dem]SYSTEM SHUTDOWN ABORT.
2024-07-27 12:13:15.204 [FATAL] database P0000080255 T0000000000000080304  MAL listener can not get the address information
2024-07-27 12:13:15.204 [INFO] database P0000080255 T0000000000000080304  total 0 rfil opened!

注意 FATAL 类型的日志,这个就是关键信息!

1
2
comm_create_lsnr_sockets_low failed to create socket or listen port:5336, errno:107.
MAL listener can not get the address information

问题就出现在 MAL 的 5336 端口上

查看 dmmal.ini 文件,果然,MAL_PORT 忘改了,还是原来的实例端口,新实例的 MAL 端口与之前的冲突了,修改它为 5337

正常启动
1
2
[dmdba@linux1 bin]$ ./DmServiceGRP_ADDTEST_01 start
Starting DmServiceGRP_ADDTEST_01:                          [ OK ]
修改参数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[dmdba@linux1 bin]$ ./disql SYSDBA/SYSDBA@192.168.163.9:5237

服务器[192.168.163.9:5237]:处于普通配置状态
登录使用时间 : 6.374(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
DMSQL 过程已成功完成
已用时间: 12.962(毫秒). 执行号:1.

SQL> SP_SET_OGUID(45332);
DMSQL 过程已成功完成
已用时间: 5.791(毫秒). 执行号:2.

SQL> ALTER DATABASE PRIMARY;
操作已执行
已用时间: 16.329(毫秒). 执行号:0.

SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
DMSQL 过程已成功完成
已用时间: 28.218(毫秒). 执行号:3.

B 机器启动、修改

1
2
3
4
5
6
7
8
9
[dmdba@linux2 bin]$ ./DmServiceGRP_ADDTEST_02 start
Starting DmServiceGRP_ADDTEST_02:                          [ FAILED ]

dmdba@linux2 log]$ cat dm_GRP_ADDTEST_02_202407.log
2024-07-27 12:26:28.172 [INFO] database P0000076312 T0000000000000076312  INI parameter DW_PORT changed, the original value 0, new value 5537
2024-07-27 12:26:28.173 [ERROR] database P0000076312 T0000000000000076312  Read ini file(/home/dmdba/ADDTEST_data/ADDTEST/dmarch.ini) error in line 13, code(-952)
2024-07-27 12:26:28.173 [INFO] database P0000076312 T0000000000000076312  INI parameter DPC_2PC changed, the original value 1, new value 0
2024-07-27 12:26:28.203 [FATAL] database P0000076312 T0000000000000076312  dmserver startup failed, code = -952 [archive_dest can not be self instance]
2024-07-27 12:26:28.204 [FATAL] database P0000076312 T0000000000000076312  nsvr_ini_file_read failed, [code: -952]

额。。。

这个也报错了,看日志里的 ERROR

1
database P0000076312 T0000000000000076312  Read ini file(/home/dmdba/ADDTEST_data/ADDTEST/dmarch.ini) error in line 13, code(-952)

又忘记修改了,dmarch.ini 归档配置文件里,复制贴贴主库的配置,没有修改实时归档的目标实例为主库

修改 ARCH_DEST = GRP_ADDTEST_01

重新启动

1
2
[dmdba@linux2 bin]$ ./DmServiceGRP_ADDTEST_02 start
Starting DmServiceGRP_ADDTEST_02:                          [ OK ]

修改参数,OGUID 和数据库模式

这里修改为备库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[dmdba@linux2 bin]$ ./disql SYSDBA/SYSDBA@192.168.163.10:5237

服务器[192.168.163.10:5237]:处于普通配置状态
登录使用时间 : 11.200(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
DMSQL 过程已成功完成
已用时间: 47.346(毫秒). 执行号:1.

SQL> SP_SET_OGUID(45332);
DMSQL 过程已成功完成
已用时间: 8.650(毫秒). 执行号:2.

SQL> ALTER DATABASE STANDBY;
操作已执行
已用时间: 20.649(毫秒). 执行号:0.

SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
DMSQL 过程已成功完成
已用时间: 33.556(毫秒). 执行号:3.

启动守护进程

A 、 B 机器都启动

1
2
[dmdba@linux1 bin]$ ./DmWatcherServiceWatcherADDTEST start
Starting DmWatcherServiceWatcherADDTEST:                   [ OK ]

启动监视器

监视器是配置在 A 机器上,即主库的机器上的

1
2
[dmdba@linux1 bin]$ ./DmMonitorServiceMonitorADDTEST start
Starting DmMonitorServiceMonitorADDTEST:                   [ FAILED ]

好了,监视器启动也报错

日志也没有,奇怪了,通过前台启动看看

1
2
3
4
5
[dmdba@linux1 bin]$ ./dmmonitor /home/dmdba/ADDTEST_data/ADDTEST/dmmonitor.ini
Invalid [group_name] or the file contains unrecognized characters!
Read ini file(/home/dmdba/ADDTEST_data/ADDTEST/dmmonitor.ini) error in line 1, code(-803)
DMMONITOR[4.0] V8
Read ini failed, please check the ini path(/home/dmdba/ADDTEST_data/ADDTEST/dmmonitor.ini) or invalid configuration or permission denied!

配置无效或者权限被拒绝

又是复制贴贴的报错,复制进SHELL里,头两个字母被吞掉了

1
2
[dmdba@linux1 bin]$ ./DmMonitorServiceMonitorADDTEST start
Starting DmMonitorServiceMonitorADDTEST:                   [ OK ]

验证连接

在达梦数据库服务器上配置 dm_svc.conf ,同时在应用服务器上配置 dm_svc.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
TIME_ZONE=(480)
LANGUAGE=(CN)

GRP1=(192.168.163.9:5236,192.168.163.10:5236)
GRP2=(192.168.163.9:5237,192.168.163.10:5237)

# 服务配置
[GRP1]
TIME+ZONE=(+480)
# 指定优先登录的服务器模式 0-优先PRIMARY 1-只连接主库 2-只连接备库 3-优先STANDBY 4-优先NORMAL(缺省默认)
LOGIN_MODE=(0)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(200)

[GRP2]
TIME+ZONE=(+480)
# 指定优先登录的服务器模式 0-优先PRIMARY 1-只连接主库 2-只连接备库 3-优先STANDBY 4-优先NORMAL(缺省默认)
LOGIN_MODE=(0)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(200)

使用达梦管理工具连接,一切正常

img

注意

在服务启动时,一般都使用后台运行的方式,即达梦通过注册服务后生成的 DmServiceXXXX``DmWatcherXXXX``DmMonitorXXXX 文件去启动

当如果这个方式启动出现报错时,但是日志又没有记录,可以使用前台命令启动,让前台直接打印启动过程的信息

1
2
cd /home/dmdba/dmdbms/bin
./dmserver /path/to/dm.ini  # dmwatcher.ini    dmmonitor.ini  
Licensed under CC BY-NC-SA 4.0
最后更新于 2024年10月14号 22:37