暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

db2 单机安装部署

原创 zhou 2024-07-27
200
基础环境规划

在准备安装软件前,需要大致规划下,安装什么版本,使用系统版本,是否有兼容性问题,预留多少资源给DB2,是否swap等。

软硬件兼容检查

在安装之前需要确认准备的OS版本与数据库版本是否一致

http://www-01.ibm.com/support/docview.wss?uid=swg27038033

打开上面地址,选择对应数据库版本(如db2 AESE v10.5),选择linux系统,会弹出如下兼容列表


20240726162813image.png
注:为了避免意外(不可预知问题),正式环境最好遵循兼容列表来进行搭配,也是官方验证过的support list。

当然本次为了安装找不到RHEL 7版本,只能用来轻量云VM的centos 8来演示

软硬件准备

1.准备linux机器一台:云主机/本地VM均可,本列系统为:CentOS Stream release 8

2.准备数据库软件:v10.5fp11_linuxx64_server_t.tar

资源规划

内存:系统内存2G,分配给db2 64M使用

官方建议是:DB2 数据库系统至少需要 256 MB RAM

swap: 不使用

端口:50000

数据库目录: /data/db2data

环境准备
配置host
cat > /etc/hosts << here
127.0.0.1 localhost localhost.localdomain localhost4.localdomain4
10.0.4.7 node01
here
配置端口services
echo 'db2inst1_pri   60010/tcp'  >>  /etc/services
创建用户

安装DB2需要三个用户组/用户,通常以root来安装

缺省用户

用户 实例用户名 实例组名
实例所有者 db2inst1 db2iadm1
受防护的用户 db2fenc1 db2fadm1
DB2 管理服务器用户 dasusr1 dasadm1

注:

实例所有者主目录是将在其中创建 DB2 实例的位置。

受防护的用户用于在 DB2 数据库所使用的地址空间之外运行用户定义的函数 (UDF) 和存储过程。

DB2 管理服务器用户*的用户标识用于在系统上运行 DB2 管理服务器

创建组

groupadd -g 1101 db2iadm1
groupadd -g 1102 db2fadm1
groupadd -g 1103 dasadm1

为每个组创建用户

useradd -u 1201 -g db2iadm1 -m -d /home/db2inst1 db2inst1
useradd -u 1202 -g db2fadm1 -m -d /home/db2fenc1 db2fenc1 
useradd -u 1203 -g dasadm1 -m -d /home/dasusr1 dasusr1

设置初始密码:

passwd db2inst1
passwd db2fenc1
passwd dasusr1
数据库目录

创建数据库目录,活动日志,归档日志等目录

mkdir -p /db2data
mkdir -p /db2log/actlog/
mkdir -p /db2log/arclog
mkdir -p /db2diag/db2dump/
chown db2inst1:db2iadm1 -R /db2data
chown db2inst1:db2iadm1 -R /db2log/actlog/
chown db2inst1:db2iadm1 -R /db2log/arclog
chown db2inst1:db2iadm1 -R /db2diag/db2dump/
依赖包安装
yum -y install cpp  install gcc gcc-c++ kernel-source binutils  pam-*.el8.i686    pam-*.el8.x86_64
yum -y install  iscsi* *compat-libstdc++* *ksh* *pam* pam*86* *compat-libstdc*  perl-Sys-Syslog rsh*
yum -y install *libstdc* libstdc++.so.6 libstdc++.so.5 libaio* glibc*
yum -y install pam-devel-* pam-*.i686*
yum -y install kernel-devel* gcc gcc-c++ kernel-source pam-32bit* glibc-locale-32bit* libstdc-32bit*
yum -y install libstdc*i686 pam*i686 gcc* kernel-devel sg3_utils* sg_persist*
用户ulimit设置

ulimit设置

cat >> /etc/security/limits.conf <<here
*     -     nofile    65535
*     -     nproc     65535
*     -     stack     unlimited
*     -     core      2048000
db2inst1     -     nofile    65535
db2inst1     -     nproc     65535
db2inst1     -     stack     unlimited
db2inst1     -     core      2048000
here

检查验证

su db2inst1 -c "ulimit -a"
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sestatus
系统参数调整
cat >> /etc/sysctl.conf <<here
kernel.sem=250 1024000 250 4096   
kernel.shmmni=4096
#kernel.shmmax = 2147483648
#2**1024*1024*1024
#kernel.shmall = 134217728
#2*1024*1024*1024/4/1024
kernel.msgmni=16384
kernel.msgmax=65536
kernel.msgmnb=65536
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_keepalive_probes = 6
vm.dirty_background_ratio = 5
vm.dirty_ratio= 15
vm.swappiness= 1
vm.overcommit_memory=1
#禁用zone_reclaim_mode
vm.zone_reclaim_mode=0
here

生效配置

sysctl -p
IPC 内核参数 最低增强设置
kernel.shmmni (SHMMNI) 256 * <RAM 大小,以 GB 计>
kernel.shmmax (SHMMAX) <RAM 大小,以字节计>1
kernel.shmall (SHMALL) 2* <缺省系统页中的 RAM 大小 >2
kernel.sem (SEMMNI) 256 * <RAM 大小,以 GB 计>
kernel.sem (SEMMSL) 250
kernel.sem (SEMMNS) 256 000
kernel.sem (SEMOPM) 32
kernel.msgmni (MSGMNI) 1 024 * <RAM 大小,以 GB 计>
kernel.msgmax (MSGMAX) 65 536
kernel.msgmnb (MSGMNB) 65 536

信号量

System V信号量用于进程间通讯,并发控制、互斥 ;解决多个进程或线程对共享资源的访问问题

SEMMSL 每组中信号量最大数量
SEMMNS 系统中所有信号量的最大数量 SEMMSL *SEMMNI
SEMOPM 系统调用可以同时执行的最大信号量操作的数量
SEMMNI 统中信号量组的最大数量

SEMMNI 解释:

IBM:
应该是系统上需要的最大代理程序数乘以数据库服务器计算机上的逻辑分区数
再加上数据库服务器计算机上的本地应用程序连接数的和的两倍
ORACLE:
2 * sum (process parameters of all database instances on the system) 
+ overhead for background processes + system and other application requirements倍

实际使用验证:

SEMMNI设置过小报错,设置过大SYS CPU 100%  
即设置过小正常连接不能满足,设置过大并发控制量敞开大门,系统充斥共享资源争用消耗
从实际来看与连接数agent关联不唯一,还与操作的共享资源即内存数量有关
核心需要关注的是SEMMNS

消息参数

MSGMNI 参数将影响可以启动的代理程序数;
MSGMAX 参数将影响队列中可以发送的消息的大小,MSGMNB 参数将影响队列的大小
应该将 MSGMAX 参数更改为 64 KB(即,65536 个字节),并且应该将 MSGMNB 增大到 65536
THP

集中式数据库吃大量资源,使用手动大页分配内存可以减少CPU内存管理开销提升性能,但大页对于小块内存分配是种浪费,便衍生了自动分配大页的技术Transparent Huge Page 即THP,在实际使用中发现开启THP自动分配连续大页内存以及频繁的page compact诱发的性能抖动,是极具不稳定因素,通常所有类型数据库都建议关闭THP

echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

cat >> /etc/rc.d/rc.local<<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled;then
        echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;then
        echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod a+x /etc/rc.d/rc.local
DB2安装
解压软件验证依赖
#解压软件
tar -xvf v10.5fp11_linuxx64_server_t.tar.gz
#系统软件包检查
cd server_t
./db2prereqcheck

提示找不大libstdc++.so.5,没办法centos8 这种不在兼容列表的OS安装db2v10.5,建链接欺骗一下(非常规操作,只是在资源有限情况下,演示安装流程)

yum -y install  gcc-c++
yum -y  install libstdc++.so.6
ln -s   /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.5 
ln -s  /usr/lib/libstdc++.so.6  /usr/lib/libstdc++.so.5

再次检查依赖包,提示成功

./db2prereqcheck

Validating "/lib/libpam.so*" ...
   Requirement matched.
DBT3533I  The db2prereqcheck utility has confirmed that all installation prerequisites were met.
安装版本
./db2_install

按提示,输入"yes"默认目录安装,版本选择 SERVER,不安装purescale( 类似ORACLE RAC)

Default directory for installation of products - /opt/ibm/db2/V10.5

***********************************************************
Install into default directory (/opt/ibm/db2/V10.5) ? [yes/no]
yes


Specify one of the following keywords to install DB2 products.

  SERVER
  CONSV
  EXP
  CLIENT
  RTCL

Enter "help" to redisplay product names.

Enter "quit" to exit.

***********************************************************
SERVER
***********************************************************
Do you want to install the DB2 pureScale Feature? [yes/no]
no
DB2 installation is being initialized.

等待300秒左右即可安装完成

Task #1 start
Description: Checking license agreement acceptance
Estimated time 1 second(s)
Task #1 end

Task #2 start
Description: Base Client Support for installation with root privileges
Estimated time 3 second(s)
Task #2 end

……
Task #49 start
Description: Registering DB2 Update Service
Estimated time 30 second(s)
Task #49 end

Task #50 start
Description: Updating global profile registry
Estimated time 3 second(s)
Task #50 end

The execution completed successfully.

For more information see the DB2 installation log at

检查

db2ls
Install Path                       Level   Fix Pack   Special Install Number   Install Date                  Installer UID
---------------------------------------------------------------------------------------------------------------------
/opt/ibm/db2/V10.5              10.5.0.11       11                            Sat Jul 27 02:03:35 2024 CST             0

至此安装已经完成

创建数据库实例和数据库
创建实例

指定 auth 为server, fence user 为 db2fenc1, instance user 为db2inst1

/opt/ibm/db2/V10.5/instance/db2icrt -a server -u db2fenc1 db2inst1

300秒完成安装

DB2 installation is being initialized.

 Total number of tasks to be performed: 4
Total estimated time for all tasks to be performed: 309 second(s)

Task #1 start
Description: Setting default global profile registry variables
Estimated time 1 second(s)
Task #1 end

Task #2 start
Description: Initializing instance list
Estimated time 5 second(s)
Task #2 end

Task #3 start
Description: Configuring DB2 instances
Estimated time 300 second(s)
Task #3 end

Task #4 start
Description: Updating global profile registry
Estimated time 3 second(s)
Task #4 end

The execution completed successfully.

For more information see the DB2 installation log at
"/tmp/db2icrt.log.1274751".
DBI1070I  Program db2icrt completed successfully.

service服务配置

#添加对应端口60000,不存在则设置
vi /etc/services
DB2_db2inst1    60000/tcp

注册变量

#实例注册变量配置
su  - db2inst1
db2 update dbm cfg using AGENT_STACK_SZ 1000 DEFERRED
db2 update dbm cfg using MON_HEAP_SZ AUTOMATIC DEFERRED
db2set db2comm=tcpip
db2set db2codepage=1208
db2set DB2_LOAD_COPY_NO_OVERRIDE=NONRECOVERABLE 
db2set DB2_SKIPINSERTED=ON
db2set DB2_INLIST_TO_NLJN=YES
db2set DB2_MINIMIZE_LISTPREFETCH=Y
db2set DB2_EVALUNCOMMITTED=YES
db2set DB2_SKIPDELETED=ON
db2set DB2_USE_ALTERNATE_PAGE_CLEANING=ON
db2 terminate 
license检查与添加
db2licm -l  

Product name:                     "DB2 Advanced Enterprise Server Edition"
License type:                     "Trial"
Expiry date:                      "10/23/2024"
Product identifier:               "db2aese"
Version information:              "10.5"

如果有license则添加

db2licm -a db2_aese.lic 
建库
#建库调整参数,开归档
db2start
db2 "create db testdb automatic storage yes on /db2data dbpath on /db2data using codeset UTF-8 TERRITORY CN PAGESIZE 16384"
db2 connect to testdb
db2 get db cfg for testdb |grep -i log

考虑到VM的系统资源,调整参数配置

db2 update dbm cfg using SVCENAME 'db2inst1_pri'
db2 update db cfg for testdb using LOGPRIMARY 60  #主日志数
db2 update db cfg for testdb using LOGSECOND  100
db2 update db cfg for testdb using LOGFILSIZ 10240  #vm 环境设置40M,生产以15~30分切换一个日志文件
db2 update db cfg for testdb using NEWLOGPATH /db2log/actlog/  #设置活动日志目录
db2 update db cfg for testdb using LOGARCHMETH1 DISK:/db2log/arclog #设置归档日志目录

db2 update db cfg for testdb using NUM_LOG_SPAN 40 #事务最大日志跨度
db2 update db cfg for testdb using MAX_LOG 20 #事务可以消耗的主日志空间的百分比
db2 update db cfg for testdb using DBHEAP AUTOMATIC #数据库堆分配的最大内存量,LOGBUFSZ ,AUDIT_BUF_SIZE,DB2_HADR_BUF_SIZE 
db2 update db cfg for testdb using LOCKLIST 10240   # VM设置40M ,通常设置为每个连接消耗512个锁 (512 * 256 * maxappls) / 4096
db2 update db cfg for testdb using maxlocks  20  #VM设置20, 锁定升级前锁定列表的最大百分比,maxlocks = 2 * 100 / maxappls  允许应用程序保留两次锁定的平均数
db2 update db cfg for testdb using LOGBUFSZ 2048 #VM 设置8M,通常redolog 4M~64M可以适用任意繁忙系统
db2 update db cfg for testdb using LOCKTIMEOUT 60

#软检查点(checkpoint )以 logfilsiz 的百分比,( (记录的状态和当前状态之间的空间) / logfilsiz ) * 100 .可接受的恢复窗口是一个日志文件则为100
db2 update db cfg for testdb using SOFTMAX  1000
db2 update db cfg for testdb using PCKCACHESZ  10240 #程序包高速缓存,减少编译;VM设置40M
db2 update db cfg for testdb using STAT_HEAP_SZ AUTOMATIC #收集统计信息时所用的最大堆大小
db2 update db cfg for testdb using STMTHEAP  AUTOMATIC
db2 update db cfg for testdb using UTIL_HEAP_SZ 5000 #实用程序堆大小,load,backup,reorg等操作
db2 update db cfg for testdb using DATABASE_MEMORY  65536 #数据库内存,缓冲池、数据库堆、锁定列表、实用程序堆、程序包高速缓存、目录高速缓存
db2 update db cfg for testdb using AUTO_STMT_STATS ON #收集统计信息
db2 update db cfg for testdb using STMT_CONC LITERALS #动态绑定变量,语句集中器
db2 update dbm cfg using DIAGPATH /db2diag/db2dump/  #实例诊断日志目录
db2 update dbm cfg using HEALTH_MON OFF  
db2 terminate

重启生效配置

db2stop force
db2start

开启归档后需要全备,否则数据库不可连接

SQL1116N  A connection to or activation of database "TESTDB" failed because
the database is in BACKUP PENDING state.  SQLSTATE=57019

备份重连数据库

db2 "backup db testdb to /dev/null " #(OFFLINE BACKUP)
db2 activate db testdb

查看

db2 list active databases;
                           Active Databases

Database name                              = TESTDB
Applications connected currently           = 0
Database path                              = /db2data/db2inst1/NODE0000/SQL00001/MEMBER0000/
最常见坑点

个人认为可以称为隐式重启

  1. DEACTIVATE DATABASE 命令或 db2stop 命令时,由 ACTIVATE DATABASE 命令激活的数据库才会停止(主动激活)

  2. 由connect to 激活数据库,在关闭了最后一个连接之后会停止数据库(连接激活)


202407252115441_1020813705_179_98_3_885058337_7cc872c6a22a4cf1284901b0609079dd.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论