前言:
需要另外准备两个操作系统版本、CPU架构与单机相同的两个节点,一个用于承载备库,一个用于承载监视器,本文章模拟了已投入使用单机后续因为业务需要升级为主备集群的情况,仅供学习参考。
一、环境准备
注意:以下参数不同之处请自行修改,本文章集群的业务IP和心跳IP一致,若有两张网卡,可分别作为业务IP和心跳IP
ip 集群中的名称 实例名
节点1(原本的单机)192.168.40.111 主库 DM1
节点2 192.168.40.112 备库 DM2
节点3 192.168.40.113 监视器 无
数据库安装目录:/home/dmdba/dmdbms
数据目录:/data
初始数据库名:DAMENG
归档目录: /data/dmarch
备份目录:/data/dmbak
二、单机建表且插入测试数据
##在原来的单机创建测试数据,以验证后续单机升主备数据是否同步成功、
create table wxs(id int);
insert into wxs values(1);
insert into wxs values(2);
insert into wxs values(3);
select * from wxs;
三、主机准备工作
(1)检查归档是否开启
select * from v$dm_arch_ini where ARCH_IS_VALID='Y'; --输出以下结果则证明归档开启
注意:若没有开启归档,disql连接数据库执行以下语句开启归档
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = /data/dm_arch, TYPE = local,FILE_SIZE = 512, SPACE_LIMIT = 1024';
SQL> ALTER DATABASE OPEN;
(2)对主库进行备份(在业务低峰操作)
##disql连接数据库,执行备份语句,备份集FULL_BAK存放在路径/data/dmbak路径下 BACKUP DATABASE FULL BACKUPSET '/data/dmbak/FULL_BAK';
##执行成功后,在/data/dmbak下ll查看是否存在备份集
FULL_BAK cd /data/dmbak ll
(3)修改dm.ini文件
cp复制dm.ini文件,并命名为dm_bak.ini,我们修改dm_bak.ini文件, 最后停库进行替换,保留dm.ini文件,以便有问题进行回滚操作。
修改以下几个参数:
MAL_INI=1
ARCH_INI=1
ALTER_MODE_STATUS=0
ENABLE_OFFLINE_TS=2
(4)配置dmarch.ini 添加如下内容
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM2 #实时归档目标实例名
(5)配置dmmal.ini
vi /data/DAMENG/dmmal.ini
添加以下内容:
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.40.111 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.40.111 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DM2
MAL_HOST = 192.168.40.112
MAL_PORT = 61141
MAL_INST_HOST = 192.168.40.112
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33131
(6)配置dmwatcher.ini vi /data/DAMENG/dmwatcher.ini
添加以下内容:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDM1 start #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
四、备库
(1)系统环境参数修改 修改system.con、limits.conf、关闭Numa等,步骤略
(2)安装数据库软件 与主库版本相同,安装步骤略,对数据库进行初始化操作,不需要指定其他的参数,保持默认,后续会替换ini文件 cd /home/dmdba/dmdbms/bin ./dminit path=/data
(3)备库文件准备
##1、在备库创建备份目录,归档目录,sql日志文件
mkdir -p /data/dmbak /data/dmarch /data/sqllog
##2、在主库scp将备份集FULL_BAK传送到备库中
cd /data/dmbak scp -r FULL_BAK/ dmdba@192.168.40.112:/data/dmbak/
##3、到备节点查看是否存在备份集,存在则传送成功
##4、拷贝主库的dm_bak.ini、dmarch.ini、dmmal.ini、dmwatcher.ini到备库
scp dm_bak.ini dmarch.ini dmwatcher.ini dmmal.ini dmdba@192.168.40.112:/data/DAMENG/
##备库将原来的dm.ini改名,将传送的dm_bak.ini改为dm.ini
mv dm.ini dm_bak2.ini
mv dm_bak.ini dm.ini
##5、修改各个ini文件
(1)dm.ini 修改实例名为DM2
(2)dmarch.ini 修改ARCH_DEST为DM1
(3)dmmal.ini文件都用做修改
(4)dmwatcher.ini修改DM1为DM2
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDM2 start #命令行方式启动
五、配置监视器
(1)在113节点安装单机 113节点需要安装部署单机一套,不需要初始化实例,步骤略
(2)创建存放监视器日志目录
mkdir -p /home/dmdba/dmdbms/monitor/log
mkdir -p /home/dmdba/dmdbms/monitor/log0
(3)配置确认监视器 vi /home/dmdba/dmdbms/monitor/dmmonitor.ini
配置文件内容如下:
MON_DW_CONFIRM = 1 #确认监视器模式,非监视器为0
MON_LOG_PATH = /home/dmdba/dmdbms/monitor/log #监视器日志文件存放路径,区分监视器和非监视器
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 4096 #不限定日志文件总占用空间(必须改为非0)
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.40.111:52141
MON_DW_IP = 192.168.40.112:52141
(4)配置非确认监视器 vi /home/dmdba/dmdbms/monitor/dmmonitor0.ini
配置文件内容如下:
MON_DW_CONFIRM = 0 #确认监视器模式,非监视器为0
MON_LOG_PATH = /home/dmdba/dmdbms/monitor/log0 #监视器日志文件存放路径,区分监视器和非监视器
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 4096 #不限定日志文件总占用空间(必须改为非0)
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.40.111:52141
MON_DW_IP = 192.168.40.112:52141
六、升级
(1)主库切换dm.ini文件
##首先停库
DmServiceDM1 stop
##改名
cd /data/DAMENG
mv dm_bak.ini dm.ini
(2)主库还原数据
##拷贝主库的归档到备库
scp -r /data/dmarch/ dmdba@192.168.40.112:/data/dmarch/
##利用主库的传送的备份集FULL_BAK以及归档进行还原恢复
cd /home/dmdba/dmdbms/bin
./dmrman
RMAN> RESTORE DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/dmbak/FULL_BAK';
RMAN> RECOVER DATABASE '/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/data/dmarch/dmarch';
RMAN> RECOVER DATABASE '/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
七、注册服务
root用户执行
(1)主库
dmserver服务注册:主库原来单机已注册
dmwatcher(守护进程)服务注册: ./dm_service_installer.sh -t dmwatcher -watcher_ini /data/DAMENG/dmwatcher.ini -p DM1
(2)备库
dmserver服务注册: ./dm_service_installer.sh -t dmserver -dm_ini /data/DAMENG/dm.ini -p DM2
dmwatcher(守护进程)服务注册: ./dm_service_installer.sh -t dmwatcher -watcher_ini /data/DAMENG/dmwatcher.ini -p DM2
(3)监视器
./dm_service_installer.sh -t dmmonitor -monitor_ini /home/dmdba/dmdbms/monitor/dmmonitor.ini -p MON
注意:只需要注册确认监视器,非监视器不需要
八、mount启动数据库
(1)mount方式启动主库并设置OGUID
cd /home/dmdba/dmdbms/bin
./dmserver path=/data/DAMENG/dm.ini mount
disql连接数据库:
执行
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退出mount前台启动
(2)Mount方式启动备库并设置OGUID
cd /home/dmdba/dmdbms/bin
./dmserver path=/data/DAMENG/dm.ini mount
disql连接数据库:
执行
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退出mount前台启动
九、启动集群
启动顺序为主备库的dmserver->dmatcher->monitor 如下图所示
十、非确认监视器查看集群状态
cd /home/dmdba/dmdbms/bin ./dmmonitor path=/home/dmdba/dmdbms/monitor/dmmonitor0.ini 执行show
十一、查看原单机数据备库是否同步
由下图所示,备库同步了原单机的数据
十二、测试同步
主库建表插入测试数据,备库查看是否同步 由下图可以看见,同步成功
到此单机升级为主备集群完成!!!
更多学习内容请移步达梦数据库官方地址: https://eco.dameng.com