文章目录
- 一、核心功能描述
- 二、roles内容
-
- [2.1 文件结构](#2.1 文件结构)
- [2.2 主配置文件](#2.2 主配置文件)
- [2.3 tasks文件内容](#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 文件结构
YAML
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 主配置文件
YAML
---
- hosts: all
remote_user: root
serial: 5
roles:
- db2
2.3 tasks文件内容
- main.yml
YAML
[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
YAML
[root@ansible ansible]# cat roles/db2/tasks/yum.yml
- name: install lib
yum: name=pam.i686 state=present
- name: create lib link
file: src=/lib/libpam.so.0.83.1 dest=/lib/libpam.so state=link force=yes
- include: unarchive.yml
YAML
- name: unzip pkg
unarchive: src={{ item.name }} dest=/data/software/db2
loop:
- { name: '{{ nlpack_version }}.tar.gz'}
- { name: '{{ server_t_version }}.tar.gz'}
- include: install.yml
YAML
- name: install script
script: install_db2.sh
- include: group.yml
YAML
- name: create db2 groups
group: name={{ item.name }} system=yes gid={{ item.gid }}
loop:
- { name: 'dasadm1', gid: '101' }
- { name: 'db2iadm1', gid: '201' }
- { name: 'db2fadm1', gid: '202' }
- include: user.yml
YAML
- name: create home directory
file: path=/home/db2inst1 state=directory
- name: create db2inst1 user
user: name={{ item.name }} uid={{ item.uid }} group={{ item.group }} groups={{ item.groups }} system=yes home={{ item.home }} create_home=yes state=present
loop:
- { name: 'db2inst1', uid: '201', group: 'db2iadm1', groups: 'dasadm1', home: '/home/db2inst1/db2home'}
- name: create other user
user: name={{ item.name }} uid={{ item.uid }} group={{ item.group }} system=yes
loop:
- { name: 'dasusr1', uid: '101', group: 'dasadm1'}
- { name: 'db2fenc1', uid: '202', group: 'db2fadm1'}
- name: create db2inst1 passwd
script: user_passwd.sh
- name: chown home directory
file: path=/home/db2inst1 owner=db2inst1 group=db2iadm1 recurse=yes
- include: directory.yml
Shell
- name: create directory
file: path=/home/db2inst1/{{ item }} state=directory owner=db2inst1 group=db2iadm1
loop:
- db2data
- db2work
- db2logs
- include: instance.yml
YAML
- name: create instance
shell: chdir=/opt/ibm/db2/V10.5/instance/ ./dascrt -u dasusr1
- include: disk.yml
YAML
- name: create db2 disk
script: create_db2_disk.sh
- include: db2set.yml
YAML
- name: db2manager set
shell: chdir=/opt/ibm/db2/V10.5/instance/ ./db2icrt -s ese -u db2fenc1 db2inst1
- name: db2set
shell: su - db2inst1 -c "db2set DB2_SKIPINSERTED=ON;db2set DB2_EVALUNCOMMITTED=ON;db2set DB2COMM=TCPIP;db2set DB2CODEPAGE=1386;db2set DB2AUTOSTART=YES"
- include: service.yml
YAML
- name: disable services
service: name={{ item }} state=stopped enabled=no
loop:
- abrtd
- abrt-ccpp
- abrt-oops
- abrt-vmcore
- abrt-xorg
三、files文件内容
- create_db2_disk.sh
Shell
#!/bin/bash
# 需要与实际服务器disk信息匹配
DISK=sdb
DISK_NUM=sdb2
fdisk /dev/$DISK <<EOF
n
+25G
t
8e
w
EOF
pvcreate /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_vg
mkfs -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/db2data
mkfs -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/db2logs
mkfs -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/db2work
chown -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
YAML
#!/bin/bash
/data/software/db2/server_t/db2_install -L EN -L CN -f NOTSAMP <<EOF
是
SERVER
EOF
- user_passwd.sh
YAML
#!/bin/bash
passwd db2inst1 <<EOF
lhl%!# # 实际生产环境,密码要符合复杂度要求
lhl%!# # 实际生产环境,密码要符合复杂度要求
EOF
安装包
v10.5fp11_linuxx64_nlpack.tar.gz
v10.5fp11_linuxx64_server_t.tar.gz
四、vars文件内容
- main.yml
YAML
nlpack_version: v10.5fp11_linuxx64_nlpack
server_t_version: v10.5fp11_linuxx64_server_t
如果你不请什么是ansible中的角色,动动你的小手,跳转过去看看呗"roles角色"
请不要以此视为定论,这只是我的个人经验