文章目錄
- 一、核心功能描述
- 二、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角色”
請不要以此視為定論,這只是我的個人經驗