yhl71
作者yhl71·2019-05-23 10:55
数据库架构师·某公司

在单个REDHAT虚机中安装Db2开发版中的HADR功能

字数 3881阅读 4058评论 2赞 3

一,前言

本文描述了如何在单个REDHAT中,在Db2 11.1开发版中搭建HADR,方便用户快速的掌握Db2的HADR技术。
如果用两个虚机来做,虽然更接近实际的生产环境,但单个笔记本上很可能没有足够的内存来运行两个虚机;但计算机技术发展很快,很可能过几年之后这也不成为问题。

二,安装前置条件检查

运行安装包中的db2prereqcheck程序,确认所有的安装条件都已经满足,才可以保证数据库实例创建成功。

三,创建实例所需要的用户和组

groupadd db2iadm1
groupadd db2iadm2
groupadd db2fadm1
groupadd db2fadm2
useradd -g db2iadm1 -d /home/db2inst1 -m db2inst1
useradd -g db2iadm2 -d /home/db2inst2 -m db2inst2
useradd -g db2fadm1 -d /home/db2fenc1 -m db2fenc1
useradd -g db2fadm2 -d /home/db2fenc2 -m db2fenc2
passwd db2inst1
passwd db2fenc1
passwd db2inst2
passwd db2fenc2

四,创建实例

使用root用户
cd /opt/ibm/db2/V11.1/instance
./db2icrt -s ese -u db2fenc1 db2inst1
./db2icrt -s ese -u db2fenc2 db2inst2

五,增加HADR服务所使用的端口号

修改 /etc/services,增加两行
hadr_inst1 70001/tcp
hadr_inst2 70002/tcp

六,准备数据库的表空间目录

mkdir /db2data1
mkdir /db2data2
chown db2inst1:db2iadm1 db2data1
chown db2inst1:db2iadm1 db2data2
mkdir /db2inst2
chown db2inst2:db2iadm2 /db2inst2

七,在db2inst1实例中创建数据库

db2 "create db nbdb on /db2data1,/db2data2"

八,修改HADR需要的参数

mkdir -p /db2data1/db2arch
db2 connect to nbdb
db2 update db cfg using logindexbuild on
db2 update db cfg using indexrec restart
db2 update db cfg using logarchmeth1 disk:/db2data1/db2inst1
不允许不记日志的操作:
db2 update db cfg using BLOCKNONLOGGED YES

db2 terminate
db2 deactivate db nddb
对数据库做假备份
db2 backup db nbdb to /dev/null

九,创建联机备份,后面会在db2inst2上进行恢复

mkdir -p /tmp/db2backup
cd /tmp/db2backup
db2 backup db nbdb online
chown db2inst2:db2iadm2 *
cd ..
chmod 777 db2backup

十,修改primary实例的HADR相关参数

db2 connect to nbdb
db2 get db cfg | grep -i hadr
db2 update db cfg using HADR_LOCAL_HOST 192.168.1.6
db2 update db cfg using HADR_remote_HOST 192.168.1.6
db2 update db cfg using HADR_remote_svc hadr_inst2
db2 update db cfg using HADR_local_svc hadr_inst1
db2 update db cfg using HADR_remote_inst db2inst2

十一,使HADR参数生效

db2 deactivate db nbdb
db2 activate db nbdb

十二,设置HADR相关的注册变量

db2set DB2_HADR_SOSNDBUF=1024000
db2set DB2_HADR_SORCVBUF=1024000
db2set DB2_HADR_ROS=on
db2set DB2_HADR_ROS_AVOID_REPLAY_ONLY_WINDOW=on
db2set DB2_STANDBY_ISO=UR
db2 terminate

十三,重启db2inst1实例

db2stop force
db2start

十四,在db2inst2实例中恢复数据库

由于是在同一台机器上,所以需要使用重定向恢复
cd /tmp/backup
db2 restore db nbdb redirect generate script restore.sql
修改restore.sql中的恢复路径信息
主要修改的地方如下:

ON '/db2inst2'
-- , '/db2data2'

DBPATH ON '/home/db2inst2'
INTO NBDB

SET STOGROUP PATHS FOR IBMSTOGROUP
ON '/db2inst2'
-- , '/db2data2'
然后执行下面的命令进行恢复
db2 -tvf restore_new.sql
注意不需要执行前滚操作,HADR在启动之后会自动从primary追日志。

十五,修改db2inst2上HADR相关参数

db2 update db cfg for nbdb using hadr_local_host 192.168.1.6
db2 update db cfg for nbdb using hadr_remote_host 192.168.1.6
db2 update db cfg for nbdb using hadr_remote_svc hadr_inst1
db2 update db cfg for nbdb using hadr_local_svc hadr_inst2
db2 update db cfg for nbdb using hadr_remote_inst db2inst1
db2 update db cfg for nbdb using BLOCKNONLOGGED YES
db2 update db cfg for nbdb using logarchmeth1 disk:/db2data2/db2arch

十六,修改db2inst2上的注册变量

db2set -lr | grep HADR
db2set DB2_HADR_SOSNDBUF=1024000
db2set DB2_HADR_SORCVBUF=1024000
db2set DB2_HADR_ROS=on
db2set DB2_HADR_ROS_AVOID_REPLAY_ONLY_WINDOW=on
db2set -lr | grep STAND
db2set DB2_STANDBY_ISO=UR
db2 terminate

十七,启动db2inst2,作为standby实例

db2stop force
db2start
db2 start hadr on db nbdb as standby

十八,启动db2inst1作为 primary实例

db2 start hadr on db nbdb as primary
db2 activate db nbdb
确认HADR的状态:
db2pd -db nbdb -hadr

十九,验证HADR能够正常工作

db2 connect to nbdb
db2pd -db nbdb -tab
db2 "create table t2 (c1 int)"

二十,给角色授权

由于是两个不同的用户,因此需要将t1上的权限授权给db2inst2用户;
可能需要授权的用户很多,因此这里采用角色授权;
$ db2 create role myrole
$ db2 grant all on t2 to role myrole
$db2 grant role myrole to user db2inst2
$db2 bind @db2ubind.lst blocking all grant public
$db2 bind @db2cli.lst blocking all grant public
在db2inst2上连接数据库,你将看到t2表的数据被复制了过来:
[db2inst2@node01 ~]$ db2 connect to nbdb

Database Connection Information

Database server = DB2/LINUXX8664 11.1.4.4
SQL authorization ID = DB2INST2
Local database alias = NBDB

[db2inst2@node01 ~]$ db2 "select * from db2inst1.t2"

C1

      1

1 record(s) selected.

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论2 条评论

waitfeiynwaitfeiyn系统工程师某公司
2019-06-10 10:12
请问,在Sdandby上还需要执行这几个操作么? db2 update db cfg using logindexbuild on db2 update db cfg using indexrec restart db2 update db cfg using logarchmeth1

waitfeiyn@yhl71 谢谢指导!!

2019-06-11 17:24

yhl71@waitfeiyn 需要的,standby将来有可能会切换为primary。

2019-06-11 16:29
michael1983michael1983联盟成员技术总监某证券
2019-05-23 11:47
这个厉害,单机安装,谢谢分享
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

作者其他文章

相关文章

相关问题

相关资料

X社区推广