达梦数据库读写分离集群的搭建

1.相关概念

1.1.读写分离的概念及模式

通过即时归档或实时归档所组成的主备系统
读写分离集群通过配置"一致性模式"保证主库和备库数据一致性
通过DM数据库的各种接口, 实现将读操作自动分流到备库

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

1.2.数据守护

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

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

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

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

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

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

监视器 (dmmonitor)     监控守护进程, 数据库实例信息, 用于管理集群, 监控实例故障后切换
  • 在数据守护中, 不严格区分数据库和数据库实例的概念, 数据库实例时唯一的标识 通常使用实例名来标记一个主库或者备库

1.3.归档日志类型

	实时归档

    本地归档

    异步归档

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

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

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

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

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

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

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

1.4.数据库模式

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

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

STANDBY 只读访问, 实时归档失败, 根据配置向本地归档写入REDO日志
  • 所有模式, 必须在MOUNT状态下进行切换

2.搭建环境环境说明

  • ip规划
虚拟机IP实列名数据库名称
主机(读)192.168.232.128its1its
备机(写)192.168.232.129its2its
  • 端口规划
名称端口说明
MAL_INST_PORT5236实例端口
MAL_PORT16001MAL系统端口
MAL_DW_PORT17001守护进程监听端口
MAL_INST_DW_PORT18001本地实例守护进程的端口
  • 目录规划
    • /dm8 数据库软件目录
    • /dmdata 数据文件目录
    • /dmarch 归档日志目录
    • /dmbak 备份目录

3.数据库软件安装

两个节点同样操作

3.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

3.2.写库

[root@itsapp2 ~]# su - dmdba
[dmdba@itsapp2 ~]$ cd /mnt/dm8/
[dmdba@itsapp2 dm8]$ ./DMInstall.bin -i

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

 /dm8/script/root/root_installer.sh

安装结束

4.初始化数据库实例

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

5.备份数据库

需要先启动数据实例
读库

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

写库

[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';

6.主库进行数据库还原操作

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>

7.配置读库所需的文件

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

8.配置写库所需的文件

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

9.配置组件

9.1.以mount方式启动读写库

9.1.1.读库

[dmdba@itsapp1 bin]$ ./dmserver /dmdata/its/dm.ini mount
[dmdba@itsapp1 bin]$ ./disql
SQL> SP_SET_OGUID(453331);
SQL> ALTER DATABASE PRIMARY;

9.1.2.写库

[dmdba@itsapp2 bin]$ ./dmserver /dmdata/its/dm.ini mount
[dmdba@itsapp2 bin]$ ./disql
SQL> SP_SET_OGUID(453331);
SQL> ALTER DATABASE STANDBY;

9.2.各个节点启动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

9.3.配置监视器

9.3.1配置

 [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

9.3.2.启动监视器

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

9.4.注册服务

9.4.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

9.4.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

9.5.停止所有服务, 以后台方式启动

停止集群顺序

     	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

9.6.配置普通监视器, 用于查看集群信息

[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

10.配置客户端连接

10.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)

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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库配置分离的准备工作包括以下步骤: 1. 首先,需要进行数据库的快速安装。可以将数据库安装路径设置为/data/soft/database/dmdba。 2. 接下来,需要初始化数据库实例。可以使用以下命令进行初始化: ``` su - dmdba cd /data/soft/database/dmdba/bin 初始化命令 ``` 具体的初始化命令需要根据数据库版本和具体需求进行设置。 3. 然后,需要准备分离的配置。可以使用数据库提供的脱机备份工具dmrman来备份主库DM160。具体的步骤如下: ``` su - dmdba cd /data/soft/database/dmdba/bin 使用dmrman备份主库DM160的命令 ``` 备份命令需要根据具体的数据库配置和要备份的主库进行设置。 完成以上准备工作后,数据库就可以进行分离的配置了。具体的配置过程需要根据数据库版本和具体需求进行设置,可以参考数据库的官方文档或咨询数据库的技术支持团队。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [猿创征文|数据库如何实现分离?](https://blog.csdn.net/m0_59492087/article/details/127246085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值