ansible playbook 实战案例roles | 实现db2自动安装

文章目录

免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn

一、核心功能描述

这个 Ansible Role 的核心功能是:​自动化部署 IBM DB2 v10.5 FP11 数据库服务器。

  1. 系统依赖安装

    • 安装必备库 pam.i686,并创建符号链接 /lib/libpam.so确保兼容性
  2. DB2 软件包部署

    • 解压两个核心安装包:语言包 (nlpack) 和服务端包 (server_t) 到 /data/software/db2

    • 执行安装脚本 install_db2.sh,以非交互模式安装 DB2 服务端组件(选择 SERVER类型,跳过示例数据库)

  3. 用户与组管理

    • 创建 DB2 所需的系统组:dasadm1(GID 101), db2iadm1(GID 201), db2fadm1(GID 202)。

    • 创建关联用户

      • db2inst1:实例所有者(UID 201),主目录 /home/db2inst1/db2home,归属组 db2iadm1dasadm1

      • dasusr1:管理服务用户(UID 101)。

      • db2fenc1:隔离防护用户(UID 202)。

    • 通过脚本 user_passwd.sh设置 db2inst1的密码。

  4. ​​存储配置

    • 通过 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

  5. 实例与配置

    • 创建 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)。

  6. 服务管理

    • 禁用不必要的系统服务(如 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角色"

请不要以此视为定论,这只是我的个人经验