麒麟V10安装部署达梦数据库主备集群部署过程(REALTIME手工切换)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

麒麟V10安装部署达梦数据库主备集群部署过程如下:


1.主备集群部署过程

1.1部署规划

服务ip主机名实例名实例名
192.168.137.59dmdbdmdbRW1
192.168.137.60dmdbdmdbRW2

端口规划:

实例名实例端口MAL 系统监听 TCP 连接的端口实例本地的守护进程监听 TCP 连接的端口
RW1523673367436
RW2523673367436

目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)

valueValue
数据库软件安装目录/home/dmdba/dmdbms
实例安装目录/dm8/
归档日志存放目录/dm8/arch
备份文件存放目录/dm8/dmbak/

1.2 数据库软件安装及环境配置

1.2.1 操作系统配置

修改内核参数

vi /etc/sysctl.conf

添加以下内容

fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern = /dm8/core.%p
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 2097152

使参数生效,执行

sysctl -p

新建数据库管理用户和组
执行以下命令,新建用户组 dinstall。

groupadd dinstall -g 2001

执行以下命令,新建用户 dmdba。

useradd  -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba 

执行以下命令,修改 dmdba 用户密码。

passwd dmdba

修改用户资源限制
执行以下命令,修改 dmdba 用户资源限制。

vim /etc/security/limits.conf

文件末尾添加如下内容:

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

需要检查/etc/security/limits.d/目录下是否有其他限制资源的配置文件,如果有也需要修改。
执行以下命令,修改 dmdba 用户环境变量。

vi /home/dmdba/.bash_profile

文件末尾添加如下内容:

export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

使环境变量生效

source  /home/dmdba/.bash_profile 

1.2.2数据库软件安装

1.使用root用户挂载数据库软件的iso文件

mkdir -p /dmsoft
mount -o dm8_20230112_HWarm_centos7_64.iso /dmsoft

使用dmdba用户安装软件

su - dmdba

执行以下命令,切换到 /dmsoft目录下

cd /dmsoft

执行 DMInstall.bin 文件开始安装,选择【-i】参数以命令行方式安装。

./DMInstall.bin -i

选择安装程序的语言 c/C 为中文,e/E 为英文。
提示是否安装 key 文件,输入 N 跳过。
选择时区,21 即东 8 区。
选择安装类型,默认典型安装(包含所有内容)。
选择软件安装目录,默认/home/dmdba/dmdbms
确认安装
安装完成提示使用root执行脚本:

/home/dmdba/dmdbms/script/root/root_installer.sh

1.3主备集群配置

1.3.1初始化实例

2个节点完成实例初始化
执行以下命令

dminit path=/dmdata page_size=32 extent_size=32 charset=1 case_sensitive=0 log_size=2048 LENGTH_IN_CHAR=1 db_name=dmdb instance_name=rw1 PORT_NUM=5236
dminit path=/dmdata page_size=32 extent_size=32 charset=1 case_sensitive=0 log_size=2048 LENGTH_IN_CHAR=1 db_name=dmdb instance_name=rw2 PORT_NUM=5236

注意: 初始化参数中除了 path 参数必须指定,其它参数都有默认值,如果需求与默认值不同,初始化的时候请指定需要的值。因为部分参数初始化后是无法修改的例如:page_size(页大小),charset(字符集),case_sensitive(大小写敏感)等。更多参数./dminit help 查看,是否无法修改的参数可以查询 v$dm_ini 视图,para_type=’READ ONLY’ 表示无法修改。 2.key与版本一定要匹配,key也是区分企业版和安全版
以主机0001为主备集群主库,启动实例

dmserver /dmdata/dmdb/dm.ini

出现system is ready后表示数据已正常启动
打开另外一个窗口登录数据库

disql SYSDBA/SYSDBA@localhost:5236

–检查license有效期及支持集群类型

SELECT SERIES_NO,EXPIRED_DATE,AUTHORIZED_CUSTOMER,cluster_type, max_cpu_num FROM V$LICENSE;

(CLUSTER_TYPE每一位上 0 表示禁止,1 表示授权使用.第 1 个字符:表示数据守护,第 2 个字符:表示 MPP,第 3 个字符:表示读写分离,第 4 个字符:表示 DSC,如果0000表示只支持单机)最大cpu数(max_cpu_num跟lscpu对比,其中的座(scoket)的值不能比max_cpu_num 大)

然后退出并关闭数据库。

1.3.2脱机备份数据库

在主机0001上执行以下命令,确认主库 dmap 服务已启动:

ps -ef|grep dmap

若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:

./DmAPService start

dmdba用户 启动dmrman工具

dmrman use_ap=2

执行 backup 全库:

BACKUP DATABASE '/dmdata/dmdb/dm.ini' BACKUPSET '/home/dmdba/bakfull';

使用方式,如下图:
在这里插入图片描述

1.3.3备份还原备库

将备份的文件/home/dmdba/bakfull拷贝到另一台服务器上。

scp -r /home/dmdba/bakfull dmdba@192.168.137.60:/home/dmdba/bakfull

在主机0002上
使用 dmrman 工具还原备库,dmdba 用户执行:

dmrman use_ap=2

进入dmrman工具交互界面
执行 restore:

RESTORE DATABASE '/dmdata/dmdb/dm.ini' FROM BACKUPSET '/home/dmdba/bakfull';

完成后执行 recover:

recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';

最后执行 recover update db_magic。

RECOVER DATABASE '/dmdata/dmdb/dm.ini' UPDATE DB_MAGIC;

1.3.4修改dm.ini参数

所有节点都要修改,执行以下命令:

vi /dmdata/dmdb/dm.ini

所有节点修改以下参数值:

MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

1.3.5配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

vi /dmdata/dmdb/dmarch.ini

主库0001上添加以下内容:

[ARCHIVE_REALTIME1]
ARCH_TYPE        =  REALTIME #实时归档类型
ARCH_DEST        = RW2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE        = LOCAL #本地归档类型
ARCH_DEST        = /dmdata/arch #本地归档文件存放路径
ARCH_FILE_SIZE   = 2048 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT =60000 #单位 Mb,0 表示无限制,范围 1024~4294967294M

备库0002上添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。

[ARCHIVE_REALTIME1]
ARCH_TYPE        =  REALTIME #实时归档类型
ARCH_DEST        = RW1 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE        = LOCAL #本地归档类型
ARCH_DEST        = /dmdata/arch #本地归档文件存放路径
ARCH_FILE_SIZE   = 2048 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT =60000 #单5120位 Mb,0 表示无限制,范围 1024~4294967294M

1.3.6配置MAL系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令。

vi /dmdata/dmdb/dmmal.ini

主备库2个节点文件内容要相同。
说明:具体配置时,请把#和#之后的中文内容删除。

MAL_CHECK_INTERVAL       = 5      #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL   = 15  #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME    = RW1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST              = 192.168.137.59 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT              =  7336    #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST    = 192.168.137.59 #实例的对外服务 IP 地址
MAL_INST_PORT    = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT      = 7436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT    = 7536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME       = RW2
MAL_HOST                 = 192.168.137.60
MAL_PORT                 =  7336
MAL_INST_HOST       = 192.168.137.60
MAL_INST_PORT       = 5236
MAL_DW_PORT         = 7436
MAL_INST_DW_PORT    = 7536

1.3.7配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

vi /dmdata/dmdb/dmwatcher.ini

主备2节点文件内容要相同。
说明:具体配置时,请把#和#之后的中文内容删除。

[GRP_RW] 
DW_TYPE    = GLOBAL  #全局守护类型
DW_MODE    = MANUAL #AUTO自动切换模式
DW_ERROR_TIME     = 30  #远程守护进程故障认定时间
INST_RECOVER_TIME  = 60         #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME   = 20  #本地实例故障认定时间
INST_OGUID         = 453331 #守护系统唯一 OGUID 值
INST_INI           =  /dmdata/dmdb/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART  = 1  #打开实例的自动启动功能
INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/DmServiceDM start  #服务方式启动

以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令(主备库都执行):

dmserver /dmdata/dmdb/dm.ini mount

在新的终端使用 disql 工具连接数据库:

disql SYSDBA/SYSDBA@localhost:5236

主备库都修改 oguid,执行以下命令:

sp_set_oguid(453331);

主库0001上修改数据库模式为 primary,执行以下命令:

alter database primary;

备库0002上修改数据库模式为 standby,执行以下命令:

alter database standby;

启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

dmwatcher /dmdata/dmdb/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open。

1.3.8注册服务

以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
用 root 用户,到数据库安装目录script/root下(/home/dmdba/dmdbms/script/root)
注册守护进程服务(主备库都执行)。

./dm_service_installer.sh -t dmwatcher -p DM -watcher_ini /dmdata/dmdb/dmwatcher.ini 

注册数据库实例服务(主备库都执行):

./dm_service_installer.sh -t dmserver -p DM -dm_ini /dmdata/dmdb/dm.ini
```c
以服务方式启动
执行以下命令,启动数据库实例:

```c
 systemctl start DmServiceDM

执行以下命令,启动守护进程:

 systemctl start DmWatcherServiceDM

1.3.9验证主备集群同步状态

监视器查看主备集群状态
在监视器主机配置监视器,执行以下命令:

vi /dmdata/dmdb/dmmonitor.ini

添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。

MON_DW_Confirm    =0  #0普通监视器模式
MON_LOG_PATH    = /home/dmdba/dmdbms/dmonilog  #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT  = 1024  #不限定日志文件总占用空间
[GRP_RW] 
 MON_INST_OGUID    = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
 MON_DW_IP     = 192.168.137.59:7436
 MON_DW_IP     = 192.168.137.60:7436

执行以下命令,启动监视器:

dmmonitor /dmdata/dmdb/dmmonitor.ini

输入 show 命令查看集群状态:
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。

登录监视器进行切换测试

switchover GRP_RW.RW1

数据同步验证
使用 disql 登录主库,创建测试表,插入数据,执行以下命令:
注意密码含有特殊字符时的转义处理

disql SYSDBA/SYSDBA@localhost:5236

SQL 提示符下执行以下命令:

create table test(id int);
insert into test values (1);
commit;

使用 disql 登录备库,查询测试表验证,执行以下命令:

disql SYSDBA/SYSDBA@localhost:5236

SQL 提示符下执行以下命令:

select * from test;

查看数据是否正常同步。

1.3.10数据库参数优化

登录数据库执行以下脚本,脚本会更新,清获取最新脚本
在这里插入图片描述

如果服务器上需要创建多个实例,请调整每个实例占用物理内存的百分比,再执行脚本。
注意,执行完成需要重启数据库生效。
参数检查

select
        PARA_NAME,
        PARA_VALUE
from
        v$dm_ini
where
        para_name in('FAST_POOL_PAGES', 'ENABLE_FREQROOTS', 'BUFFER', 'RECYCLE', 'MAX_BUFFER', 'MAX_SESSION', 'MAX_SESSION_STATEMENT', 'USE_PLN_POOL', 'OLAP_FLAG', 'OPTIMIZER_MODE', 'VIEW_PULLUP_FLAG', 'MAX_OS_MEMORY', 'BUFFER_POOLS', 'RECYCLE_POOLS', 'HJ_BUF_GLOBAL_SIZE', 'HJ_BUF_SIZE', 'DICT_BUF_SIZE', 'TEMP_SIZE', 'VM_POOL_SIZE', 'SESS_POOL_SIZE', 'CACHE_POOL_SIZE', 'MEMORY_TARGET', 'VM_POOL_TARGET', 'SESS_POOL_TARGET', 'RT_HEAP_TARGET', 'ADAPTIVE_NPLN_FLAG', 'PARALLEL_PURGE_FLAG', 'PARALLEL_POLICY', 'UNDO_EXTENT_NUM', 'ENABLE_INJECT_HINT');

检查字符集、大小写敏感、页大小,VARCHAR长度是否以字符为单位

SELECT ID_CODE,PERMANENT_MAGIC,SF_GET_UNICODE_FLAG() AS CHARSET,SF_GET_CASE_SENSITIVE_FLAG() AS CASE_SENSITIVE,SF_GET_PAGE_SIZE() AS PAGE_SIZE ,SF_GET_LENGTH_IN_CHAR() as LENGTH_IN_CHAR;

ssl登录失败

sp_set_para_value(2,'ENABLE_ENCRYPT',0);

兼容模式

sp_set_para_value(2,'COMPATIBLE_MODE',4);

是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容 MYSQL,5:兼容 DM6,6:部分兼容 TERADATA

1.3.11 配置sql日志

修改sqllog.ini到实例路径下

vi /dm8/dmdb/sqllog.ini(记录1.5s以上sql)

BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25:28
MIN_EXEC_TIME = 1500
USER_MODE = 0
USERS = 

开启慢日志

SP_SET_PARA_VALUE(1,'SVR_LOG',1);

如果对 sqllog.ini 进行了修改,可通过调用以下函数即时生效,无需重启数据库

SP_REFRESH_SVR_LOG_CONFIG();

1.3.12 定制备份策略

备份类型备份周期备份时间
全量备份每周每周六 23 点
增量备份每天除周六外每天 23 点
删除备份每天每天 23 点 30

使用dmdba用户创建备份目录

mkdir -p /dm8/dmbak

登录主数据库

disql SYSDBA/SYSDBA

创建作业系统表

SP_INIT_JOB_SYS(1);

全量备份(每周六 23 点全备):其中有1分钟后的一次性全备调度,执行完成后检查备份是否成功。

call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakfull');
call SP_ADD_JOB_STEP('bakfull', 'bak01', 6, '00000000/dm8/dmbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 64, 0, '23:00:00', NULL, '2021-11-07 12:13:00', NULL, '');
call SP_ADD_JOB_SCHEDULE('bakfull', 'once1', 1, 0, 0, 0, 0, NULL, NULL, sysdate+1/1440, NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');

增量备份(每周除周六外每天 23 点增量备份):

call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '40000000/dm8/dmbak|/dm8/dmbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2022-10-21 14:38:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');

备份定期删除(每天 23:30 删除 14 天前备份):

call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('delbak');
call SP_ADD_JOB_STEP('delbak','bak1',0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dm8/dmbak'');
call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2022-10-21 14:38:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');

添加自动收集统计信息的任务(每周六1点收集全库统计信息)

call SP_CREATE_JOB('statistics',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('statistics');
call SP_ADD_JOB_STEP('statistics', 'statistics1', 0, 'begin
for rs in (select ''sf_set_SESSION_para_value(''''HAGR_HASH_SIZE'''',(select cast(
case when max(table_rowcount(owner,table_name))<=(select max_value from v$dm_ini 
where para_Name=''''HAGR_HASH_SIZE'''') and max(table_rowcount(owner,table_name))>=(
select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''')  then 
max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))<(
select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then
 (select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') else 
 (select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') end as bigint) 
 from dba_tables where owner=''''''||NAME||''''''));''
sql1,''DBMS_STATS.GATHER_SCHEMA_STATS(''''''||NAME||'''''',100,TRUE,''''FOR ALL COLUMNS SIZE AUTO'''');'' 
sql2
 from SYS.SYSOBJECTS where TYPE$=''SCH'' ) loop
execute  immediate rs.sql1;
execute  immediate rs.sql2;
end loop;
end;', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('statistics', 'statistics1', 1, 2, 1, 64, 0, '01:00:00', NULL, '2021-11-08 14:54:37', NULL, '');
call SP_JOB_CONFIG_COMMIT('statistics');

注意:上线前,必须提前48小时,完成数据迁移和统计信息收集。

检查作业

SELECT * FROM sysjob.sysjobs;

删除作业

call SP_DROP_JOB('delbak');

如有数据迁移,需要收集一下统计信息

select 'DBMS_STATS.GATHER_SCHEMA_STATS('''||username||''',100,TRUE,''FOR ALL COLUMNS SIZE AUTO'');'  from all_users;

查看各表的记录

select t.table_name,t.num_rows from user_tables t

1.3.13客户端连接集群

客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc 目录。
文件内容:

全局配置区

DMDW=( 192.168.137.59:5236,192.168.137.60:5236)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)

服务配置区

[DMDW]
LOGIN_MODE=(1) #只连主库

客户端程序连接数据库时,需要指定 IP 端口处替换为服务名即可,例如:disql SYSDBA/SYSDBA@localhost:5236@DMRW。jdbc的url为:jdbc:dm://DMRW
注意: 1)当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效。 2)请把该文件路径授予666权限。 也可以使用字符串直接连接 url="jdbc:dm://dmconn?dmconn=( 192.168.137.59:5236,192.168.137.60:5236)&LOGIN_MODE=(1)";

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值