当前位置: 首页 > news >正文

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

文章目录

  • 一、核心功能描述
  • 二、roles内容
    • 2.1 文件结构
    • 2.2 主配置文件
    • 2.3 tasks文件内容
  • 三、files文件内容
  • 四、vars文件内容

免费个人运维知识库,欢迎您的订阅: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 文件结构

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角色”

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

http://www.xdnf.cn/news/1331677.html

相关文章:

  • spring第9课,spring对DAO的支持
  • 【C++】模版(初阶)
  • 【STM32】HAL库中的实现(六):DAC (数模转换)
  • wpf之ComboBox
  • uniapp学习【上手篇】
  • Ubuntu 重连usb设备(断电和不断电方案)亲测可行
  • 【科研绘图系列】R语言绘制平滑曲线折线图
  • SQL面试题及详细答案150道(41-60) --- 条件查询与分组篇
  • 【报错】Please do not run this script with sudo bash
  • 开源大模型如何选择?GPT-OSS综合评估
  • IDEA切换分支时,提示:Git Checkout Problem
  • 4位量化:常规的线性层被替换成了4位线性层(48)
  • 服务器硬件电路设计之 SPI 问答(二):SPI 与 I2C 的特性博弈及多从机设计之道
  • 基于单片机环境火灾安全检测
  • 27.语言模型
  • 3D max制作蝴蝶结详细步骤(新手可跟)♥️
  • Angular入门教程
  • Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考
  • 【机器学习】什么是损失景观(Loss Landscape)?
  • FPGA实现Aurora 64B66B图像视频点对点传输,基于GTH高速收发器,提供2套工程源码和技术支持
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 新手向:使用STM32通过RS485通信接口控制步进电机
  • 实验8.20
  • Feign - 降级选 fallback 还是 fallbackFactory
  • HTTP/1.1 与 HTTP/2 全面对比:性能革命的深度解析
  • Final Cut Pro X Mac fcpx音视频剪辑编辑
  • MacBook Pro M1升级Burp Suite2025.8
  • 实时视频技术选型深度解析:RTSP、RTMP 与 WebRTC 的边界
  • AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
  • STM32存储结构