A 机器 | B 机器 | |
---|---|---|
业务 IP | 172.16.50.49 | 172.16.50.48 |
心跳 IP | 10.10.10.49 | 10.10.10.48 |
实例名 | danieldb | danieldb_bk |
实例端口 | 5236 | 5236 |
MAL 端口 | 5336 | 5336 |
MAL 守护进程端口 | 5436 | 5436 |
守护进程端口 | 5536 | 5536 |
OGUID | 45331 | 45331 |
守护组 | GRP1 | GRP1 |
安装目录 | /dm8 | /dm8 |
实例目录 | /dm8/data/ | /dm8/data/ |
归档上限 | 51200 | 51200 |
su - dmdba
disql sysdba/Mema_1234@localhost:5236
select * from v$license;
# 参数 CLUSTER_TYPE 规定了 key 授权使用的集群类型,格式为字符串“XXXX”,每一位上 0 表示禁止,1 表示授权使用第 1 个字符:表示数据守护;第 2 个字符:表示 MPP;第 3 个字符:表示读写分离;第 4 个字符:表示 DSC。例如,“0010” 表示授权该可作为读写分离集群的节点使用。
su - dmdba disql SYSDBA/Mema_1234@localhost:5236 ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/data/danieldb/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; ALTER DATABASE OPEN;
SP_SET_PARA_VALUE (2,'PORT_NUM',5236); SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0); SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2); SP_SET_PARA_VALUE (2,'MAL_INI',1); SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
cd $DM_HOME/data/danieldb/ mv dmarch.ini dmarch.ini.bak cat > $DM_HOME/data/danieldb/dmarch.ini << EOF ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/danieldb/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = danieldb_bk #实时归档目标实例名 EOF
cat > $DM_HOME/data/danieldb/dmmal.ini << EOF MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dm8/data/malpath/ #临时文件目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = danieldb #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_INST_HOST = 172.16.50.49 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_HOST = 10.10.10.49 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = danieldb_bk MAL_INST_HOST = 172.16.50.48 MAL_INST_PORT = 5236 MAL_HOST = 10.10.10.48 MAL_PORT = 5336 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536 EOF
cat > $DM_HOME/data/danieldb/dmwatcher.ini << EOF [GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/danieldb/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 EOF
DmServicedanieldb stop
## disql SYSDBA/Mema_1234@localhost:5236
## BACKUP DATABASE BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE';
dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/danieldb/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'"
scp -r /dm8/data/danieldb/bak/BACKUP_FILE dmdba@10.10.10.48:/dm8/
# 删除服务,重新注册
/dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb
# 注册服务
/dm8/script/root/dm_service_installer.sh -t dmserver -p danieldb -dm_ini /dm8/data/danieldb/dm.ini -m mount
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/data/danieldb/dmwatcher.ini
#####--如果要删除服务
# /dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb
# /dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
su - dmdba dminit path=/dm8/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=danieldb INSTANCE_NAME=danieldb_bk PORT_NUM=5236
cp -r /dm8/BACKUP_FILE /dm8/data/danieldb/bak/ dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/danieldb/dm.ini' FROM BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'" dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/danieldb/dm.ini' FROM BACKUPSET '/dm8/data/danieldb/bak/BACKUP_FILE'" dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/danieldb/dm.ini' UPDATE DB_MAGIC"
cat > /dm8/data/danieldb/dmarch.ini << EOF ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm8/data/danieldb/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = danieldb #实时归档目标实例名 EOF
修改配置dm.ini
# 快速编辑
sed -i '/INSTANCE_NAME / c INSTANCE_NAME = danieldb_bk' /dm8/data/danieldb/dm.ini
sed -i '/DW_INACTIVE_INTERVAL / c DW_INACTIVE_INTERVAL = 60 ' /dm8/data/danieldb/dm.ini
sed -i '/ALTER_MODE_STATUS / c ALTER_MODE_STATUS = 0 ' /dm8/data/danieldb/dm.ini
sed -i '/ENABLE_OFFLINE_TS / c ENABLE_OFFLINE_TS = 2 ' /dm8/data/danieldb/dm.ini
sed -i '/MAL_INI / c MAL_INI = 1 ' /dm8/data/danieldb/dm.ini
sed -i '/ARCH_INI / c ARCH_INI = 1 ' /dm8/data/danieldb/dm.ini
sed -i '/RLOG_SEND_APPLY_MON / c RLOG_SEND_APPLY_MON = 64 ' /dm8/data/danieldb/dm.ini
# 手工vi修改以下参数
# INSTANCE_NAME = DANIELDB_BK
# PORT_NUM = 5236 #数据库实例监听端口
# DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
# ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
# ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
# MAL_INI = 1 #打开 MAL 系统
# ARCH_INI = 1 #打开归档配置
# RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
配置 dmmal.ini 和 dmwatcher.ini
cat > $DM_HOME/data/danieldb/dmmal.ini << EOF MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dm8/data/malpath/ #临时文件目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [MAL_INST1] MAL_INST_NAME = danieldb #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_INST_HOST = 172.16.50.49 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_HOST = 10.10.10.49 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口 MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = danieldb_bk MAL_INST_HOST = 172.16.50.48 MAL_INST_PORT = 5236 MAL_HOST = 10.10.10.48 MAL_PORT = 5336 MAL_DW_PORT = 5436 MAL_INST_DW_PORT = 5536 EOF
cat > $DM_HOME/data/danieldb/dmwatcher.ini << EOF [GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/danieldb/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 EOF
/dm8/script/root/dm_service_installer.sh -t dmserver -p danieldb_bk -dm_ini /dm8/data/danieldb/dm.ini -m mount /dm8/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/data/danieldb/dmwatcher.ini
- 手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
- 自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。
# 备份文件,如果有
su - dmdba
cat > /dm8/bin/dmmonitor.ini << EOF
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /dm8/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 10.10.10.49:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 10.10.10.48:5436
EOF
/dm8/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm8/bin/dmmonitor.ini
# 如果需要删除服务
# /dm8/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor
## 主机(dmdba)
su - dmdba
DmServicedanieldb start
disql SYSDBA/Mema_1234@localhost:5236
select status$ from v$instance;
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
## 备机(dmdba)
su - dmdba
DmServicedanieldb_bk start
disql SYSDBA/Mema_1234@localhost:5236
select status$ from v$instance;
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
## 主机及备机(dmdba)
/dm8/bin/DmWatcherServiceWatcher start
主机:
备机:
# 监视服务器(dmdba)
/dm8/bin/DmMonitorServiceMonitor start
## 前台启动
/dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini
## 启动
## 主机及备机
/dm8/bin/DmWatcherServiceWatcher start
##停止
## 主机及备机
/dm8/bin/DmWatcherServiceWatcher stop
## 主机
/dm8/bin/DmServicedanieldb stop
## 备机
/dm8/bin/DmServicedanieldb_bk stop
disql SYSDBA/Mema_1234@localhost:5236
create table test (id number(10));
insert into test values(1);
insert into test values(2);
commit;
disql SYSDBA/Mema_1234@localhost:5236
select * from test;
/dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini
# 登录,并输入用户名口令
login
# 查看组中可选择对象
choose switchover GRP1
# 手工切换
switchover GRP1.danieldb_bk
# 登录主备库检查状态
disql SYSDBA/Mema_1234@localhost:5236
select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;
/dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini
# 登录,并输入用户名口令
login
choose takeover
# 强制关闭主机网络模拟中断
ifdown eth3
# 强制切换
choose takeover
takeover GRP1.danieldb_bk
# 待主角网络恢复,自动修复
ifup eth3
如果脑裂后无法修复,则需要重新备库搭建的方式,恢复集群。
## 配置 DM 数据守护,一般要求配置连接服务名,以实现故障自动重连。连接服务名可以在 DM 提供的 JDBC、 DPI 等接口中使用,连接数据库时指定连接服务名,接口会随机选择一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连接,直至连接成功或者遍历了所有 IP。
# 可以通过编辑 dm_svc.conf 文件配置连接服务名。 dm_svc.conf 配置文件在 DM 安装时生成。
# Windows 平台下位于%SystemRoot%\system32 目录, Linux 平台下位于/etc 目录。
# 连接服务名格式: `SERVERNAME=(IP[:PORT],IP[:PORT],......)`
# 主库和备库
su - dmdba
cat >> /etc/dm_svc.conf << EOF
TIME_ZONE=(480)
LANGUAGE=(cn)
DANIELDB=(172.16.50.49:5236,172.16.50.48:5236)
##服务配置,读写分离模式必须
[DANIELDB]
LOGIN_MODE=(1)
RW_SEPARATE=(1) # 表示是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。
RW_PERCENT=(30)
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
EOF
# 服务名
# 用于连接数据库的服务名,参数值格式为:
# 服务名=(IP[:PORT],IP[:PORT],......)。
# TIME_ZONE
# 指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。
# KEYWORDS
# 该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。
# 例如:KEYWORDS=(versions,VERSIONS,type,TYPE)
# LOGIN_MODE
# 指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
# 连接数据库
disql SYSDBA/Mema_1234@danieldb
select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;
# 切换后连接数据库
# 登录dmmonitor
/dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini
login
switchover GRP1.danieldb_bk
# 再测试连接
disql SYSDBA/Mema_1234@danieldb
select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;
# 强制打开数据库
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
alter database open force;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
# 查看数据库状态
select i.HOST_NAME ,i.NAME ,i."STATUS$" ,d.ARCH_MODE from v$instance i ,v$database d ;
select NAME,INSTANCE_NAME,STATUS$,MODE$,OGUID from v$instance;
# 清理配置,主库
/dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb
/dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
rm -rf /dm8/data/danieldb
# 清理配置,备库
/dm8/script/root/dm_service_uninstaller.sh -n DmServicedanieldb_bk
/dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
rm -rf /dm8/data/danieldb
rm -rf /dm8/BACKUP_FILE
文章
阅读量
获赞