第一章 环境规划
操作系统 | CentOS Linux release 7.6.1810 (Core) |
处理器 | 2 |
内存 | 2G |
硬盘 | 20G |
主机名称 | db2_primaty,db2_standby |
IP地址 | 192.168.157.140 / 141 |
数据库 | v10.5fp8_linuxx64_server_t.tar.gz |
第二章 主机配置
2.1、修改主机名
vi /etc/hostname
#主 db2_primaty #备 db2_standby |
注意:改完重启主机
reboot
2.2、配置静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#主 BOOTPROTO=static # 使用静态IP地址,默认为dhcp IPADDR=192.168.157.140 # 设置的静态IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.157.2 # 网关地址 DNS1=192.168.157.2 # DNS服务器 #备 BOOTPROTO=static # 使用静态IP地址,默认为dhcp IPADDR=192.168.157.141 # 设置的静态IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.157.2 # 网关地址 DNS1=192.168.157.2 # DNS服务器 |
注意:配置完需要重启网卡
service network restart
2.3、配置ip映射
vi /etc/hosts
#主备都需要添加 192.168.157.140 db2_primaty 192.168.157.141 db2_standby |
2.4、配置端口号
2.4.1 查看端口使用情况

2.4.2 添加端口
vi /etc/services
#主备都需要添加 DB2_HADR_P 50031/tcp DB2_HADR_S 50032/tcp |
2.5、关闭防火墙
#查看 firewall状态 firewall-cmd --state #停止firewall systemctl stop firewalld.service #禁止firewall开机启动 systemctl disable firewalld.service |
第三章 DB2数据库搭建
3.1解压安装包
tar -zxvf v10.5fp8_linuxx64_server_t.tar.gz

3.2 检查环境是否满足安装要求

3.2.1 缺少依赖的包
/lib/libpam.so* kernel-devel gcc-c++ cpp gcc |
3.2.2 安装相应依赖包
yum install cpp –y yum install gcc gcc-c++ -y yum install libstdc++.so.5 –y yum install "kernel-devel-uname-r == $(uname -r)" yum install -y glibc* libstdc* |
3.2.3 解决缺少libpam.so*错误
[root@db2_primary server_t]# find / -name libpam.so* /usr/lib64/libpam.so.0 /usr/lib64/libpam.so.0.83.1 /usr/lib64/libpam.so [root@db2_primary server_t]# rpm -qf /usr/lib64/libpam.so.0 pam-1.1.8-22.el7.x86_64 [root@db2_primary server_t]# rpm -qf /usr/lib64/libpam.so.0.83.1 pam-1.1.8-22.el7.x86_64 [root@db2_primary server_t]# rpm -qf /usr/lib64/libpam.so pam-devel-1.1.8-22.el7.x86_64 [root@db2_primary server_t]# yum install -y pam* |
3.3 关闭selinux
vi /etc/selinux/config
#添加 SELINUX=disabled |
注意:修改完需要重启
reboot
3.4 db2数据库安装
./db2_install |
安装完成

3.5 创建实例
使用root 用户进行操作
3.5.1 主机添加相应的用户和组
groupadd -g 2000 db2iadml groupadd -g 2001 db2fadml useradd -m -g db2iadml -d /home/db2instl db2instl useradd -m -g db2fadml -d /home/db2fencl db2fencl |
3.5.2 创建实例
切换到db2数据库安装目录进行实例的创建
cd /opt/ibm/db2/V10.5/instance db2icrt -u db2fencl db2instl |
切换到相应目录进行 lic 注册
cd /opt/ibm/db2/V10.5/adm ./db2licm -a /tmp/DB2_tmp_pck/db2aese_c.lic |
3.5.3 启动实例
#切换到相应实例用户 su – db2instl #启动实例 db2start #创建样板数据库 db2sampl |
第四章 Hadr 搭建
4.1、开启归档日志
db2 update db cfg using LOGARCHMETH1 DISK:/home/db2instl/log |
设置完归档后,建议重新激活数据库使参数生效,同时必须对数据库进行一次备份(设置归档后,数据库处于backup pending状态)
db2 deactivate db <dbname> db2 terminate db2 backup db <dbname> db2 activate db <dbname> |
4.2主数据库参数配置
#配置主数据库参数 db2 update db cfg for SAMPLE using HADR_LOCAL_HOST db2_primaty db2 update db cfg for SAMPLE using HADR_LOCAL_SVC DB2_HADR_P db2 update db cfg for SAMPLE using HADR_REMOTE_HOST db2_standby db2 update db cfg for SAMPLE using HADR_REMOTE_SVC DB2_HADR_S db2 update db cfg for SAMPLE using HADR_REMOTE_INST db2instl db2 update db cfg for SAMPLE using HADR_TIMEOUT 60 db2 update db cfg for SAMPLE using hadr_peer_window 0 db2 update db cfg for SAMPLE using HADR_SYNCMODE NEARSYNC db2 update db cfg for SAMPLE using LOGINDEXBUILD on db2 update db cfg for SAMPLE using INDEXREC RESTART |
4.3、脱机备份数据库
4.3.1 脱机备份
db2 force applications all --强制退出所有连接 db2 deactivate db sample db2 backup db sample to ~/bak db2 activate db sample |

20190417020435
4.3.2 将备份镜像传送到备机服务器上
scp bak/SAMPLE.0.db2instl.DBPART000.20190417020435.001 db2instl@db2_standby:~/bak/ |
4.3.3 备机恢复数据库镜像
修改备机注册变量
#启用数据库可读功能 db2set DB2_HADR_ROS=on #设置活动备用数据库上的隔离级别 db2set DB2_STANDBY_ISO=UR |
进行镜像恢复
db2 restore database SAMPLE from ~/bak taken at 20190417020435 WITHOUT PROMPTING |
4.3.4 查看数据库状态
db2 get db cfg for sample | grep -i rollforward |

注释:恢复完成后首先确保备机数据库状态是rollforward-pending 状态,再启动hadr
4.3.5 备数据库参数修改
#修改备库参数 db2 update db cfg for SAMPLE using HADR_LOCAL_HOST db2_standby db2 update db cfg for SAMPLE using HADR_LOCAL_SVC DB2_HADR_S db2 update db cfg for SAMPLE using HADR_REMOTE_HOST db2_primaty db2 update db cfg for SAMPLE using HADR_REMOTE_SVC DB2_HADR_P db2 update db cfg for SAMPLE using HADR_REMOTE_INST db2instl |
4.3.6 启hadr
#先从从备机启动hadr db2 start hadr on database SAMPLE as standby #在启动主机hadr db2 start hadr on database SAMPLE as primary |
4.3.7 查看hadr状态
#查看状态 db2pd -d SAMPLE -hadr |
主数据库现实的内容

备数据库显示的内容

第五章 测试
5.1 hadr切换
db2 takeover hadr on db sample |
上述命令只能从standby端执行切换,进行切换前需要查看hadr的是否处于peer状态,如果是怎可以正常切换。
除了上面命令实现正常切换之外,还可以通过使用 by force强制切换来完成角色的切换。但是此命令将原来的standby端切换为primary ,而原来的primary端并不会切换为standby ,而是出于非活跃状态,此时db2_primaty服务器上的数据库,则不能直接启动成为standby角色,需要从主数据 备份镜像重新初始化数据库然后才能启动成为standby角色。如下图所示。注意:如果hadr处于非peer状态时,如果使用强制命令进行切换,非常可能会造成数据的丢失。
db2 takeover hadr on db sample by force |

5.2 db2 primaty故障hadr切换
5.2.1 第一步

模拟主库故障,停止db2_primaty

5.2.2 第二步
1、备数据库db2_standby 进行接管

2、查看db2_standby角色,是否成功接管

3、查看数据是否同步成功

5.2.3 第三步
1、b2_primary 以standby角色进行启动hadr

2、重新接管primary角色(注释:可按照需求是否重新接管primary角色)
重新接管完毕,查看db2_primaty 状态

查看db2_standby 状态

5.3 db2_standby宕机恢复

步骤1,停止db2_primaty 的hadr
db2 stop hadr on db sample |
步骤2,重启激活db2_standby数据库,并起hadr
db2 deactivate db sample db2 activate db sample db2 start hadr on db sample as standby |
步骤3,起db2_primaty 的hadr
db2 start hadr on db sample as primary |
恢复成功,查看状态

5.4 备注
日志前滚的时候发生了下面的LSN错误,对HADR环境造成了不可修复的破坏,因此HADR需要重建。
FUNCTION: DB2 UDB, High Availability Disaster Recovery, hdrEduP, probe:20485
MESSAGE : HADR Pair validation failed. Standby is ahead of Primary. Standby
LSN: 000000000D80F390 Primary LSN: 000000000D79FFFF
DB2_HADR_BUF_SIZE此变量指定备用日志接收缓冲区大小(以日志页为单位)
如果 STANDBY_RECV_BUF_PERCENT(它指示已使用的备用数据库日志接收缓冲区的百分比)的值接近 100,那么您应该增大 DB2_HADR_BUF_SIZE。如果无论如何都不能影响 primary 的性能时,当 STANDBY_RECV_BUF_PERCENT值为50以上时,应该选择停止standby 的hadr线程。




