centos搭建DB2 hadr+半自动化主机HA

自己在CentOS虚拟机上搭建了一套数据库层面加主机层面的灾备系统,来模仿AIX下HACMP + Db2 hadr,虽然主机层面的HA和HACMP还是有差别的,但是实现过程和功能类似。现把过程记录下来,仅供参考。 大致关系图如下:

========================================
=  两套主机层面HA中的活动主机上配置Db2 hadr
========================================

=============================hadr2_primary(192.168.234.130)
先新建虚拟机hadr2_primary,大小为8G

一. OS文件系统创建
/dev/db_actlog    /db/actlog        --活动日志 1       --对应的盘: /dev/sdb
/dev/db_archm1    /db/archm1        --归档日志 1.5     -- /dev/sdc
/dev/db_dbdata    /db/dbdata        --表空间数据 4.5   -- /dev/sdd
/dev/db_dbdiag    /db/dbdiag        --诊断日志 0.5     -- /dev/sdd
/dev/db_dbhome    /db/dbhome        --数据库路径 1     -- /dev/sdd
/dev/db_manage    /db/manage         --0.5              -- /dev/sdc
/dev/db/mirlog    /db/mirlog        --镜像日志路径1    -- /dev/sdd

/opt/ibm     ---非单独文件系统, DB2软件安装路径  2

需要创建以上文件系统:
----------------------------------------
整体流程:  加盘 --> 把盘做分区(也可以只做一个分区,但是为了避免IO竞争,建议每个lv/fs对应不同的分区)-->建pv-->建VG-->建lv -->fs/mount
----------------具体步骤如下:
先通过VMware加硬盘:
盘                pv          vg                lv                               fs               size
/dev/sdb       /dev/sdb1    actlog_vg      /dev/actlog_vg/actlog_lv         /db/actlog           1G
/dev/sdc       /dev/sdc1/2    arch_man_vg                        2G

以盘/dev/sdc为例:
(1) 分盘(分区):
fdisk  /dev/sdc          -->n
执行两次分两个盘: /dev/sdc1 和 /dev/sdc2

(2) 修改2个分区的分区ID,  把ID从83改为8e, 使之成为能够用于逻辑卷管理(LVM)的分区

fdisk  /dev/sdc        --> t , 8e,  w

(3) 建pv
pvcreate /dev/sdc1
pvcreate /dev/sdc2

(4) 建vg
vgcreate  arch_man_vg  /dev/sdc1  /dev/sdc2

(5) 建lv
lvcreate  -L 1536M -n arch_lv arch_man_vg
lvcreate  -L 0.48G -n manage_lv arch_man_vg

(6)格式化
mkfs.ext4  /dev/arch_man_vg/arch_lv
mkfs.ext4  /dev/arch_man_vg/manage_lv

(7) 创建mount点
mkdir -p /db/archm1
mkdir  -p  /db/manage

(8)mount
mount /dev/arch_man_vg/arch_lv /db/archm1
mount /dev/arch_man_vg/manage_lv /db/manage

(9) 设置自动挂载
在/etc/fstab最后面加上:
/dev/mapper/arch_man_vg-arch_lv  /db/archm1 ext4 defaults 0 0
/dev/mapper/arch_man_vg-manage_lv /db/manage ext4 defaults 0 0


同样的方法设置/dev/sdd, /dev/sdb

二.  安装DB2软件, 创建用户
安装DB2软件:
[root@localhost server_t]# pwd
/db2_soft/server_t
[root@localhost server_t]# ./db2_install
注册:
[root@localhost adm]# pwd
/opt/ibm/db2/V10.5/adm
[root@localhost adm]# ./db2licm -a  /db2_soft/db2aese_c_V10.5.lic

创建数据库相关用户:
groupadd -g 2000 db2iadm1
groupadd -g 2001 db2fadm1
groupadd -g 2002 db2asgrp
useradd -m -g db2iadm1 -d /db/dbhome/db2inst1 -m db2inst1         #实例用户
useradd -m -g db2fadm1 -d /db/dbhome/db2fenc1 -m db2fenc1      #fence用户, 实例在fence用户下创建(参考5)
useradd -m -g db2asgrp -d /db/dbhome/db2as -m db2as                 #用于das管理服务器
--若删除(带-r删除用户目录):
userdel -r db2inst1
userdel -r db2fenc1
userdel -r db2as

修改密码:
passwd db2inst1
passwd db2fenc1
passwd db2as


root:
cd /db
chmod 777 *

三. 创建实例

[root@localhost instance]# pwd
/opt/ibm/db2/V10.5/instance
[root@localhost instance]# ./db2icrt -u db2fenc1 db2inst1

需要修改诊断日志路径到:
mkdir -p /db/dbdiag/node0000/db2dump
db2 update dbm cfg using DIAGPATH /db/dbdiag/node0000/db2dump

 

四. 建库
建库:
db2 "CREATE DATABASE testdb AUTOMATIC STORAGE YES ON /db/dbdata DBPATH ON /db/dbhome USING CODESET UTF-8 TERRITORY CN COLLATE USING SYSTEM"
db2 update db cfg for  testdb using NEWLOGPATH /db/actlog
db2 update db cfg for  testdb using MIRRORLOGPATH  /db/mirlog
db2 "update db cfg for  testdb using LOGARCHMETH1 DISK:/db/archm1 "

五. db2set设置
 db2set DB2COMM=TCPIP
 db2set -g  DB2ADMINSERVER=db2as          #root用户(su root)
 db2set -g  DB2SYSTEM=hadr2_primary       #root用户(su root)

建议设置的变量:
db2set DB2CODEPAGE=1208      #这里最好和db cfg的Database code page一致
db2set DB2FCMCOMM=TCPIP4
db2set AUTOSTART=YES
手工新建库之后建议至少配置以上7个环境变量。

六. dbm cfg的svcename配置
db2 update dbm cfg using SVCENAME DB2_db2inst1
/db/dbhome/db2inst1/sqlib/db2nodes.cfg配置hostname为
0  hadr2_primary  0

 

七. 创建表空间
db2 "create bufferpool bp32k size 10000 pagesize 32k"
创建一个large的DMS的表空间:
db2 "create large tablespace tbs_data pagesize 32k managed by database using (file '/db/dbdata/db2inst1/NODE0000/TESTDB/T0000004/C0000000.LRG' 100M) extentsize 32 prefetchsize automatic bufferpool bp32k NO FILE SYSTEM CACHING"
创建一个SMS的系统临时表空间:
db2 "CREATE TEMPORARY TABLESPACE tbs_temp PAGESIZE 32K MANAGED BY SYSTEM USING  ('/db/dbdata/db2inst1/NODE0000/TESTDB/T0000005/C0000000.TMP' ) BUFFERPOOL BP32K"
创建一个自动存储的表空间:
db2 "CREATE TABLESPACE tbs_index PAGESIZE 32K BUFFERPOOL BP32K"

八. 建表,造一些数据
db2 "create table TEST.TEST_DATA(col1 char(100), col2 char(10)) in tbs_data";
db2 "begin atomic declare i int default 0; while (i<5000) do insert into TEST.TEST_DATA  values('aaa'||char(i), 'bbb'||char(i)); set i=i+1; end while; end"

 


==========================================================
=在另一个主机standby上执行上述步骤
===========================================================

=======================================hadr2_stdby(192.168.234.133)

一. 创建DB2相关的路径

先新建虚拟机hadr2_stdby,大小为8G
然后通过VMware加一个盘,10G。 分成1个分区,建一个pv,vg,7个lv
(hadr2_primary端加了2个盘,2个盘共分了7分区,7个PV,两个vg,7个lv, 其实没必要分这么多,只需要按hadr2_stdby加一个盘分1个分区,1个vg,7个lv即可)

1. 通过vmware加盘:
Disk /dev/sdb: 10.7 GB

2. 分盘(分区)fdisk  /dev/sdb, n, 只分一个

3. 把ID从83改为8e

4. 建pv
把新建的分区变为pv:
pvcreate /dev/sdb1

5. 建vg
vgcreate db2_vg /dev/sdb1

6. 建lv
lvcreate  -L 1024M -n actlog_lv db2_vg
lvcreate  -L 1536M -n archm1_lv db2_vg
lvcreate  -L 4608M -n dbdata_lv db2_vg
lvcreate  -L 512M -n dbdiag_lv db2_vg
lvcreate  -L 1024M -n dbhome_lv db2_vg
lvcreate  -L 512M -n manage_lv db2_vg
lvcreate  -L 1020M -n mirlog_lv db2_vg

7. 建文件系统(格式化lv)
mkfs.ext4 /dev/db2_vg/actlog_lv
mkfs.ext4 /dev/db2_vg/archm1_lv
............

8 创建mount点
mkdir -p /db/actlog
mkdir -p /db/archm1
mkdir -p /db/dbdata
mkdir -p /db/dbdiag
mkdir -p /db/dbhome
mkdir -p /db/manage
mkdir -p /db/mirlog


9 mount
mount /dev/db2_vg/actlog_lv /db/actlog
mount /dev/db2_vg/archm1_lv /db/archm1
mount /dev/db2_vg/dbdata_lv /db/dbdata
mount /dev/db2_vg/dbdiag_lv /db/dbdiag
mount /dev/db2_vg/dbhome_lv /db/dbhome
mount /dev/db2_vg/manage_lv /db/manage
mount /dev/db2_vg/mirlog_lv /db/mirlog

检查:  df -h
/dev/mapper/db2_vg-actlog_lv  976M  2.6M  907M   1% /db/actlog
/dev/mapper/db2_vg-archm1_lv  1.5G  4.5M  1.4G   1% /db/archm1
/dev/mapper/db2_vg-dbdata_lv  4.4G   18M  4.1G   1% /db/dbdata
/dev/mapper/db2_vg-dbdiag_lv  488M  780K  452M   1% /db/dbdiag
/dev/mapper/db2_vg-dbhome_lv  976M  2.6M  907M   1% /db/dbhome
/dev/mapper/db2_vg-manage_lv  488M  780K  452M   1% /db/manage
/dev/mapper/db2_vg-mirlog_lv  988M  2.6M  919M   1% /db/mirlog

(9) 设置主机启动自动挂载
在/etc/fstab最后面加上:
/dev/mapper/db2_vg-actlog_lv  /db/actlog  ext4 defaults 0 0
/dev/mapper/db2_vg-archm1_lv  /db/archm1  ext4 defaults 0 0
/dev/mapper/db2_vg-dbdata_lv  /db/dbdata  ext4 defaults 0 0
/dev/mapper/db2_vg-dbdiag_lv  /db/dbdiag  ext4 defaults 0 0
/dev/mapper/db2_vg-dbhome_lv  /db/dbhome  ext4 defaults 0 0
/dev/mapper/db2_vg-manage_lv  /db/manage  ext4 defaults 0 0
/dev/mapper/db2_vg-mirlog_lv  /db/mirlog  ext4 defaults 0 0

 

10. 修改文件系统路径权限:
root:
cd /db
chmod 777 *


二.  安装DB2软件, 创建用户
安装DB2软件:
[root@localhost server_t]# pwd
/db2_soft/server_t
[root@localhost server_t]# ./db2_install
注册:
[root@localhost adm]# pwd
/opt/ibm/db2/V10.5/adm
[root@localhost adm]# ./db2licm -a  /db2_soft/db2aese_c_V10.5.lic

创建数据库相关用户:
groupadd -g 2000 db2iadm1
groupadd -g 2001 db2fadm1
groupadd -g 2002 db2asgrp
useradd -m -g db2iadm1 -d /db/dbhome/db2inst1 -m db2inst1         #实例用户
useradd -m -g db2fadm1 -d /db/dbhome/db2fenc1 -m db2fenc1      #fence用户, 实例在fence用户下创建(参考5)
useradd -m -g db2asgrp -d /db/dbhome/db2as -m db2as                 #用于das管理服务器
--若删除(带-r删除用户目录):
userdel -r db2inst1
userdel -r db2fenc1
userdel -r db2as

修改密码:
passwd db2inst1
passwd db2fenc1
passwd db2as


三. 创建实例

[root@localhost instance]# pwd
/opt/ibm/db2/V10.5/instance
[root@localhost instance]# ./db2icrt -u db2fenc1 db2inst1

需要修改诊断日志路径到:
mkdir -p /db/dbdiag/node0000/db2dump
db2 update dbm cfg using DIAGPATH /db/dbdiag/node0000/db2dump

四. 修改主机名
root修改/etc/hosts主机名: 192.168.234.133 hadr2_stdby

五. dbm cfg的svcename配置
db2 update dbm cfg using SVCENAME DB2_db2inst1
/db/dbhome/db2inst1/sqlib/db2nodes.cfg配置hostname为
0  hadr2_stdby  0

六. 修改db2set设置
 db2set DB2COMM=TCPIP
 db2set -g  DB2ADMINSERVER=db2as          #root用户(su root)
 db2set -g  DB2SYSTEM=hadr2_stdby       #root用户(su root)

建议设置的变量:
db2set DB2CODEPAGE=1208      #这里最好和db cfg的Database code page一致
db2set DB2FCMCOMM=TCPIP4
db2set AUTOSTART=YES
手工新建库之后建议至少配置以上7个环境变量。


db2stop
重启主机

 

七. 备份恢复
在primary做在线全备
db2 "backup db testdb online"
在standby端做恢复,不做前滚
db2 "restore db testdb from . taken at 20200818171210"

八. 配置hadr
(1) 两端/etc/hosts 都添加双方信息:
192.168.234.130 hadr2_primary
192.168.234.133 hadr2_stdby

(2)两端都 vi /etc/services 添加:
############## hadr ############
hadr2_svc_pri    61000/tcp
hadr2_svc_stb    61001/tcp

(2.1)Linux放开两边的dbm实例端口和hadr的svc端口
primary:
firewall-cmd --zone=public --add-port=60000/tcp --permanent
firewall-cmd --zone=public --add-port=61000/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

standby:
firewall-cmd --zone=public --add-port=60000/tcp --permanent
firewall-cmd --zone=public --add-port=61001/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

(3)修改db cfg的hadr相关的配置
primary:
db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_HOST hadr2_primary
db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_SVC hadr2_svc_pri
db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_HOST hadr2_stdby
db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_SVC hadr2_svc_stb
db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_INST db2inst1
db2 UPDATE DB CFG FOR testdb USING HADR_SYNCMODE ASYNC
db2 UPDATE DB CFG FOR testdb USING HADR_PEER_WINDOW 300
db2 UPDATE DB CFG FOR testdb USING HADR_TIMEOUT 120
    
db2 UPDATE DB CFG FOR testdb USING INDEXREC RESTART LOGINDEXBUILD ON

standby:
db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_HOST hadr2_stdby
db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_SVC hadr2_svc_stb
db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_HOST hadr2_primary
db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_SVC hadr2_svc_pri
db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_INST db2inst1
db2 UPDATE DB CFG FOR testdb USING HADR_SYNCMODE ASYNC
db2 UPDATE DB CFG FOR testdb USING HADR_PEER_WINDOW 300
db2 UPDATE DB CFG FOR testdb USING HADR_TIMEOUT 120
    
db2 UPDATE DB CFG FOR testdb USING INDEXREC RESTART LOGINDEXBUILD ON

(4)配置备机可读
两端都设置:
db2set DB2_HADR_ROS=ON
db2set DB2_STANDBY_ISO=UR

(5) 启动hadr
在standby端:
 db2 start hadr on db testdb as standby
在primary端:
 db2 start hadr on db testdb as primary
 
(6)停止hadr
备端:
db2 deactivate db testdb
db2 stop hadr on db testdb
主端:
db2 stop hadr on db testdb

 

 


=============================================================
=  以hadr standby所在的机器为例,当hadr2_stdby出现故障了,如何把机器切换到备机hadr2_stdby_ha1
=============================================================


一.  安装DB2软件
安装DB2软件需要和接管主机的DB2软件安装位置一致:
[root@localhost server_t]# pwd
/db2_soft/server_t
[root@localhost server_t]# ./db2_install
注册:
[root@localhost adm]# pwd
/opt/ibm/db2/V10.5/adm
[root@localhost adm]# ./db2licm -a  /db2_soft/db2aese_c_V10.5.lic

 

二. 创建和接管主机相同的文件系统路径
mkdir -p /db/actlog
mkdir -p /db/archm1
mkdir -p /db/dbdata
mkdir -p /db/dbdiag
mkdir -p /db/dbhome
mkdir -p /db/manage
mkdir -p /db/mirlog

这些路径都是Db2实例和库相关的路径,后面把磁盘切过来之后直接mount上去。


三. 创建DB2相关的用户

创建数据库相关用户:
groupadd -g 2000 db2iadm1
groupadd -g 2001 db2fadm1
groupadd -g 2002 db2asgrp
useradd -m -g db2iadm1 -d /db/dbhome/db2inst1 -m db2inst1         #实例用户
useradd -m -g db2fadm1 -d /db/dbhome/db2fenc1 -m db2fenc1      #fence用户, 实例在fence用户下创建(参考5)
useradd -m -g db2asgrp -d /db/dbhome/db2as -m db2as                 #用于das管理服务器
--若删除(带-r删除用户目录):
userdel -r db2inst1
userdel -r db2fenc1
userdel -r db2as

修改密码:
passwd db2inst1
passwd db2fenc1
passwd db2as

 

四. 修改/etc/hosts和/etc/services文件相关的配置
当前新主机ip为192.168.234.135
修改/etc/hosts文件,使其主机名为hadr2_stdby_ha1,和对接的主机的主机名不同,ip也不同,为自己的ip, 如果有hadr相关的配置需要都加上去
192.168.234.130 hadr2_primary    #原hadr中的primary主机
192.168.234.135 hadr2_stdby_ha1      #本机IP和主机名,主机名设置为何ha接管主机名相同
并且需要修改原hadr中的primary的/etc/hosts文件,把接管主机的ip改成这个新主机的ip和主机名,使他们保持一致:
192.168.234.130 hadr2_primary
192.168.234.135 hadr2_stdby_ha1     #133改成135


修改/etc/services文件,添加和对接主机相同的数据库相关的内容(无需任何改动,直接cp过来):
DB2_db2inst1    60000/tcp
DB2_db2inst1_1  60001/tcp
DB2_db2inst1_2  60002/tcp
DB2_db2inst1_3  60003/tcp
DB2_db2inst1_4  60004/tcp
DB2_db2inst1_END        60005/tcp

############## hadr ############
hadr2_svc_pri   61000/tcp
hadr2_svc_stb   61001/tcp


===================================================
以上四步结束之后,init 0 停掉主机。


五. 通过vmware工具添加新盘,把对接主机DB2实例和数据库所在的盘添加过来。启动主机。


通过lvscan/pvscan/vgscan发现添加过来的存储都能认到

[root@hadr2_stdby ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<7.00 GiB / 0    free]
  PV /dev/sdb1   VG db2_vg          lvm2 [<10.00 GiB / 0    free]
  Total: 2 [16.99 GiB] / in use: 2 [16.99 GiB] / in no VG: 0 [0   ]
[root@hadr2_stdby ~]# vgscan
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
  Found volume group "db2_vg" using metadata type lvm2
[root@hadr2_stdby ~]# lvscan
  ACTIVE            '/dev/centos/swap' [820.00 MiB] inherit
  ACTIVE            '/dev/centos/root' [<6.20 GiB] inherit
  ACTIVE            '/dev/db2_vg/actlog_lv' [1.00 GiB] inherit
  ACTIVE            '/dev/db2_vg/archm1_lv' [1.50 GiB] inherit
  ACTIVE            '/dev/db2_vg/dbdata_lv' [4.50 GiB] inherit
  ACTIVE            '/dev/db2_vg/dbdiag_lv' [512.00 MiB] inherit
  ACTIVE            '/dev/db2_vg/dbhome_lv' [1.00 GiB] inherit
  ACTIVE            '/dev/db2_vg/manage_lv' [512.00 MiB] inherit
  ACTIVE            '/dev/db2_vg/mirlog_lv' [1020.00 MiB] inherit
 
df -h没有认到,需要做mount
把添加过来的接管主机的存储做mount挂载到本地新建的文件系统上
1. mount
mount /dev/db2_vg/actlog_lv /db/actlog
mount /dev/db2_vg/archm1_lv /db/archm1
mount /dev/db2_vg/dbdata_lv /db/dbdata
mount /dev/db2_vg/dbdiag_lv /db/dbdiag
mount /dev/db2_vg/dbhome_lv /db/dbhome
mount /dev/db2_vg/manage_lv /db/manage
mount /dev/db2_vg/mirlog_lv /db/mirlog

2. 设置主机启动自动挂载
在/etc/fstab最后面加上:
/dev/mapper/db2_vg-actlog_lv  /db/actlog  ext4 defaults 0 0
/dev/mapper/db2_vg-archm1_lv  /db/archm1  ext4 defaults 0 0
/dev/mapper/db2_vg-dbdata_lv  /db/dbdata  ext4 defaults 0 0
/dev/mapper/db2_vg-dbdiag_lv  /db/dbdiag  ext4 defaults 0 0
/dev/mapper/db2_vg-dbhome_lv  /db/dbhome  ext4 defaults 0 0
/dev/mapper/db2_vg-manage_lv  /db/manage  ext4 defaults 0 0
/dev/mapper/db2_vg-mirlog_lv  /db/mirlog  ext4 defaults 0 0

3. 修改db2nodes.cfg文件,把原来接管主机的主机名改成本机的主机名
[db2inst1@hadr2_stdby sqllib]$ pwd
/db/dbhome/db2inst1/sqllib
[db2inst1@hadr2_stdby sqllib]$ cat db2nodes.cfg
0 hadr2_stdby_ha1 0

4. 修改hadr配置中的本机主机名,把原来接管主机的主机名改成本机的主机名
db2 update db cfg for testdb using HADR_LOCAL_HOST hadr2_stdby_ha1

5. 把接管主机对应的primary主机(hadr2_primary)上的/etc/hosts上做修改,把原来接管主机的主机名改成本机的主机名,和当前新主机的该文件保持一致:
192.168.234.130 hadr2_primary
192.168.234.135 hadr2_stdby_ha1

6. 修改接管主机对应的primary主机(hadr2_primary)的hadr配置中的HADR_REMOTE_HOST改为新建主机名
db2 update db cfg for testdb using HADR_REMOTE_HOST  hadr2_stdby_ha1


六. 启动新主机实例,和启动hadr
[db2inst1@hadr2_stdby_ha1 ~]$ db2start
08/19/2020 23:18:52     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
[db2inst1@hadr2_stdby_ha1 ~]$
启动hadr:
[db2inst1@hadr2_stdby_ha1 ~]$ db2 start hadr on db testdb as standby
DB20000I  The START HADR ON DATABASE command completed successfully.

原hadr中的primary主机启动hadr:
[db2inst1@hadr2_primary ~]$ db2 start hadr on db testdb as primary
DB20000I  The START HADR ON DATABASE command completed successfully.

db2pd -d testdb -hadr查看状态处于PEER状态,一切正常。 切换成功。


以上这些步骤,一到四是一次性的,提前做好即可。第五步可以写到一个脚本里。所以在切换ha的时候只需要把存储加载过来,然后直接执行一个第五步的脚本即可实现。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值