本文主要讲解如何在已有的主备集群中,增加备节点的,以增强集群的健壮性。包含已有集群数据库服务器基本信息的统计,数据库数据文件、归档、备份的路径规划,以及将新节点加入集群在新增服务器与源集群服务器上所需的操作,最后是主节点切换的参考方法。
主机名 | 服务IP | 数据库名 | 实例名 |
---|---|---|---|
localhost | 192.168.124.129(已有) | DMDB | DW1 |
localhost | 192.168.124.130(已有) | DMDB | DW2 |
localhost | 192.168.124.136(新增) | DMDB | DW3 |
实例名 | 实例端口 | MAL 系统监听 | TCP 连接的端口 | 守护进程TCP连接端口 |
---|---|---|---|---|
DW1 | 5236 | 7336 | 7436 | 7536 |
DW2 | 5236 | 7336 | 7436 | 7536 |
DW3 | 5236 | 7336 | 7436 | 7536 |
通过如下SQL语句查询已有主备的参数配置
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 ;
示例主库节点初始化参数(192.168.124.129)
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMDB instance_name=DW1 SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123"
示例备库节点初始化参数(192.168.124.130)
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMDB instance_name=DW2 SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123"
已有架构与新增节点规划一致,便于后期运维。
数据库软件安装路径:/home/dmdba/dmdbms
数据库数据文件路径:/dmdata/DMDB
数据库归档文件路径:/dmdata/dmarch
数据库备份文件路径:/dmdata/dmbak
关闭防火墙
systemctl stop firewalld
设置开机禁用防火墙
systemctl disable firewalld
临时性关闭
setenforce 0
开机不重启
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
/etc/sysctl.conf文件末尾添加以下内容
vim /etc/sysctl.conf
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern = /dmdata/core.%e.%p
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 2097152
使参数生效,执行
sysctl -p
/etc/security/limits.conf文件末尾添加如下内容:
vim /etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimiteddmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited
从已有架构节点中查询dmdba的组序号,实现备节点与已有架构一致。
[root@localhost ~]# id -u dmdba
2001
新建用户组 dinstall。
groupadd dinstall -g 2001
新建用户 dmdba。
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
修改 dmdba 用户密码。
passwd dmdba
Hn@dameng123
/home/dmdba/.bash_profile文件末尾添加如下内容:
vi /home/dmdba/.bash_profile
export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
使用root用户操作
mkdir -p /dmiso
mount -o loop dmxxx.iso /dmiso
使用dmdba用户操作
su - dmdba
cd /dmiso
./DMInstall.bin -i
根据提示输入key文件路径,设定时区等基本信息。
安装完成提示使用 root 执行脚本
/home/dmdba/dmdbms/script/root/root_installer.sh
参照1.3已有实例参数配置,除INSTANCE_NAME之外,其余参数配置必须保持一致
使用dmdba用户
cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMDB instance_name=DW3 SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123"
主库备份(192.168.124.129)
使用dmdba用户
./disql SYSDBA/SYSDBA@localhost:5236
backup database '/dmdata/DMDB/dm.ini' backupset '/home/dmdba/bakfull';
scp -r /home/dmdba/bakfull dmdba@192.168.124.136:/home/dmdba/
新增备节点还原(192.168.124.136)
使用dmdba用户
cd /home/dmdba/dmdbms/bin
使用 dmrman 工具还原新增备库,dmdba 用户执行:
./dmrman use_ap=2
执行 restore
restore database '/dmdata/DMDB/dm.ini' from backupset '/home/dmdba/bakfull';
完成后执行 recover:
recover database '/dmdata/DMDB/dm.ini' from backupset '/home/dmdba/bakfull';
最后执行 recover update db_magic。
recover database '/dmdata/DMDB/dm.ini' update db_magic;
dw3节点的/dmdata/DMDB/dm.ini 上修改以下参数值:
vi /dmdata/DMDB/dm.ini
INSTANCE_NAME = dw3
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
dw3节点的/dmdata/DMDB/dmarch.ini 上添加以下内容:
vi /dmdata/DMDB/dmarch.ini
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw1
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dw2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 102400 //归档配置为100G(此处//为注释内容,正式配置文件中需要删除)
dw3节点的/dmdata/DMDB/dmmal.ini 上添加以下内容:
vi /dmdata/DMDB/dmmal.ini
MAL_CHECK_INTERVAL = 30
MAL_CONN_FAIL_INTERVAL = 60
[MAL_INST1]
MAL_INST_NAME = dw1
MAL_HOST = 192.168.124.129
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.129
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = dw2
MAL_HOST = 192.168.124.130
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST3]
MAL_INST_NAME = dw3
MAL_HOST = 192.168.124.136
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.136
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
dw3节点的/dmdata/DMDB/dmwatcher.ini 上添加以下内容:
vi /dmdata/DMDB/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
关闭原有主备集群的数据守护进程,防止有新数据影响数据一致性
使用dmdba用户
cd /home/dmdba/dmdbms/bin
关闭主库守护进程(129):./DmWatcherServiceDW stop
关闭备库守护进程(130):./DmWatcherServiceDW stop
以 mount 方式启动数据库实例(192.168.124.136)
使用 dmdba 用户
cd /home/dmdba/dmdbms/bin
./dmserver /dmdata/DMDB/dm.ini mount
必须将数据库启动到mount模式,如果启动到open可能导致数据库的LSN编号增长,与主库不一致无法进行正常的启动备库
在新的终端使用 disql 工具连接数据库:
./disql SYSDBA/@localhost:5236
执行以下命令:
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
执行之后关闭前台启动的136服务器数据库
动态添加MAL设置
./disql SYSDBA/'"Hn@dameng123"'@192.168.124.129:5236
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD('MAL_INST3','dw3','192.168.124.136',7336,'192.168.124.136',5236,7436,0,7536);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
alter database add archivelog 'DEST=dw3, TYPE=REALTIME';
exit
./disql SYSDBA/'"Hn@dameng123"'@192.168.124.130:5236
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD('MAL_INST3','dw3','192.168.124.136',7336,'192.168.124.136',5236,7436,0,7536);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
alter database add archivelog 'DEST=dw3, TYPE=REALTIME';
exit
使用 root 用户,到数据库安装目录的 script/root 下。
./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/DMDB/dmwatcher.ini
./dm_service_installer.sh -t dmserver -p dw -dm_ini /dmdata/DMDB/dm.ini
cd /home/dmdba/dmdbms/bin
要严格按照以下顺序操作
关闭主库守护进程(129):./DmWatcherServiceDW stop
关闭备库守护进程(130):./DmWatcherServiceDW stop
关闭备库守护进程(136):./DmWatcherServiceDW stop
关闭主库实例(129):./DmServicedmdb stop
关闭备库实例(130):./DmServicedmdb stop
关闭备库实例(136):./DmServicedmdb stop
启动主库实例(129):./DmServicedw start
启动备库实例(130):./DmServicedw start
启动备库实例(136):./DmServicedw start
启动主库守护进程(129):./DmWatcherServicedw start
启动备库守护进程(130):./DmWatcherServicedw start
启动备库守护进程(136):./DmWatcherServicedw start
集群任意节点,配置普通监视器配置文件 dmmonitor.ini
vi /dmdata/DMDB/dmmonitor.ini
MON_DW_Confirm = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_DW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.124.129:7436
MON_DW_IP = 192.168.124.130:7436
MON_DW_IP = 192.168.124.136:7436
执行以下命令,启动监视器:
使用dmdba用户
cd /home/dmdba/dmdbms/bin
./dmmonitor /dmdata/DMDB/dmmonitor.ini
Show
login
用户名:SYSDBA
密码:Hn@dameng123
正常情况节点切换语法
switchover [group_name[.]] [inst_name]
switchover GRP_DW.DW2
此时DW2已经切换为主库
主库发生故障后,可以通过监视器的 Takeover 命令,将备库切换为主库,继续对外提供服务。如果配置为自动切换模式,确认监视器可以自动检测主库故障,并通知备库接管,这个过程不需要人工干预。
故障异常切换语法
takeover [group_name[.]] [inst_name]
takeover GRP1.DMSERVER_02
备注:切换之前一定要先检查主备库的数据一致性:FLSN序列号是否一致
文章
阅读量
获赞