主备集群搭建还是笔记复杂繁琐的,手速普通、不出错的情况下预计需要 60~90分钟,下文是我在使用过程中的笔记,希望能给搭建带来帮助。
-- 主机、备机 mode oguid 都需要修改
select mode$ from v$instance; -- NORMAL,PRIMARY、standby
select oguid from v$instance; -- 0
-- MAL 系统
-- oguid 数据库守护的唯一标识
-- 规划
-- 实例名、MAL_INST_NAME
-- MAL_INST_HOST、MAL_INST_PORT、MAL_INST_DW_PORT
-- MAL_HOST、MAL_PORT、MAL_DW_PORT
DM01 DM01 1xx.xx.xx.192 5236 5238 1xx.xx.xx.192 15236 15238
DM02 DM02 1xx.xx.xx.144 5236 5238 1xx.xx.xx.144 15236 15238
-- 样例文件
/dm8/samples/ini_script/UTF-8/dmarch_example.ini
/dm8/samples/ini_script/UTF-8/dmmal_example.ini
/dm8/samples/ini_script/UTF-8/dmmonitor_example.ini
/dm8/samples/ini_script/UTF-8/dmwatcher_example.ini
--------------------------------------------------------------------------
-- 1. 主机环境准备好,配置好 dm.ini、dmmal.ini、dmarch.ini、dmwatcher.ini
--------------------------------------------------------------------------
-- 1.1. 修该主节点 dm.ini 开启归档和 MAL:
INSTANCE_NAME = DM01
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ,原值 1
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 ,原值 1
MAL_INI = 1 #打开 MAL 系统 ,原值 0
ARCH_INI = 1 #打开归档配置 ,原值 0
-- 1.2 创建 dmarch.ini 对数据库实例
-- ARCH_DEST 写要归档目标实例名,主库写备库,备库写主库,不一样!!!
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 1024
-- 1.3 dmmal.ini 对数据库实例
MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM01 #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST = 1xx.xx.xx.192 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5240 #MAL系统监听TCP连接的端口
#MAL_INST_HOST = 1xx.xx.xx.192 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 5237 #实例本地的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5238 #实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = DM02
MAL_HOST = 1xx.xx.xx.144
MAL_PORT = 5240
#MAL_INST_HOST = 1xx.xx.xx.144
MAL_INST_PORT = 5236
MAL_DW_PORT = 5237
MAL_INST_DW_PORT = 5238
--------------------------------------------------------------------------
-- 2 脱机备份
--------------------------------------------------------------------------
-- 2.1 进入 disql
su - dmdba
export PATH=$PATH:/dm8/bin/
disql SYSDBA/\"P@ssw0rd\"@1xx.xx.xx.192:5236
-- 2.2 关闭数据库!!!!
shutdown IMMEDIATE;
exit
systemctl status DmServiceDMSERVER
systemctl stop DmServiceDMSERVER
systemctl start DmServiceDMSERVER
-- 2.3 冷备份
su - dmdba
export PATH=$PATH:/dm8/bin/
cd /dm8/bin/
./dmrman
--backup database '/dm8/data/DAMENG/dm.ini' to fullbak01 backupset '/dm8/data/DAMENG/bak/BACK_FULL_01';
--remove backupset '/dm8/data/DAMENG/bak/BACK_FULL_01';
-- remove backupset '/dm8/backup/BACK_FULL_01';
backup database '/dm8/data/DAMENG/dm.ini' to BACK_FULL_01 backupset '/dm8/backup/BACK_FULL_01';
show backupset '/dm8/backup/BACK_FULL_01';
check backupset '/dm8/backup/BACK_FULL_01';
-- remove backupset '/dm8/backup/BACK_FULL_01';
--------------------------------------------------------------------------
-- 3 备库上还原恢复
--------------------------------------------------------------------------
-- 3.1 复制备份到备库机器上
rm -rf /dm8/backup/
scp -r -p root@1xx.xx.xx.192:/dm8/backup/ /dm8/backup/
-- 3.2 还原
su - dmdba
export PATH=$PATH:/dm8/bin/
cd /dm8/bin/
./dmrman
restore database to '/dm8/data/DAMENG/' from backupset '/dm8/backup/BACK_FULL_01';
-- 3.3 更新魔术
recover database '/dm8/data/DAMENG/dm.ini' update db_magic
-- 3.4 修改 dm.ini 实例名为 DM02
-- 3.5 复制 dmmal.ini、dmarch.ini 文件到备库服务
scp -r -p root@1xx.xx.xx.192:/dm8/data/DAMENG/dmarch.ini /dm8/data/DAMENG/dmarch.ini
scp -r -p root@1xx.xx.xx.192:/dm8/data/DAMENG/dmmal.ini /dm8/data/DAMENG/dmmal.ini
-- 3.6 /dm8/data/DAMENG/dmarch.ini 中 ARCH_DEST 改为 DM01
--------------------------------------------------------------------------
-- 4 mount 启动数据库
--------------------------------------------------------------------------
-- 4.1 启动主库 -- 第一次启动一定是 mount 启动,在 mount 下改状态
su - dmdba
export PATH=$PATH:/dm8/bin/
dmserver /dm8/data/DAMENG/dm.ini mount
-- 登录数据库
su - dmdba
export PATH=$PATH:/dm8/bin/
disql SYSDBA/Dameng123@1xx.xx.xx.192:5236
select name,status$,MODE$ FROM v$instance;
-- 改数据库模式
-- 设置 oguid mount 状态下执行
sp_set_oguid(888888);
-- 不要手动 open,让数据库自动 open
ALTER DATABASE PRIMARY;
-- 确认实例信息 -- DM01
select name,status$,MODE$ FROM v$instance;
-- 4.2 启动备库
su - dmdba
export PATH=$PATH:/dm8/bin/
dmserver /dm8/data/DAMENG/dm.ini mount
-- 登录数据库
su - dmdba
export PATH=$PATH:/dm8/bin/
disql SYSDBA/Dameng123@1xx.xx.xx.144:5236
select name,status$,MODE$ FROM v$instance;
-- 改数据库模式
-- 设置 oguid mount 状态下执行
sp_set_oguid(888888);
-- 不要手动 open,让数据库自动 open
ALTER DATABASE standby;
-- 确认实例信息 -- DM02
select name,status$,MODE$ FROM v$instance;
--------------------------------------------------------------------------
-- 5 启动 watcher 主库、从库都拷贝一个 dmwatcher.ini 对数据守护进程
--------------------------------------------------------------------------
-- /dm8/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 = 888888 #守护系统唯一OGUID值
INST_INI = /dm8/data/DAMENG/dm.ini #dm.ini配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
scp -r -p root@1xx.xx.xx.192:/dm8/data/DAMENG/dmwatcher.ini /dm8/data/DAMENG/dmwatcher.ini
-- 备库:注册服务 watcher
-- /dm8/script/root/dm_service_uninstaller.sh -n dmwatcher
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p DM02 -watcher_ini /dm8/data/DAMENG/dmwatcher.ini
-- 备库:启动 watcher
systemctl start DmWatcherServiceDM02
systemctl status DmWatcherServiceDM02
-- 主库:注册服务 watcher
-- /dm8/script/root/dm_service_uninstaller.sh -n dmwatcher
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p DM01 -watcher_ini /dm8/data/DAMENG/dmwatcher.ini
-- 主库:启动 watcher
systemctl start DmWatcherServiceDM01
systemctl status DmWatcherServiceDM01
-- 主备 watcher 都启动后(主备不区分顺序,均可),数据守护自动将数据库变为 OPEN
select name,status$,MODE$ FROM v$instance;
-- 达梦服务注册
-- 主库:注册服务 DMSVR01
-- /dm8/script/root/dm_service_uninstaller.sh -n DMSVR01
-- /dm8/script/root/dm_service_uninstaller.sh -n DMSERVER 要不要删???
/dm8/script/root/dm_service_installer.sh -t dmserver -p DMSVR01 -dm_ini /dm8/data/DAMENG/dm.ini
-- /dm8/script/root/dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/data/DAMENG/dm.ini
systemctl status DmServiceDMSVR01
-- 主库去除原有服务注册,需要从 ./service 看
-- mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
-- systemctl enable DmServiceDMSERVER.service
-- systemctl start DmServiceDMSERVER.service
systemctl disable DmServiceDMSERVER.service
mv /usr/lib/systemd/system/DmServiceDMSERVER.service /dm8/bin/DmServiceDMSERVER.service
systemctl status DmServiceDMSERVER.service
/dm8/script/root/dm_service_uninstaller.sh -n DMSERVER
-- 从库:注册服务 DMSVR02
-- /dm8/script/root/dm_service_uninstaller.sh -n dmserver
/dm8/script/root/dm_service_installer.sh -t dmserver -p DMSVR02 -dm_ini /dm8/data/DAMENG/dm.ini
-- /dm8/script/root/dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/data/DAMENG/dm.ini
systemctl status DmServiceDMSVR02
-- 备库只读
--------------------------------------------------------------------------
-- 6 dmmonitor.ini 监视器,自动接管
--------------------------------------------------------------------------
-- /dm8/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
[GRP1]
MON_INST_OGUID = 888888
MON_DW_IP = 1xx.xx.xx.192:5237
MON_DW_IP = 1xx.xx.xx.144:5237
--确认监视器
su - dmdba
export PATH=$PATH:/dm8/bin/
/dm8/bin/dmmonitor /dm8/dmmonitor.ini
--需要重新启动一个注册服务的
/dm8/script/root/dm_service_installer.sh -t dmmonitor -p DMMON -monitor_ini /dm8/dmmonitor.ini
systemctl status DmMonitorServiceDMMON
systemctl start DmMonitorServiceDMMON
-- 再启动一个非确认监视器
MON_DW_CONFIRM = 0
cp /dm8/dmmonitor.ini /dm8/dmmonitor2.ini
su - dmdba
export PATH=$PATH:/dm8/bin/
/dm8/bin/dmmonitor /dm8/dmmonitor2.ini
--监视器上可以查看集群的状态
show 命令查看集群状态
login 登录
choose switchover 查看选择可切换为 PRIMARY 库的备库列表
switchover 切换主库
-- 主备如何切换
-- 输入 choose switchover 提示切换
-- 输入 switchover
-- 再输入 Y
-- 主备归档状态
SELECT * FROM v$arch_status;
-- 模拟备库故障,归档不同步
-- 备库恢复确认数据自动同步正常
-- 结束临时启动的库,用服务启动
systemctl start DmMonitorServiceDMMON
systemctl start DmMonitorServiceDMMON
-- 通过监视器关闭
Stop Group
startup group
--- 手动关闭
1. 先关闭确认监视器
2. 关闭备库守护进程
3. 关闭主库守护进程
4. shutdown 主库
5. shutdown 备库
文章
阅读量
获赞