本文为云贝教育 刘老师 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
随着分布式系统和大规模应用的普及,自动化部署和管理变得越来越重要。Ansible 是一种流行的自动化工具,它可以帮助我们简化和加速服务器的配置和管理任务。本文将详细介绍如何使用 Ansible 来批量安装 PostgreSQL 数据库,以实现高效的部署和维护。
一、准备工作
1.1. 环境准备
• 操作系统:Red Hat Enterprise Linux(RHEL)或其衍生版本(如 CentOS)。
• 软件版本:本文以 PostgreSQL 16 为例,适用于大多数主流 Red Hat 基础设施。
• Ansible 版本:确保你的 Ansible 版本至少为 2.8 或更高版本。
安装规划表
1.2. 安装 Ansible
如果你还没有安装 Ansible,可以通过以下命令在控制节点(即运行 Ansible 命令的机器)上安装:
1.3. 配置 SSH 互信
为了能够在不输入密码的情况下执行远程命令,需要配置 SSH 密钥对。在控制节点上生成 SSH 密钥对,并将公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。
二、创建 Ansible Playbook
2.1. 创建文件夹结构在控制节点上创建一个工作目录,并在其中设置基本的文件结构:
2.2. 编写 hosts 文件在 hosts 文件中定义目标服务器。
例如:
2.3. 编写变量文件在 group_vars/all.yml 文件中定义全局变量:
2.4. 编写任务文件main.yml
在 tasks/main.yml 文件中编写具体的安装任务:
2.5. 编写任务文件create_user.yml
2.6. 编写任务文件depent_package_install.yml
2.7. 编写任务文件pg_install.yml
2.8. 创建模板文件在工作目录下创建 templates 文件夹,并在其中放置两个模板文件:
• postgresql.conf.j2
• pg_hba.conf.j2
示例内容如下:
三、运行 Ansible Playbook
在控制节点上运行以下命令来启动安装过程:
四、验证安装
安装完成后,可以登录到目标服务器上验证 PostgreSQL 是否正确安装并运行:
如果一切顺利,你应该能看到 PostgreSQL 服务正在运行,并且可以通过 ps aux | grep postgres 查看相关进程。
五、实例初始化
5.1 编写初始化脚本
[root@db1 postgresql]# cat tasks/pg_init.yml
- name: delete pg dir
file:
path: /data/*
state: absent
- name: create pg dir
file:
path: /data/pgdata/{{ item }}
state: directory
owner: postgres
group: postgres
mode: '0700'
loop:
- data
- backups
- scripts
- archive_wals
- pg_wal
- name: copy postgresql evn scripts
copy: src=env.sh dest=/tmp/env.sh owner=root group=root mode=755
- name: copy postgresql inint scripts
copy: src=pg_init.sh dest=/tmp/pg_init.sh owner=postgres group=postgres mode=755
- name: postgresql evn init
shell: /bin/bash /tmp/env.sh
- name: postgresql database init
become_method: su
become_user: postgres
become: yes
shell: /bin/bash /tmp/pg_init.sh
ignore_errors: true
- name: check pg server status
become_method: su
become_user: postgres
become: yes
command: /usr/local/postgres/bin/pg_ctl status -D /data/pgdata/data
register: pg_stat
tags: check_db_server
ignore_errors: true
- debug: var=pg_stat
- name: start pg server
become_method: su
become_user: postgres
become: yes
command: /usr/local/postgres/bin/pg_ctl start -D /data/pgdata/data
ignore_errors: true
tags: start_db_server
when: pg_stat.rc > 0
5.2、files脚本
- files/env.sh
[root@db1 postgresql]# cat files/env.sh
echo "" > /home/postgres/.bash_profile
cat >> /home/postgres/.bash_profile << "EOF"
[ -f ~/.bashrc ] && . ~/.bashrc
export PGHOME=/usr/local/postgres
export PGDATA=/data/pgdata/data
export PGLIB=/usr/local/postgresql/lib
export LC_ALL=en_US.UTF8
export LANG=en_US.UTF8
PATH=/usr/local/postgres/bin:$PATH
export PATH
EOF
- files/pg_init.sh
[root@db1 postgresql]# cat files/pg_init.sh
#!/bin/bash
source /home/postgres/.bash_profile
initdb -D /data/pgdata/data/ -X /data/pgdata/pg_wal
六、清除环境
七、总结
通过使用 Ansible,我们可以轻松地批量安装和配置 PostgreSQL 数据库,从而大大提高了部署效率和一致性。本文提供了一个基本的框架,可以根据具体需求进行扩展和定制。希望这篇教程对你有所帮助!