文章目录
- 一、核心功能描述
- 二、roles内容
- 2.1 文件结构
- 2.2 主配置文件
- 2.3 tasks文件内容
- 三、files文件内容
- 四、vars文件内容
免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn
一、核心功能描述
这个 Ansible Role 的核心功能是:自动化部署 IBM DB2 v10.5 FP11 数据库服务器。
-
系统依赖安装
- 安装必备库
pam.i686
,并创建符号链接/lib/libpam.so
确保兼容性
- 安装必备库
-
DB2 软件包部署
-
解压两个核心安装包:语言包 (
nlpack
) 和服务端包 (server_t
) 到/data/software/db2
。 -
执行安装脚本
install_db2.sh
,以非交互模式安装 DB2 服务端组件(选择SERVER
类型,跳过示例数据库)
-
-
用户与组管理
-
创建 DB2 所需的系统组:
dasadm1
(GID 101),db2iadm1
(GID 201),db2fadm1
(GID 202)。 -
创建关联用户
-
db2inst1
:实例所有者(UID 201),主目录/home/db2inst1/db2home
,归属组db2iadm1
和dasadm1
。 -
dasusr1
:管理服务用户(UID 101)。 -
db2fenc1
:隔离防护用户(UID 202)。
-
-
通过脚本
user_passwd.sh
设置db2inst1
的密码。
-
-
存储配置
-
通过
node_exporter_version
变量控制软件版本-
使用脚本
create_db2_disk.sh
自动化完成: -
分区磁盘 (
/dev/sdb2
) 并格式化为 LVM 物理卷。 -
创建卷组
data_vg
和逻辑卷:-
db2data_lv
(10G):数据存储 (/home/db2inst1/db2data
)。 -
db2logs_lv
(2G):日志存储 (/home/db2inst1/db2logs
)。 -
db2work_lv
(8G):工作区 (/home/db2inst1/db2work
)。
-
-
格式化为 ext4 文件系统,挂载目录,并写入
/etc/fstab
实现持久化。
-
-
递归设置目录属主为
db2inst1
和组db2iadm1
。
-
-
实例与配置
-
创建 DB2 管理服务器实例:
dascrt -u dasusr1
。 -
创建数据库实例:
db2icrt -s ese -u db2fenc1 db2inst1
。 -
关键参数优化(通过
db2set
):-
启用跳过插入行锁 (
DB2_SKIPINSERTED=ON
)。 -
允许读取未提交数据 (
DB2_EVALUNCOMMITTED=ON
)。 -
设置通信协议为 TCP/IP (
DB2COMM=TCPIP
)。 -
指定中文代码页 (
DB2CODEPAGE=1386
)。 -
开启实例自启动 (
DB2AUTOSTART=YES
)。
-
-
-
服务管理
- 禁用不必要的系统服务(如
abrtd
,abrt-ccpp
等),减少资源占用和潜在冲突。
- 禁用不必要的系统服务(如
可以根据自己的实际需求修改脚本
二、roles内容
2.1 文件结构
roles/
└── db2├── files│ ├── create_db2_disk.sh│ ├── db2set.sh│ ├── install_db2.sh│ ├── install_instance.sh│ └── user_passwd.sh├── tasks│ ├── db2set.yml│ ├── directory.yml│ ├── disk.yml│ ├── group.yml│ ├── install.yml│ ├── instance.yml│ ├── main.yml│ ├── service.yml│ ├── unarchive.yml│ ├── user.yml│ └── yum.yml└── vars└── main.yml
2.2 主配置文件
---
- hosts: allremote_user: rootserial: 5roles:- db2
2.3 tasks文件内容
- main.yml
[root@ansible ansible]# cat roles/db2/tasks/main.yml
- include: yum.yml
- include: unarchive.yml
- include: install.yml
- include: group.yml
- include: user.yml
- include: directory.yml
- include: instance.yml
- include: disk.yml
- include: db2set.yml
- include: service.yml
- include: yum.yml
[root@ansible ansible]# cat roles/db2/tasks/yum.yml
- name: install libyum: name=pam.i686 state=present
- name: create lib linkfile: src=/lib/libpam.so.0.83.1 dest=/lib/libpam.so state=link force=yes
- include: unarchive.yml
- name: unzip pkgunarchive: src={{ item.name }} dest=/data/software/db2loop:- { name: '{{ nlpack_version }}.tar.gz'}- { name: '{{ server_t_version }}.tar.gz'}
- include: install.yml
- name: install scriptscript: install_db2.sh
- include: group.yml
- name: create db2 groupsgroup: name={{ item.name }} system=yes gid={{ item.gid }}loop:- { name: 'dasadm1', gid: '101' }- { name: 'db2iadm1', gid: '201' }- { name: 'db2fadm1', gid: '202' }
- include: user.yml
- name: create home directoryfile: path=/home/db2inst1 state=directory
- name: create db2inst1 useruser: name={{ item.name }} uid={{ item.uid }} group={{ item.group }} groups={{ item.groups }} system=yes home={{ item.home }} create_home=yes state=presentloop:- { name: 'db2inst1', uid: '201', group: 'db2iadm1', groups: 'dasadm1', home: '/home/db2inst1/db2home'}
- name: create other useruser: name={{ item.name }} uid={{ item.uid }} group={{ item.group }} system=yesloop:- { name: 'dasusr1', uid: '101', group: 'dasadm1'}- { name: 'db2fenc1', uid: '202', group: 'db2fadm1'}
- name: create db2inst1 passwdscript: user_passwd.sh
- name: chown home directoryfile: path=/home/db2inst1 owner=db2inst1 group=db2iadm1 recurse=yes
- include: directory.yml
- name: create directoryfile: path=/home/db2inst1/{{ item }} state=directory owner=db2inst1 group=db2iadm1loop:- db2data- db2work- db2logs
- include: instance.yml
- name: create instanceshell: chdir=/opt/ibm/db2/V10.5/instance/ ./dascrt -u dasusr1
- include: disk.yml
- name: create db2 diskscript: create_db2_disk.sh
- include: db2set.yml
- name: db2manager setshell: chdir=/opt/ibm/db2/V10.5/instance/ ./db2icrt -s ese -u db2fenc1 db2inst1
- name: db2setshell: su - db2inst1 -c "db2set DB2_SKIPINSERTED=ON;db2set DB2_EVALUNCOMMITTED=ON;db2set DB2COMM=TCPIP;db2set DB2CODEPAGE=1386;db2set DB2AUTOSTART=YES"
- include: service.yml
- name: disable servicesservice: name={{ item }} state=stopped enabled=noloop:- abrtd- abrt-ccpp- abrt-oops- abrt-vmcore- abrt-xorg
三、files文件内容
- create_db2_disk.sh
#!/bin/bash
# 需要与实际服务器disk信息匹配
DISK=sdb
DISK_NUM=sdb2fdisk /dev/$DISK <<EOF
n+25G
t8e
w
EOFpvcreate /dev/$DISK_NUM
vgcreate -s 32M data_vg /dev/$DISK_NUM
lvcreate -L 10G -n db2data_lv data_vg
lvcreate -L 2G -n db2logs_lv data_vg
lvcreate -L 8G -n db2work_lv data_vgmkfs -t ext4 /dev/data_vg/db2data_lv
tune2fs -L /home/db2inst1/db2data /dev/data_vg/db2data_lv
mount -t ext4 /dev/data_vg/db2data_lv /home/db2inst1/db2datamkfs -t ext4 /dev/data_vg/db2logs_lv
tune2fs -L /home/db2inst1/db2logs /dev/data_vg/db2logs_lv
mount -t ext4 /dev/data_vg/db2logs_lv /home/db2inst1/db2logsmkfs -t ext4 /dev/data_vg/db2work_lv
tune2fs -L /home/db2inst1/db2work /dev/data_vg/db2work_lv
mount -t ext4 /dev/data_vg/db2work_lv /home/db2inst1/db2workchown -R db2inst1.db2iadm1 /home/db2inst1/db2{data,logs,work}sed -i.bak '$a\/dev/data_vg/db2data_lv /home/db2inst1/db2data ext4 defaults 1 0\n/dev/data_vg/db2logs_lv /home/db2inst1/db2logs ext4 defaults 1 0\n/dev/data_vg/db2work_lv /home/db2inst1/db2work ext4 defaults 1 0' /etc/fstab
- install_db2.sh
#!/bin/bash
/data/software/db2/server_t/db2_install -L EN -L CN -f NOTSAMP <<EOF
是
SERVER
EOF
- user_passwd.sh
#!/bin/bash
passwd db2inst1 <<EOF
lhl%!# # 实际生产环境,密码要符合复杂度要求
lhl%!# # 实际生产环境,密码要符合复杂度要求
EOF
安装包
v10.5fp11_linuxx64_nlpack.tar.gz
v10.5fp11_linuxx64_server_t.tar.gz
四、vars文件内容
- main.yml
nlpack_version: v10.5fp11_linuxx64_nlpack
server_t_version: v10.5fp11_linuxx64_server_t
如果你不请什么是ansible中的角色,动动你的小手,跳转过去看看呗“roles角色”
请不要以此视为定论,这只是我的个人经验