文章目录
学习过程中参考了:参考文章,这篇幅文章
一主一备集群,添加一备库
环境介绍
- 原系统一主一备集群正常运行,需求增加一备,升级为一主二备
- 操作系统:Kylin V10
- IP规划:
主机名 | 服务IP | 心跳IP | 数据库名 | 实例名 |
---|---|---|---|---|
dmdb01 | 192.168.31.4 | 10.10.10.4 | dmdb | dw1 |
dmdb02 | 192.168.31.5 | 10.10.10.5 | dmdb | dw2 |
dmdb03(新增主机) | 192.168.31.6 | 10.10.10.6 | dmdb | dw3 |
- 端口规划
实例名 | 实例端口 | MAL 系统监听 TCP 连接的端口 | 实例本地的守护进程监听 TCP 连接的端口 | 实例监听守护进程 TCP 连接的端口 |
---|---|---|---|---|
dw1 | 5236 | 7336 | 7436 | 7536 |
dw2 | 5236 | 7336 | 7436 | 7536 |
dw3(新增实例) | 5236 | 7336 | 7436 | 7536 |
扩展步骤
- 新主机操作系统安装(Kylin V10),安装DM数据库软件、初始化实例(参照单机安装步骤)
- 安装软件版本应保持与旧集群版本一致,如果不一致还原时会报错:备份集无效
- 初始化实例参数应保持与旧集群一致,实例名指定为dm3
- 从主库全库备份,复制备份集到新主机,利用主库的备份集在新主机做还原。
- 修改配置文件,涉及四个配置文件,如下详细配置
- 修改新主机上数据库的OGUID及模式
- 重启集群,刷新归档文件,新库即可添加进集群中
第一步新主机(192.168.31.6) 安装DM软件及初始化实例
- 单机安装参考文章
初始化
##通过如下或者,或者查看旧的主库初始化参数文件确定参数值
SELECT '页大小',cast(PAGE()/1024 as varchar) union all
SELECT '簇大小',cast(SF_GET_EXTENT_SIZE() as varchar) union all
SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end union all
SELECT '大小写敏感',cast(SF_GET_CASE_SENSITIVE_FLAG() as varchar) union all
select 'VARCHAR类型长度是否以字符为单位',para_value from v$dm_ini where para_name='LENGTH_IN_CHAR' union all
select '实例名称' 数据库选项,INSTANCE_NAME 数据库集群相关参数值 FROM v$instance union all
select '数据库名',name from v$database union all
select '端口号',para_value from v$dm_ini where para_name='PORT_NUM' union all
select '数据库产品ID', id_code from dual union all
select '数据库版本',substr(svr_version,instr(svr_version,'(')) FROM v$instance union all
select '数据库模式',MODE$ from v$instance union all
SELECT '字符数据类型' NAME, CASE VALUE WHEN 0 THEN 'BYTE' WHEN 1 THEN 'CHAR' end FROM v$parameter WHERE name like '%LENGTH_IN_CHAR%' union all
select '唯一魔数',cast(permanent_magic as varchar) union all
select 'LSN',cast(cur_lsn as varchar) from v$rlog union all
select 'KEY文件属性', cluster_type from v$license ;
##新主机在安装完软件后,执行如下初始化数据库
$ pwd
/home/dmdba/dmdbms/bin
$ ./dminit path=/dmdata page_size=32 extent_size=32 charset=1 case_sensitive=1 length_in_char=0 log_size=2048 db_name=dmdb instance_name=dw03
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2022-11-11
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmdata/dmdb/dmdb01.log
log file path: /dmdata/dmdb/dmdb02.log
write to dir [/dmdata/dmdb].
create dm database success. 2022-05-16 15:03:17
##新主机切换root账号,注册服务
# su - root
# cd /home/dmdba/dmdbms/script/root
# ./dm_service_installer.sh -t dmserver -p dw -dm_ini /dmdata/dmdb/dm.ini
Created symlink /etc/systemd/system/multi-user.target.wants/DmServicedw.service → /usr/lib/systemd/system/DmServicedw.service.
创建服务(DmServicedw)完成
备份集恢复
主备备份&传送备份文件
##在主库执行如下进程全库备份
SQL> backup database backupset '/dmbak/bakfull';
##在主库执行scp命令复制备份集到新主机
$ scp -r /dmbak/bakfull/ 192.168.31.6:/dmbak/
##输入新主机的dmdba的密码,如果没设置密码需要在新主机的root账号下设置密码
[root@dmdb04 root]# passwd dmdba
更改用户 dmdba 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
新节点停库恢复
- 在新主机dmdba用户下,关闭服务进入dmrman恢复数据库
$ dmrman use_ap=2
RMAN> restore database '/dmdata/dmdb/dm.ini' from backupset '/dmbak/bakfull';
RMAN> recover database '/dmdata/dmdb/dm.ini' from backupset '/dmbak/bakfull';
RMAN> recover database '/dmdata/dmdb/dm.ini' update db_magic;
修改配置文件
dm.ini
- 新节点修改配置文件
$ vi /dmdata/dmdb/dm.ini
INSTANCE_NAME = DW03
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
dmmal.ini&dmwatcher.ini
- 所有节点内容相同的文件(注意如果配置文件路径不同也是要修改的)
- 使用vim命令完成编辑,或者直接使用scp命令复制配置文件
[dmdba@dmdb01 dmdb]$ cd /dmdata/dmdb
[dmdba@dmdb01 dmdb]$ cat dmwatcher.ini
[GRP_DW]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_INI = /dmdata/dmdb/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
[dmdba@dmdb01 dmdb]$ cat dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = dw01
MAL_HOST = 10.10.10.4
MAL_PORT = 7336
MAL_INST_HOST = 192.168.31.4
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = dw02
MAL_HOST = 10.10.10.5
MAL_PORT = 7336
MAL_INST_HOST = 192.168.31.5
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST3]
MAL_INST_NAME = dw03
MAL_HOST = 10.10.10.6
MAL_PORT = 7336
MAL_INST_HOST = 192.168.31.6
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
- 复制到其他节点
- dmmal.ini文件三个节点的一致,可以通过scp命令复制
- dmwatcher.ini文件三个节点的一致,可以通过scp命令复制
- dmmonitor.ini文件可以配置多个,最后一个scp命令复制一份到新主机,配置多一个
[dmdba@dmdb01 dmdb]$ scp -r /dmdata/dmdb/dmmal.ini 192.168.31.6:/dmdata/dmdb/dmmal.ini
[dmdba@dmdb01 dmdb]$ scp -r /dmdata/dmdb/dmwatcher.ini 192.168.31.6:/dmdata/dmdb/dmwatcher.ini
--有守护文件了可以创建自动启动服务
[root@dmdb03 ~]# cd /home/dmdba/dmdbms/script/root
[root@dmdb03 root]# ./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/dmdb/dmwatcher.ini
[dmdba@dmdb01 dmdb]$ scp -r /dmdata/dmdb/dmmal.ini 192.168.31.5:/dmdata/dmdb/dmmal.ini
[dmdba@dmdb01 dmdb]$ scp -r /dmdata/dmdb/dmmonitor.ini 192.168.31.6:/dmdata/dmdb/dmmonitor.ini
dmarch.ini
- 主库的归档文件配置
[dmdba@dmdb01 dmdb]$ cat /dmdata/dmdb/dmarch.ini
ARCH_WAIT_APPLY = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dw03
- 旧的备库归档文件的配置
[dmdba@dmdb01 dmdb]$ cat /dmdata/dmdb/dmarch.ini
ARCH_WAIT_APPLY = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dw03
- 新的备库归档文件的配置
[dmdba@dmdb01 dmdb]$ cat /dmdata/dmdb/dmarch.ini
ARCH_WAIT_APPLY = 1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dw02
dmmonitor.ini
- 监视器文件也可以添加新的节点进行监控
vi /dmdata/dmdb/dmmonitor.ini
##说明:具体配置时,请把#和#之后的中文内容删除。
MON_DW_CONFIRM = 0 #普通监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 1024 #0不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID = 453331 #组 GRP_DW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.10.10.4:7436
MON_DW_IP = 10.10.10.5:7436
MON_DW_IP = 10.10.10.6:7436
设置新节点数据库属性
- 查看主库的OGUID是多少,有多种方法查看
- 查看主库的oguid的设置,新的主机也设置为一致
[dmdba@dmdb01 dmdb]$ cat dmwatcher.ini | grep INST_OGUID
INST_OGUID = 453331
- 启动为mount状态(如果启动窗口有限,可以修改启动脚本的启动状态为mount)
[dmdba@dmdb03 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb03 bin]$ ./dmserver /dmdata/dmdb/dm.ini mount
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 1-2-94-21.11.11-150650-10038-ENT startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2022-11-11
file lsn: 39845
ndct db load finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
- 在新的窗口登陆disql 修改属性
- 需要修改的参数(联机恢复过来的备份,需要打开配置才可以修改)
[dmdba@dmdb04 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb04 bin]$ ./disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time : 2.052(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
整个集群重启即可测试是否成功
启动新节点观察
[dmdba@dmdb03 bin]$ DmServicedw start
Starting DmServicedw: [ OK ]
[dmdba@dmdb03 bin]$ DmWatcherServicedw start
Starting DmWatcherServicedw: [ OK ]
- 此时监视器显示新节点归档无效
- 状态也有可能是mount,无法open
- 查看归档还会有可能是报错mal无法打开
show arch send info grp_dw.dw03
[monitor] 2022-04-09 22:19:38: 实例(DW03)的归档信息在实例(DW01)中没有找到
重启集群
关闭集群
一定要按照顺序
- 监控服务器(关闭确认监视器)
[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb01 bin]$ ./DmMonitorServicedw stop
[dmdba@dmdb02 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb02 bin]$ ./DmMonitorServicedw stop
[dmdba@dmdb03 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb03 bin]$ ./DmMonitorServicedw stop
- 主备都执行(关闭守护服务)
[dmdba@dmdb01 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb01 bin]$ ./DmWatcherServicedw stop
[dmdba@dmdb02 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb02 bin]$ ./DmWatcherServicedw stop
[dmdba@dmdb03 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb03 bin]$ ./DmWatcherServicedw stop
启动集群
一定要按照顺序
- 主备都执行(启动数据库服务)
[dmdba@dmdb01 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb01 bin]$ ./DmServicedw start
[dmdba@dmdb02 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb02 bin]$ ./DmServicedw start
[dmdba@dmdb03 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb03 bin]$ ./DmServicedw start
- 主备都执行(启动守护服务)
[dmdba@dmdb01 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb01 bin]$ ./DmWatcherServicedw start
[dmdba@dmdb02 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb02 bin]$ ./DmWatcherServicedw start
[dmdba@dmdb03 dmdb]$ cd /home/dmdba/dmdbms/bin
[dmdba@dmdb04 bin]$ ./DmWatcherServicedw start
集群验证
- 在主库中创建表插入一条数据,记得要commit;
SQL> create table test (id int);
executed successfully
SQL> insert into test values(1);
affect rows 1
SQL> commit;
executed successfully
SQL> select * from test;
LINEID ID
---------- -----------
1 1
- 分别去另两个备库上执行查询,都能查到test表的数据
SQL> select * from test;
LINEID ID
---------- -----------
1 1