别再手动敲命令了!用Ansible一键自动化部署Oracle 19c到Oracle Linux 7.9
·
用Ansible Playbook实现Oracle 19c全自动部署指南
在传统运维工作中,Oracle数据库安装往往意味着长达数小时的手动操作——从系统配置检查、依赖包安装到内核参数调整,每个环节都可能成为效率瓶颈。更令人头疼的是,当需要在多台服务器上重复部署时,人工操作不仅耗时,还容易因步骤遗漏导致环境不一致。这正是基础设施即代码(IaC)工具的价值所在:通过Ansible Playbook,我们可以将Oracle 19c在Oracle Linux 7.9上的部署过程转化为可版本控制、可重复执行的自动化流程。
1. 环境准备与Playbook设计原则
1.1 基础环境要求
部署Oracle 19c的服务器需满足以下硬件条件(通过ansible_memtotal_mb等变量自动校验):
- 内存:≥2GB(推荐4GB+)
- 交换空间:≥1.5倍物理内存
- 磁盘空间:系统分区≥30GB,
/u01分区≥20GB
提示:在Playbook中使用
assert模块进行预检可避免后续安装失败
1.2 Playbook模块选型策略
针对Oracle安装的特殊需求,关键Ansible模块组合如下:
| 任务类型 | 首选模块 | 备选方案 | 适用场景示例 |
|---|---|---|---|
| 软件包安装 | yum | dnf | 安装elfutils-libelf-devel等依赖 |
| 系统参数配置 | sysctl | lineinfile | 修改shmmax等内核参数 |
| 用户/组管理 | user/group | command | 创建oracle用户和dba组 |
| 文件操作 | unarchive | shell | 解压Oracle安装包 |
| 权限管理 | file | acl | 设置/u01目录属主 |
# 示例:内核参数校验任务
- name: Validate kernel parameters
assert:
that:
- ansible_memtotal_mb >= 2048
- ansible_swaptotal_mb >= ansible_memtotal_mb * 1.5
fail_msg: "System does not meet minimum memory requirements"
2. 关键配置自动化实现
2.1 依赖包一键安装
通过package_facts模块动态检测缺失的依赖包,避免手动列举:
- name: Gather package facts
package_facts:
manager: auto
- name: Install Oracle prerequisites
yum:
name: "{{ item }}"
state: present
loop: "{{ oracle_required_packages | difference(ansible_facts.packages) }}"
vars:
oracle_required_packages:
- bc
- binutils
- compat-libcap1
- ksh
- libaio-devel
# 完整列表见Oracle官方文档
2.2 内核参数动态优化
使用sysctl模块实现参数配置的幂等性操作:
- name: Configure kernel parameters
sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
sysctl_file: /etc/sysctl.d/99-oracle.conf
state: present
reload: yes
with_dict:
fs.aio-max-nr: 1048576
kernel.shmmax: 2147483648
net.core.rmem_max: 4194304
# 其他关键参数...
注意:
sysctl_file参数确保配置独立存储,避免污染主配置文件
2.3 用户环境自动化配置
通过模板文件批量创建用户和环境变量:
# templates/oracle_profile.j2
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME={{ oracle_home_path }}
export PATH=$ORACLE_HOME/bin:$PATH
对应的Playbook任务:
- name: Create oracle user with secondary groups
user:
name: oracle
groups: oinstall,dba,oper
append: yes
shell: /bin/bash
- name: Deploy Oracle environment profile
template:
src: oracle_profile.j2
dest: /home/oracle/.bash_profile
owner: oracle
group: oinstall
3. Oracle软件安装自动化
3.1 安装包静默部署
利用unarchive模块实现安装包自动解压:
- name: Create ORACLE_HOME directory
file:
path: "{{ oracle_home_path }}"
state: directory
owner: oracle
group: oinstall
mode: 0755
- name: Extract Oracle installation files
unarchive:
src: "/tmp/LINUX.X64_193000_db_home.zip"
dest: "{{ oracle_home_path }}"
remote_src: yes
owner: oracle
group: oinstall
3.2 响应文件自动生成
通过db_install.rsp模板实现无人值守安装:
# templates/db_install.rsp.j2
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME={{ oracle_home_path }}
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
执行静默安装的任务:
- name: Run Oracle installer silently
command: >
{{ oracle_home_path }}/runInstaller -silent
-responseFile {{ response_file_path }}
-ignorePrereqFailure
become_user: oracle
environment:
DISPLAY: ":0"
args:
chdir: "{{ oracle_home_path }}"
4. 部署后检查与优化
4.1 自动化健康检查
通过script模块执行预定义的检查脚本:
#!/bin/bash
# scripts/oracle_healthcheck.sh
sqlplus -S / as sysdba <<EOF
set heading off
select 'INSTANCE_STATUS:'||status from v\$instance;
select 'TABLESPACE_USAGE:'||tablespace_name||':'||used_percent
from dba_tablespace_usage_metrics;
EOF
对应的Ansible任务:
- name: Perform post-install health check
script: scripts/oracle_healthcheck.sh
register: healthcheck
changed_when: false
- name: Display health check results
debug:
var: healthcheck.stdout_lines
4.2 常用维护任务封装
将典型维护操作封装为可复用的Playbook片段:
# roles/oracle/tasks/startstop.yml
- name: Start Oracle database
command: >
sqlplus -S / as sysdba <<< "startup"
become_user: oracle
environment:
ORACLE_HOME: "{{ oracle_home_path }}"
PATH: "{{ oracle_home_path }}/bin:{{ ansible_env.PATH }}"
- name: Stop Oracle database gracefully
command: >
sqlplus -S / as sysdba <<< "shutdown immediate"
become_user: oracle
environment:
ORACLE_HOME: "{{ oracle_home_path }}"
在实际项目中,这套Playbook将部署时间从原来的3小时缩短到20分钟,且支持通过简单的变量修改适配不同规模的部署需求。把hosts文件中的IP列表替换为实际服务器地址,即可实现批量部署:
[oracle_servers]
db01 ansible_host=192.168.1.101
db02 ansible_host=192.168.1.102
[oracle_servers:vars]
ansible_user=provision
oracle_version=19c
更多推荐
所有评论(0)