达梦数据库主备安装部署
1. 环境准备
1.1. 端口规划
1.2. 数据库初始化参数
页大小:16K
簇大小:16 页
字符集:UTF-8
字符串比较大小写敏感:是
长度以字符为单位:否
数据库名: test01
实例名: test01, test02
端口:15236,25236,35236
日志文件大小:共 2 个(每个 256MB);
是否启用归档:启用
1.3. 安装部署路径规划
1.4. 安装数据库
上传安装程序
root:
mount /dev/cdrom /mnt
umount /mnt
mount -o loop /dm/dmdbms/dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11 /mnt
DM 数据库安装
192.168.121.232/233
cd /mnt
./DMInstall.bin -i
root:
/dm/dmdbms/dm8/script/root/root_installer.sh
2. 实时主备集群搭建
2.1. 创建主库实例
[dmdba@test01 ~]$ cd /dm/dmdbms/dm8/bin
./dminit path=/dm/dmdata db_name=dmtest instance_name=dmtest01 port_num=15236 LOG_SIZE=256 SYSDBA_PWD=dameng123 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1
./dmserver /dm/dmdata/dmtest/dm.ini &
2.2. 开启归档
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/dmarch/dmtest,TYPE = local,FILE_SIZE=256,SPACE_LIMIT = 0';
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
select arch_mode from v$database;
select * from v$dm_arch_ini;
2.3. 数据准备
备份主库,然后复制备份到备库
关库
DmServicedmtest01 stop
备份
cd /dm/dmdbms/dm8/bin
./dmrman
backup database '/dm/dmdata/dmtest/dm.ini' full to dmtest01_full01 backupset '/dm/dmback/dmtest01_full01'
scp -r /dm/dmback/dmtest01_full01 192.168.121.233:/dm/dmback/dmtest01_full01
2.4. 备库创建实例
su - dmdba
cd /dm/dmdbms/dm8/bin
./dminit path=/dm/dmdata db_name=dmtest instance_name=dmtest02 port_num=25236 LOG_SIZE=256 SYSDBA_PWD=dameng123 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1
2.5. 在备库恢复数据库
./dmrman
restore database '/dm/dmdata/dmtest/dm.ini' from backupset '/dm/dmback/dmtest01_full01'
recover database '/dm/dmdata/dmtest/dm.ini' from backupset '/dm/dmback/dmtest01_full01'
recover database '/dm/dmdata/dmtest/dm.ini' update db_magic
3. 修改配置参数-主库
3.1. 修改 dm.ini
su - dmdba
cd /dm/dmdata/dmtest
vi dm.ini
INSTANCE_NAME =dmtest01 #主库实例
PORT_NUM = 15236 #数据库实例监听端口
DW_PORT = 15237 #守护环境下,监听守护进程连接端口,为上面规划表中的 MAL_INST_DW_PORT 值
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
3.2. 修改 dmmal.ini
vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME =dmtest01 # 实例名, 和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.121.232 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.121.232 #实例的对外服务 IP 地址
MAL_INST_PORT = 15236 # 实例的对外服务端口, 和 dm.ini 中的 PORT_NUM 一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听 TCP 连接的端口
3.3. 修改 dmarch.ini
vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = test02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/dmtest #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 # 单位 Mb , 0 表示无限制, 范围 1024~4294967294M
3.4. 修改 dmwatcher.ini
vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式,手工 MANUAL
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdata/dmtest/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
4. 修改配置参数-备库
4.1. 修改 dm.ini
su - dmdba
cd /dm/dmdata/dmtest
INSTANCE_NAME = dmtest02 #主库实例
PORT_NUM = 25236 #数据库实例监听端口
DW_PORT = 25237 #守护环境下,监听守护进程连接端口,为上面规划表中的 MAL_INST_DW_PORT 值
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
4.2. 修改 dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmtest01 # 实例名, 和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.121.232 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.121.232 #实例的对外服务 IP 地址
MAL_INST_PORT = 15236 # 实例的对外服务端口, 和 dm.ini 中的 PORT_NUM 一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = dmtest02 # 实例名, 和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.121.233 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 25239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.121.233 #实例的对外服务 IP 地址
MAL_INST_PORT = 25236 # 实例的对外服务端口, 和 dm.ini 中的 PORT_NUM 一致
MAL_INST_DW_PORT = 25237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 25238 #实例对应的守护进程监听 TCP 连接的端口
4.3. 修改 dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmtest01 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/dmtest #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 # 单位 Mb , 0 表示无限制, 范围 1024~4294967294M
4.4. 修改 dmwatcher.ini
vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式,MANUAL 手工切换模式。
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdata/dmtest/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
5. 主、备库注册服务
5.1. 主库注册服务,配置 OGUID,修改数据库模式为主库
192.168.121.232:
root:
cd /dm/dmdbms/dm8/script/root/
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/dmtest/dm.ini -p dmtest
./dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdata/dmtest/dmwatcher.ini -p dmtest
su - dmdba
cd /dm/dmdbms/dm8/bin
./dmserver /dm/dmdata/dmtest/dm.ini mount
disql SYSDBA/dameng123@192.168.121.232:15236
select status$ from v$database;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database primary;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit;
启动守护进程
su - dmdba
cd /dm/dmdbms/dm8/bin
DmServicedmtest start
DmWatcherServicedmtest start
ps -ef|grep dmserver
ps -ef|grep dmwatcher
5.2. 备库 注册服务,配置 OGUID,修改数据库模式为备库
192.168.121.233
root:
cd /dm/dmdbms/dm8/script/root/
./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/dmtest/dm.ini -p dmtest
./dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdata/dmtest/dmwatcher.ini -p dmtest
su - dmdba
cd /dm/dmdbms/dm8/bin
./dmserver /dm/dmdata/dmtest/dm.ini mount
disql SYSDBA/dameng123@192.168.121.233:25236
select status$ from v$database;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
exit;
启动守护进程
su - dmdba
cd /dm/dmdbms/dm8/bin
DmServicedmtest start
DmWatcherServicedmtest start
ps -ef|grep dmserver
ps -ef|grep dmwatcher
6. 配置监控服务器 dmmonitor
6.1. 监控服务器只需要安装 DM 软件
上传安装程序
root:
mount /dev/cdrom /mnt
umount /mnt
mount -o loop /dm/dmdbms/dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11 /mnt
DM 数据库安装
192.168.121.235
cd /mnt
./DMInstall.bin -i
root:
/dm/dmdbms/dm8/script/root/root_installer.sh
6.2. 配置 dmmonitor.ini
su - dmdba
mkdir /dm/dmdbms/dm8/data
vi /dm/dmdbms/dm8/data/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/dmdbms/dm8/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.121.232:15238
MON_DW_IP = 192.168.121.233:25238
#配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT
6.3. 注册服务
su - root
cd /dm/dmdbms/dm8/script/root
./dm_service_installer.sh -t dmmonitor -monitor_ini /dm/dmdbms/dm8/data/dmmonitor.ini -p dmtest
启动监控
su - dmdba
DmMonitorServicedmtest start
DmMonitorServicedmtest stop
启动到前台命令
/dm/dmdbms/dm8/bin/dmmonitor /dm/dmdbms/dm8/data/dmmonitor.ini
show
ps -ef|grep dm
7. 主备集群切换测试与维护管理
7.1. 主备同步测试
业务测试:
登录到主库
disql SYSDBA/dameng123@192.168.121.232:15236
create tablespace test01 datafile '/dm/dmdata/dmtest/test01.dbf' size 100 autoextend off;
create tablespace test01_idx datafile '/dm/dmdata/dmtest/test01_idx01.dbf' size 100 autoextend off;
create user "test01" identified by "test123456" default tablespace test01 default index tablespace test01_idx;
grant dba to test01;
select PATH from v$datafile;
conn test01/test123456@192.168.121.232:15236;
create table test01 (id int,name varchar(50),create_date date);
insert into test01 values(1,'达梦','2022-10-15');
insert into test01 values(2,'达梦数据库','2022-10-16');
insert into test01 values(3,'DM','2022-10-17');
insert into test01 values(4,'DMDB','2022-10-18');
insert into test01 values(5,'DM8','2022-10-19');
commit;
select * from test01;
select count(*) from test01;
select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='TEST01';
登录到备库检查一下数据
disql SYSDBA/dameng123@192.168.121.233:25236
select PATH from v$datafile;
conn test01/test123456@192.168.121.233:25236;
select count(*) from test01.test01;
7.2. 主备切换
杀进程
ps -ef|grep dmmonitor
kill -9 xx,
或重启主库后,备库会自动接管,成为主库
/dm/dmdbms/dm8/bin/dmmonitor /dm/dmdbms/dm8/data/dmmonitor.ini
show
手动切换
choose switchover grp1
登录
login
用户名:sysdba
密码:
switchover grp1.DMTEST02
switchover grp1.DMTEST01
再次插入数据检查
disql SYSDBA/dameng123@192.168.121.233:25236
conn test01/test01123456@192.168.121.233:25236;
insert into test01 values(6,'DM','2022-10-20');
insert into test01 values(7,'DM','2022-10-21');
commit;
disql SYSDBA/dameng123@192.168.121.232:15236
select * from test01.test01;
dmmonitor /dm/dmdbms/dm8/data/dmmonitor.ini
8. 主备集群启停流程
8.1. 启动集群
先启动数据库实例服务
192.168.121.232
su - dmdba
DmServicetest01 start
192.168.121.233
su - dmdba
DmServicetest01 start
再启动数据库守护服务
192.168.121.232
su - dmdba
DmWatcherServicetest01 start
192.168.121.233
su - dmdba
DmWatcherServicetest01 start
再启动监视器查看集群状态
192.168.121.235
su - dmdba
dmmonitor /dm/dmdbms/dm8/data/dmmonitor.ini
如果正常,则放在后台操作
DmMonitorServicetest01 start
8.2. 停止集群
先确保监视器服务处于停止状态
su - dmdba
dmmonitor /dm/dmdbms/dm8/data/dmmonitor.ini
exit
或者:
DmMonitorServicetest01 stop
再停止数据库守护进程
192.168.121.232
su - dmdba
DmWatcherServicetest01 stop
192.168.121.233
su - dmdba
DmWatcherServicetest01 stop
再停止数据库的实例服务
192.168.121.232
su - dmdba
DmServicetest01 stop
192.168.121.233
su - dmdba
DmServicetest01 stop
评论