达梦数据库-主备集群

DM 主备集群

实时主备

        主库修改数据产生的REDO日志, 通过实时归档机制, 在写入本地REDO之前发送给备库, 备库接收到REDO后重新应用REDO日志来保持与主库数据同步

        当主库故障时, 备库再将所有REOD日志应用完成后, 就切换为主库对外提供服务

读写分离

        通过即时归档或实时归档所组成的主备系统

        读写分离集群通过配置"一致性模式"保证主库和备库数据一致性

        通过DM数据库的各种接口, 实现将读操作自动分流到备库

读写分离的模式

            一致性模式: 该模式下, 当发送SELECT语句时, 不论该语句在主库执行还是备库执行其查询的结果都是一样的

            高性能模式: 该模式下, 当发送SELECT语句时, 不能保证查询结果的一致性

数据守护

DM 数据守护主要包含以下组件

            主库                   primary模式, 提供完整数据库服务的实例, 对外提供服务

            备库                   standby模式, 提供只读服务

            REDO 日志              记录物理数据页的变化

            REDO 日志传输          主库通过MAL系统发送redo日志到备库, 日志是以RLOG_PKG为单位进行日志包的发送

            REDO 日志重演          备库接收到主库的REDO日志后, 重新应用REDO日志, 严格安装REDO产生的顺序解析REOD日志, 修改相应的物理页, 并且重新应用的过程中备库也会将数据写入本地REOD

            守护进程 (dmwatcher)   监控数据库实例运行状态和主备之间数据同步情况以及故障处理的方式

            监视器 (dmmonitor)     监控守护进程, 数据库实例信息, 用于管理集群, 监控实例故障后切换

            /* 在数据守护中, 不严格区分数据库和数据库实例的概念, 数据库实例时唯一的标识 通常使用实例名来标记一个主库或者备库 */

DM 实时主备功能

        实时数据同步: 通过实时发送redo, 进行数据同步

            主备切换: 通过Switchover命令, 完成主备切换

        自动故障处理: 当备库出现故障后, 守护进程自动通知主库修改归档为invalid状态停止同步, 并将备库置为失效

        自动数据同步: 备库恢复后, 备库应用完历史数据后, 守护进程自动通知主库发送redo日志重新进行数据同步

            备库接管: 主库发生故障后, 通过Takeover命令, 将备库切换为主库, 也可以配置为自动切换由监视器进行自动检测并切换

        备库强制接管: 在无法完成手动切换时, 使用Takeover Force命令进行强制切换

        读写分离访问: 通过配置实现读写分离

归档日志类型

        实时归档

        本地归档

        异步归档

        数据守护集群: 本地归档, 实时归档, 异步归档

        读写分离集群: 本地归档, 即时归档

        MPP主备集群 : 本地归档, 实时归档

        本地归档: LOCAL    ARCHIVE 最多设置8个, 将redo日志进行本地归档, 在写入redo日之后触发

        实施归档: REALTIME ARCHIVE 最多设置8个, 在写入redo日志之前触发, 通过MAL系统发送redo日志到备机并等待返回确认消息

        即时归档: TIMELY   ARCHIVE 最多设置8个, 在写入redo日志之后触发, 通过MAL系统发送redo日志到备机并等待备机应用完成后返回消息

        异步归档: ASYNC    ARCHIVE 最多设置8个, 由备机定时同步redo日志

数据库模式

    PRIMARY 服务正常, 修改对象强制生成REDO日志

    NORMAL  服务正常, 操作无限限制

    STANDBY 只读访问, 实时归档失败, 根据配置向本地归档写入REDO日志

    /* 所有模式, 必须在MOUNT状态下进行切换 */

守护进程功能

    监控数据库状态

    发送状态信息

    监控其他守护进程消息

    接收监视器消息

    主备库启动运行

    备库故障处理

    备库异常处理

    主库故障处理

    故障恢复处理

守护进程故障切换模式

        故障自动切换

            主库发生故障, 监视器自动选择一个备库进行切换

        故障手动切换

            主库发生故障, 通过监视器命令进行切换

监视器

    监控模式: MON_DW_CONFIRM=0

    确认模式: MON_DW_CONFIRM=1

查看主备数据库信息

    查看归档信息      SQL> SELECT arch_mode FROM v$database;

    查看归档日志信息  SQL> SELECT arch_name, arch_type, arch_dest FROM v$dm_arch_ini;

    查看OGUID         SQL> SELECT oguid FROM v$instance;

    查看MAL系统信息   SQL> SELECT * FROM v$dm_mal_ini;

监视器工具常用命令

    startup

    stop

    switchover

    takeover

    open force

    help

    show

    exit

DM 两节点主备集群搭建

    环境说明

        IP地址规划

            外网IP: 100.36.1.1  内网IP: 192.168.232.128  实例名 its1    数据库名称 its

            外网IP: 100.63.1.2  内网IP: 192.168.232.129  实例名 its2    数据库名称 its

        端口规划

            MAL_INST_PORT      5236 实例端口

            MAL_PORT          16001 MAL系统端口

            MAL_DW_PORT       17001 守护进程监听端口

            MAL_INST_DW_PORT  18001 本地实例守护进程的端口

        目录规划

            /dm8    数据库软件目录

            /dmdata 数据文件目录

            /dmarch 归档日志目录

            /dmbak  备份目录

    一、数据库软件安装(两个节点相同操作)

        1、主库

            [root@itsapp1 ~]# su - dmdba

            [dmdba@itsapp1 ~]$ cd /mnt/dm8/

            [dmdba@itsapp1 dm8]$ ./DMInstall.bin -i

            请以root系统用户执行命令:

            /dm8/script/root/root_installer.sh

            安装结束

            [dmdba@itsapp1 dm8]$

            [root@itsapp1 ~]# /dm8/script/root/root_installer.sh

        2、备库

            [root@itsapp2 ~]# su - dmdba

            [dmdba@itsapp2 ~]$ cd /mnt/dm8/

            [dmdba@itsapp2 dm8]$ ./DMInstall.bin -i

            请以root系统用户执行命令:

            /dm8/script/root/root_installer.sh

            安装结束

            [dmdba@itsapp2 dm8]$

    二、初始化数据库实例

        1、主库

            [dmdba@itsapp1 bin]$ ./dminit PATH=/dmdata db_name=its instance_name=its1

        2、备库

            [dmdba@itsapp2 bin]$ ./dminit PATH=/dmdata db_name=its instance_name=its2

    三、前台启动各个实例, 启动后关闭

        1、主库

            [dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini

        2、备库

            [dmdba@itsapp2 bin]$ ./dmserver /dmdata/its/dm.ini

    四、主库进行脱机备份

        [dmdba@itsapp1 bin]$ ./dmrman

        dmrman V8

        RMAN> BACKUP DATABASE '/dmdata/its/dm.ini' FULL BACKUPSET '/dmbak/full_database';

    五、主库进行数据库还原操作

        1、主库复制备份文件到备库

            [dmdba@itsapp1 bin]$ scp -r /dmbak/full_database 100.63.1.2:/dmbak/

        2、备库进行恢复

            [dmdba@itsapp2 bin]$ ./dmrman

            dmrman V8

            RMAN> RESTORE DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/dmbak/full_database';

            RMAN> RECOVER DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/dmbak/full_database';

            RMAN> RECOVER DATABASE '/dmdata/its/dm.ini'  UPDATE DB_MAGIC;

            /*

            安装官方文档说的, 复制到随便的目录下进行恢复则报无效的备份集目录, 只能和主库一样在dmbak目录下进行恢复

                [dmdba@itsapp2 bin]$ ./dmrman

                dmrman V8

                RMAN> RESTORE DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/tmp/full_database';

                RESTORE DATABASE '/dmdata/its/dm.ini' FROM BACKUPSET '/tmp/full_database';

                file dm.key not found, use default license!

                [-10001]:[错误码:-127]无效的备份集目录[/tmp/full_database]

                RMAN>

            */

    六、主库配置所需配置文件

        1、dm.ini

            [dmdba@itsapp1 ~]$ vi /dmdata/its/dm.ini

            INSTANCE_NAME     = its1

            MAL_INI           = 1

            ARCH_INI          = 1

            ALTER_MODE_STATUS = 0      

            ENABLE_OFFLINE_TS = 2

        2、dmarch.ini

            [dmdba@itsapp1 ~]$ vi /dmdata/its/dmarch.ini

            [ARCHIVE_REALTIME]

            ARCH_TYPE         = REALTIME

            ARCH_DEST         = its2

            [ARCHIVE_LOCAL1]

            ARCH_TYPE         = LOCAL

            ARCH_DEST         = /dmarch

            ARCH_FILE_SIZE    = 128

            ARCH_SPACE_LIMIT  = 10240

        3、dmmal.ini

            [dmdba@itsapp1 ~]$ vi /dmdata/its/dmmal.ini

            MAL_CHECK_INTERVAL      = 5

            MAL_CONN_FAIL_INTERVAL  = 5

            [MAL_INST1]

            MAL_INST_NAME    = its1

            MAL_HOST         = 192.168.232.128

            MAL_PORT         = 16001

            MAL_INST_HOST    = 100.63.1.1

            MAL_INST_PORT    = 5236

            MAL_DW_PORT      = 17001

            MAL_INST_DW_PORT = 18001

            [MAL_INST2]

            MAL_INST_NAME    = its2

            MAL_HOST         = 192.168.232.129

            MAL_PORT         = 16001

            MAL_INST_HOST    = 100.63.1.2

            MAL_INST_PORT    = 5236

            MAL_DW_PORT      = 17001

            MAL_INST_DW_PORT = 18001

        4、dmwatcher.ini

            [dmdba@itsapp1 ~]$ vi /dmdata/its/dmwatcher.ini

            [GRP_RW]

            DW_TYPE           = GLOBAL

            DW_MODE           = AUTO

            DW_ERROR_TIME     = 10

            INST_RECOVER_TIME = 60

            INST_ERROR_TIME   = 10

            INST_OGUID        = 453331

            INST_INI          = /dmdata/its/dm.ini

            INST_AUTO_RESTART = 1

            INST_STARTUP_CMD  = /dm8/bin/dmserver

    七、备库配置所需配置文件

        1、主库复制配置文件到备库

            [dmdba@itsapp1 ~]$ scp /dmdata/its/{dmarch,dmmal,dmwatcher}.ini 100.63.1.2:/dmdata/its/

        2、dm.ini

            [dmdba@itsapp2 ~]$ vi /dmdata/its/dm.ini

            INSTANCE_NAME     = its2

            MAL_INI           = 1

            ARCH_INI          = 1

            ALTER_MODE_STATUS = 0      

            ENABLE_OFFLINE_TS = 2

        3、dmarch.ini

            [dmdba@itsapp2 ~]$ vi /dmdata/its/dmarch.ini

            [ARCHIVE_REALTIME]

            ARCH_TYPE         = REALTIME

            ARCH_DEST         = its1

            [ARCHIVE_LOCAL1]

            ARCH_TYPE         = LOCAL

            ARCH_DEST         = /dmarch

            ARCH_FILE_SIZE    = 128

            ARCH_SPACE_LIMIT  = 10240

        4、dmmal.ini

            [dmdba@itsapp2 ~]$ vi /dmdata/its/dmmal.ini

            MAL_CHECK_INTERVAL      = 5

            MAL_CONN_FAIL_INTERVAL  = 5

            [MAL_INST1]

            MAL_INST_NAME    = its1

            MAL_HOST         = 192.168.232.128

            MAL_PORT         = 16001

            MAL_INST_HOST    = 100.63.1.1

            MAL_INST_PORT    = 5236

            MAL_DW_PORT      = 17001

            MAL_INST_DW_PORT = 18001

            [MAL_INST2]

            MAL_INST_NAME    = its2

            MAL_HOST         = 192.168.232.129

            MAL_PORT         = 16001

            MAL_INST_HOST    = 100.63.1.2

            MAL_INST_PORT    = 5236

            MAL_DW_PORT      = 17001

            MAL_INST_DW_PORT = 18001

        5、dmwatcher.ini

            [dmdba@itsapp2 ~]$ vi /dmdata/its/dmwatcher.ini

            [GRP_RW]

            DW_TYPE           = GLOBAL

            DW_MODE           = AUTO

            DW_ERROR_TIME     = 10

            INST_RECOVER_TIME = 60

            INST_ERROR_TIME   = 10

            INST_OGUID        = 453331

            INST_INI          = /dmdata/its/dm.ini

            INST_AUTO_RESTART = 1

            INST_STARTUP_CMD  = /dm8/bin/dmserver

    八、主库和备库以MOUNT方式启动数据库进行配置

        1、主库

            [dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini mount

            [dmdba@itsapp1 bin]$ ./disql

            SQL> SP_SET_OGUID(453331);

            SQL> ALTER DATABASE PRIMARY;

        2、备库

            [dmdba@itsapp2 bin]$ ./dmserver /dmdata/its/dm.ini mount

            [dmdba@itsapp2 bin]$ ./disql

            SQL> SP_SET_OGUID(453331);

            SQL> ALTER DATABASE STANDBY;

    九、各个节点启动dmwatcher进程

        [dmdba@itsapp1 bin]$ ./dmwatcher /dmdata/its/dmwatcher.ini

        DMWATCHER[4.0] V8

        DMWATCHER[4.0] IS READY

        [dmdba@itsapp2 bin]$ ./dmwatcher /dmdata/its/dmwatcher.ini

        DMWATCHER[4.0] V8

        DMWATCHER[4.0] IS READY

    十、配置监视器

        /* 配置为确认监视器, 确认监视器可以完成主备的自动切换 我这里在备库进行创建 */

        [dmdba@itsapp2 ~]$ vi /dmdata/its/dmmonitor.ini

        MON_DW_CONFIRM      = 1

        MON_LOG_PATH        = /dm8/log

        MON_LOG_INTERVAL    = 60

        MON_LOG_FILE_SIZE   = 32

        MON_LOG_SPACE_LIMIT = 0

        [GRP_RW]

        MON_INST_OGUID      = 453331

        MON_DW_IP           = 192.168.232.128:17001

        MON_DW_IP           = 192.168.232.129:17001

    十一、启动监视器

        [dmdba@itsapp2 bin]$ ./dmmonitor /dmdata/its/dmmonitor.ini

        SHOW GLOBAL INFO

        2022-05-27 23:43:15

        #================================================================================#

        GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

        GRP_RW           453331      TRUE            AUTO            FALSE    

        <<DATABASE GLOBAL INFO:>>

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.128     17001        2022-05-27 23:43:15  GLOBAL    VALID     OPEN           ITS1             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.129     17001        2022-05-27 23:43:15  GLOBAL    VALID     OPEN           ITS2             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID   

        #================================================================================#

    十二、注册服务

        1、主库

            [root@itsapp1 ~]# cd /dm8/script/root/

            [root@itsapp1 root]# ./dm_service_installer.sh -t dmwatcher -p its1 -watcher_ini /dmdata/its/dmwatcher.ini

            [root@itsapp1 root]# ./dm_service_installer.sh -t dmserver -p its1 -dm_ini /dmdata/its/dm.ini

        2、备库

            [root@itsapp2 ~]# cd /dm8/script/root/

            [root@itsapp2 root]# ./dm_service_installer.sh -t dmwatcher -p its2 -watcher_ini /dmdata/its/dmwatcher.ini

            [root@itsapp2 root]# ./dm_service_installer.sh -t dmserver -p its2 -dm_ini /dmdata/its/dm.ini

            [root@itsapp2 root]# ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /dmdata/its/dmmonitor.ini

            [root@itsapp2 root]#

    十三、停止所有服务, 以后台方式启动

        停止集群顺序

            1、监视器

            2、主库守护进程

            3、备库守护进程

            4、主库实例

            5、备库实例

        启动集群顺序

            1、主库实例

                [root@itsapp1 ~]# systemctl start DmServiceits1.service

            2、备库实例

                [root@itsapp2 ~]# systemctl start DmServiceits2.service

            3、主句守护进程

                [root@itsapp1 ~]# systemctl start DmWatcherServiceits1.service 

            4、备库守护进程

                [root@itsapp2 ~]# systemctl start DmWatcherServiceits2.service

            5、监视器

                [root@itsapp2 ~]# systemctl start DmMonitorServiceconfirm.service

    十四、配置普通监视器, 用于查看集群信息

        /* 我这里在主库搭建, 也可以在备库搭建, 在备库搭建那么配置文件的位置或者名字需要更改以下 */

        [dmdba@itsapp2 ~]$ vi /dmdata/its/dmmonitor_0.ini

        MON_DW_CONFIRM      = 0

        MON_LOG_PATH        = /dm8/log

        MON_LOG_INTERVAL    = 60

        MON_LOG_FILE_SIZE   = 32

        MON_LOG_SPACE_LIMIT = 0

        [GRP_RW]

        MON_INST_OGUID      = 453331

        MON_DW_IP           = 192.168.232.128:17001

        MON_DW_IP           = 192.168.232.129:17001

        [dmdba@itsapp2 ~]$ cd /dm8/bin

        [dmdba@itsapp2 bin]$ ./dmmonitor /dmdata/its/dmmonitor_0.ini

        SHOW GLOBAL INFO

        2022-05-28 00:02:03

        #================================================================================#

        GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

        GRP_RW           453331      FALSE           AUTO            FALSE    

        <<DATABASE GLOBAL INFO:>>

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.128     17001        2022-05-28 00:02:02  GLOBAL    VALID     OPEN           ITS1             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.129     17001        2022-05-28 00:02:02  GLOBAL    VALID     OPEN           ITS2             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID   

        #================================================================================#

    十五、配置客户端连接

        1、主库

            [root@itsapp1 ~]# vi /etc/dm_svc.conf

            TIME_ZONE=(480)

            LANGUAGE=(cn)

            ITSDATA=(100.63.1.1:5236,100.63.1.2:5236)

            [ITSDATA]

            TIME_ZONE=(480)

            LANGUAGE=(cn)

            LOGIN_MODE=(1)

            SWITCH_TIME=(3)

            SWITCH_INTERVAL=(10)

        2、备库

            [root@itsapp2 ~]# vi /etc/dm_svc.conf

            TIME_ZONE=(480)

            TIME_ZONE=(480)

            LANGUAGE=(cn)

            ITSDATA=(100.63.1.1:5236,100.63.1.2:5236)

            [ITSDATA]

            TIME_ZONE=(480)

            LANGUAGE=(cn)

            LOGIN_MODE=(1)

            SWITCH_TIME=(3)

            SWITCH_INTERVAL=(10)

测试集群同步

    1、主库进行插入操作

        [dmdba@itsapp1 bin]$ ./disql

        SQL> CREATE TABLE t1(id int);

        SQL> INSERT INTO t1 VALUES(1);

        SQL> COMMIT;

    2、备库查看是否同步

        [dmdba@itsapp2 bin]$ ./disql

        SQL> desc t1;

        行号     NAME TYPE$   NULLABLE

        ---------- ---- ------- --------

        1          ID   INTEGER Y

        SQL> SELECT * FROM t1;

        行号     ID        

        ---------- -----------

        1          1

        SQL>

    3、备库进行插入

        SQL> INSERT INTO t1 VALUES(10);

        INSERT INTO t1 VALUES(10);

        第1 行附近出现错误[-2018]:STANDBY模式下不支持对非临时表或含有lob类型列的表进行增删改操作.

        已用时间: 0.171(毫秒). 执行号:0.

        SQL>

测试主备切换

    在普通监视器中进行switchover

        login

        用户名:SYSDBA

        密码:

        [monitor]         2022-05-28 00:06:48: 登录监视器成功!

        SWITCHOVER its2

        [monitor]         2022-05-28 00:07:04: 开始切换实例ITS2

        [monitor]         2022-05-28 00:07:04: 通知守护进程ITS1切换SWITCHOVER状态

        [monitor]         2022-05-28 00:07:04: 守护进程(ITS1)状态切换 [OPEN-->SWITCHOVER]

        [monitor]         2022-05-28 00:07:05: 切换守护进程ITS1为SWITCHOVER状态成功

        [monitor]         2022-05-28 00:07:05: 通知守护进程ITS2切换SWITCHOVER状态

        [monitor]         2022-05-28 00:07:05: 守护进程(ITS2)状态切换 [OPEN-->SWITCHOVER]

        [monitor]         2022-05-28 00:07:06: 切换守护进程ITS2为SWITCHOVER状态成功

        [monitor]         2022-05-28 00:07:06: 实例ITS1开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句

        [monitor]         2022-05-28 00:07:06: 实例ITS1执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功

        [monitor]         2022-05-28 00:07:06: 实例ITS2开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句

        [monitor]         2022-05-28 00:07:06: 实例ITS2执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功

        [monitor]         2022-05-28 00:07:06: 实例ITS1开始执行ALTER DATABASE MOUNT语句

        [monitor]         2022-05-28 00:07:07: 实例ITS1执行ALTER DATABASE MOUNT语句成功

        [monitor]         2022-05-28 00:07:07: 实例ITS2开始执行SP_APPLY_KEEP_PKG()语句

        [monitor]         2022-05-28 00:07:08: 实例ITS2执行SP_APPLY_KEEP_PKG()语句成功

        [monitor]         2022-05-28 00:07:08: 实例ITS2开始执行ALTER DATABASE MOUNT语句

        [monitor]         2022-05-28 00:07:08: 实例ITS2执行ALTER DATABASE MOUNT语句成功

        [monitor]         2022-05-28 00:07:08: 实例ITS1开始执行ALTER DATABASE STANDBY语句

        [monitor]         2022-05-28 00:07:09: 实例ITS1执行ALTER DATABASE STANDBY语句成功

        [monitor]         2022-05-28 00:07:09: 实例ITS2开始执行ALTER DATABASE PRIMARY语句

        [monitor]         2022-05-28 00:07:09: 实例ITS2执行ALTER DATABASE PRIMARY语句成功

        [monitor]         2022-05-28 00:07:09: 通知实例ITS2修改所有归档状态无效

        [monitor]         2022-05-28 00:07:09: 修改所有实例归档为无效状态成功

        [monitor]         2022-05-28 00:07:09: 实例ITS1开始执行ALTER DATABASE OPEN FORCE语句

        [monitor]         2022-05-28 00:07:10: 实例ITS1执行ALTER DATABASE OPEN FORCE语句成功

        [monitor]         2022-05-28 00:07:10: 实例ITS2开始执行ALTER DATABASE OPEN FORCE语句

        [monitor]         2022-05-28 00:07:10: 实例ITS2执行ALTER DATABASE OPEN FORCE语句成功

        [monitor]         2022-05-28 00:07:10: 实例ITS1开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句

        [monitor]         2022-05-28 00:07:10: 实例ITS1执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功

        [monitor]         2022-05-28 00:07:10: 实例ITS2开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句

        [monitor]         2022-05-28 00:07:11: 实例ITS2执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功

        [monitor]         2022-05-28 00:07:11: 通知守护进程ITS1切换OPEN状态

        [monitor]         2022-05-28 00:07:11: 守护进程(ITS1)状态切换 [SWITCHOVER-->OPEN]

        [monitor]         2022-05-28 00:07:12: 切换守护进程ITS1为OPEN状态成功

        [monitor]         2022-05-28 00:07:12: 通知守护进程ITS2切换OPEN状态

        [monitor]         2022-05-28 00:07:12: 守护进程(ITS2)状态切换 [SWITCHOVER-->OPEN]

        [monitor]         2022-05-28 00:07:13: 切换守护进程ITS2为OPEN状态成功

        [monitor]         2022-05-28 00:07:13: 通知组(GRP_RW)的守护进程执行清理操作

        [monitor]         2022-05-28 00:07:13: 清理守护进程(ITS1)请求成功

        [monitor]         2022-05-28 00:07:13: 清理守护进程(ITS2)请求成功

        [monitor]         2022-05-28 00:07:13: 实例ITS2切换成功

        SHOW GLOBAL INFO

        2022-05-28 00:07:53

        #================================================================================#

        GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

        GRP_RW           453331      FALSE           AUTO            FALSE    

        <<DATABASE GLOBAL INFO:>>

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.129     17001        2022-05-28 00:07:52  GLOBAL    VALID     OPEN           ITS2             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.128     17001        2022-05-28 00:07:53  GLOBAL    VALID     OPEN           ITS1             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID   

        #================================================================================#

测试意外宕机

    1、主库进行关机

        [root@itsapp1 ~]# init 0

    2、备库登录普通监视器查看是否切换成功

        SHOW GLOBAL INFO

        2022-05-28 00:11:26

        #================================================================================#

        GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

        GRP_RW           453331      FALSE           AUTO            FALSE    

        <<DATABASE GLOBAL INFO:>>

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.129     17001        2022-05-28 00:11:25  GLOBAL    VALID     OPEN           ITS2             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

        #================================================================================#

        /*

            监视器中查看, 只存在备库并且模式是PRIMARY

        */

    3、新主库上插入数据, 测试是否成功

        [dmdba@itsapp2 bin]$ ./disql

        SQL> INSERT INTO t1 VALUES(10);

        SQL> COMMIT;

        SQL> SELECT * FROM t1;

        行号     ID        

        ---------- -----------

        1          1

        2          10

    3、原主机启动, 查看数据一致性情况

        [dmdba@itsapp1 ~]$ cd /dm8/bin

        [dmdba@itsapp1 bin]$ ./disql

        SQL> SELECT * FROM t1;

        行号     ID        

        ---------- -----------

        1          1

        2          10       /* 数据已同步 */

        SQL> INSERT INTO t1 VALUES(1);

        INSERT INTO t1 VALUES(1);

        第1 行附近出现错误[-2018]:STANDBY模式下不支持对非临时表或含有lob类型列的表进行增删改操作. /* 当前处于备库状态 */

        已用时间: 0.861(毫秒). 执行号:0.

        SQL>

    4、普通监视器上查看效果

        SHOW GLOBAL INFO

        2022-05-28 00:16:28

        #================================================================================#

        GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG 

        GRP_RW           453331      FALSE           AUTO            FALSE    

        <<DATABASE GLOBAL INFO:>>

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.129     17001        2022-05-28 00:16:27  GLOBAL    VALID     OPEN           ITS2             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID   

        DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT   

        192.168.232.128     17001        2022-05-28 00:16:28  GLOBAL    VALID     OPEN           ITS1             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID   

        #================================================================================#

主备集群配置说明

    DM 守护集群配置文件

        dm.ini                  数据库配置文件

        dm.ctl                  数据库控制文件(在主备的存放路径不一致时需要修改)

        dmmal.ini               MAL配置文件, 一个集群中该配置文件必须严格一致

        dmarch.ini              归档配置文件

        dmwatcher.ini           守护进程配置文件

        dmwatcher.ctl           守护进程控制文件, v4.0版本不需要该文件

        dmmonitor_auto.ini      确认监视器配置文件

        dmmonitor_manual.ini    普通监视器配置文件

    dm.ini的配置参数

        INSTANCE_NAME        = its1 实例名称, 长度不能超过16位, 必须全局唯一 对应dmmal.ini中的MAL_INST_NAME

        PORT_NUM             = 5236 监听端口

        DW_INACTIVE_INTERVAL = 60   接收守护进程消息的超时时间, 超过该时间则进行集群故障切换等操作

        ALTER_MODE_STATUS    = 0    是否允许修改数据库的模式和状态 0: 不允许 1: 允许  守护模式下建议0

        ENABLE_OFFLINE_TS    = 2    是否允许offline表空间, 0: 不允许 1: 允许 2: 禁止备库  守护模式下建议2

        MAL_INI              = 1    开启mal系统

        ARCH_INI             = 1    开启归档

        RLOG_SEND_APPLY_MON  = 64   统计最近64次日志发送消息

    dmmal.ini   /* 要求和主库严格保持一致 */

        MAL_CHECK_INTERVAL     = 5           MAL链路检测时间间隔

        MAL_CONN_FAIL_INTERVAL = 5           MAL链路断开时间

        [MAL_INST1]                          第一个MAL实例配置

        MAL_INST_NAME          = its1        实例名, 和dm,ini保持一直

        MAL_HOST               = 10.10.1.1   MAL系统监听的地址, 内网地址

        MAL_PORT               = 61141       MAL系统监听的端口

        MAL_INST_HOST          = 100.63.1.1  对外提供服务的地址

        MAL_INST_PORT          = 5326        对外提供服务的端口

        MAL_DW_PORT            = 52141       守护进程监听的端口

        MAL_INST_DW_PORT       = 33141       本地实例监听守护进程的端口

        [MAL_INST2]

        MAL_INST_NAME

        MAL_HOST

        MAL_PORT

        MAL_INST_HOST

        MAL_INST_PORT

        MAL_DW_PORT

        MAL_INST_DW_PORT

    dmarch.ini

        主库

            [ARCHIVE_REALTIME]

            ARCH_TYPE = REALTIME        归档类型, REALTIME: 实时归档

            ARCH_DEST = its2            远程归档的实例ID

            [ARCHIVE_LOCAL1]

            ARCH_TYPE        = LOCAL    本地归档

            ARCH_DEST        = /dmarch  归档目录

            ARCH_FILE_SIZE   = 128      归档文件大小, 128M

            ARCH_SPACE_LIMIT = 102400   归档目录限制的大小

        备库

            [ARCHIVE_REALTIME]

            ARCH_TYPE = REALTIME

            ARCH_DEST = its1

            [ARCHIVE_LOCAL1]

            ARCH_TYPE = LOCAL

            ARCH_DEST = /dmarch

            ARCH_FILE_SIZE = 128

            ARCH_SPACE_LIMIT = 102400

    dmwatcher.ini  

        主库

            [GRP1]

            DW_TYPE            = GLOBAL             全局守护类型

            DW_MODE            = AUTO               自动切换模式, MANUAL: 故障手动切换模式

            DW_ERROR_TIME      = 15                 远程守护进程故障认定时间

            INST_RECOVERY_TIME = 60                 备库故障恢复的检测间隔时间

            INST_ERROR_TIME    = 15                 本地实例 故障认定时间

            INST_OGUID         = 435331             守护系统的唯一OGUID

            INST_INI           = /dmdata/its/dm.ini dm.ini路径

            INST_AUTO_RESTART  = 1                  打开实例的自动拉起功能

            INST_STARTUP_CMD   = /dm8/bin/dmserver  启动实例的命令

        备库

            [GRP1]

            DW_TYPE = GLOBAL

            DW_MODE = AUTO

            DW_ERROR_TIME = 15

            INST_RECOVERY_TIME = 60

            INST_ERROR_TIME = 15

            INST_OGUID = 435331

            INST_INI = /dmdata/its/dm.ini

            INST_AUTO_RESTART = 1

            INST_STARTUP_CMD = /dm8/bin/dmserver

    dmmonitor.ini

        MON_DW_CONFIRM      = 1                       确认监视器模式

        MON_LOG_PATH        = /dm8/log                监视器日志文件存放路径

        MON_LOG_INTERVAL    = 60                      每隔 60 s 定时记录系统信息到日志文件

        MON_LOG_FILE_SIZE   = 32                      每个日志文件最大 32 MB

        MON_LOG_SPACE_LIMIT = 0                       不限定日志文件总占用空间

        [GRP_RW]

        MON_INST_OGUID      = 453331                  GRP_RW组的唯一 OGUID 值

        MON_DW_IP           = 192.168.232.128:17001   配置为监视器到GRP_RW组的守护进程的连接信息, IP:PORT 形式配置

        MON_DW_IP           = 192.168.232.129:17001   IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT

DM 两节点读写分离集群搭建

    读写分离集群在配置时, 只是归档方式不一样

        [ARCHIVE_TIMELY] 

        ARCH_TYPE        = TIMELY   这里使用即时归档方式

        ARCH_DEST        = its2

        [ARCHIVE_LOCAL1]

        ARCH_TYPE        = LOCAL

        ARCH_DEST        = /dmarch

        ARCH_FILE_SIZE   = 128

        ARCH_SPACE_LIMIT = 10240

DM 两节点读写分离集群搭建(基于实时归档方式)

    ARCH_WAIT_APPLY     = 1     这里必须配置为1, 开启一致性模式, 默认是0高性能模式

    [ARCHIVE_LOCAL]

    ARCH_TYPE           = LOCAL

    ARCH_DEST           = /dmarch/ 

    ARCH_FILE_SIZE      = 1024

    ARCH_SPACE_LIMIT    = 51200

    [ARCHIVE_REALTIME1]

    ARCH_TYPE           = REALTIME 

    ARCH_DEST           = its2 

更多详情请访问达梦在线服务平台 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值