在Ansible中安装PostgreSQL的方法

我也查找了使用Ansible安装PostgreSQL的步骤,并记在了备忘录里。这是前一次使用Puppet安装PostgreSQL的姊妹篇。

环境是
* CentOS 7.2
* Ansible 2.0.2.0

安装Ansible

据说需要Python 2.6或2.7.

# python -V
Python 2.7.5

由于Ansible软件包在EPEL中公开,因此需要安装epel-release。

# yum install epel-release

使用yum在服务器上安装Ansible。

# yum install ansible
# ansible --version
ansible 2.0.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

SSH连接的设置

由于Ansible是通过SSH连接来运行的,所以需要进行配置。这次我们将配置为SSH连接到自己的服务器。

# ssh-keygen -t rsa
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keys
# ssh-agent bash
# ssh-add ~/.ssh/id_rsa

在ansible的hosts文件中写下连接目标服务器的IP地址。

[dbservers]
192.168.56.101

使用ping或其他方式來確認設定是否正確。

# ansible all -m ping
192.168.56.101 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
# ansible all -a "/bin/echo hello"
192.168.56.101 | SUCCESS | rc=0 >>
hello

# ansible all -a "/bin/date"
192.168.56.101 | SUCCESS | rc=0 >>
2016年  5月 21日 土曜日 23:22:10 JST

创建试用Playbook

准备一个Playbook的存放位置。

# mkdir /etc/ansible/playbooks

暂时先创建一个只包含ping命令的playbook试试看。

---
- hosts: dbservers
  remote_user: root
  tasks:
    - name: test connection
      ping:

执行。

[root@localhost playbooks]# ansible-playbook postgresql.yml 

PLAY [dbservers] ***************************************************************

TASK [setup] *******************************************************************
ok: [192.168.56.101]

TASK [test connection] *********************************************************
ok: [192.168.56.101]

PLAY RECAP *********************************************************************
192.168.56.101             : ok=2    changed=0    unreachable=0    failed=0   

嗯,看起来进展顺利。

创建一个用于安装和启动PostgreSQL的playbook。

根据Ansible文档编写的playbook如下。

---
- hosts: dbservers
  remote_user: root
  tasks:
    - name: test connection
      ping:
    - name: install yum repository
      yum: name=https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm 
    - name: install postgresql server
      yum: name={{ item }} state=installed
      with_items:
        - postgresql95
        - postgresql95-server

    - stat: path=/var/lib/pgsql/9.5/data/PG_VERSION
      register: dbcluster
    - name: initdb
      shell: /usr/pgsql-9.5/bin/initdb -D /var/lib/pgsql/9.5/data --no-locale
      become: yes
      become_user: postgres
      when: not dbcluster.stat.exists

    - name: start postgresql server
      service: name=postgresql-9.5 state=started 

##Danger!! These below are not idempotent.
#    - name: create test db
#      shell: /usr/pgsql-9.5/bin/createdb test
#      become: yes
#      become_user: postgres
#
#    - name: create pgbench tables
#      shell: /usr/pgsql-9.5/bin/pgbench -i test
#      become: yes
#      become_user: postgres

这个指南所做的事情

我正在使用PostgreSQL公式的RPM进行安装。

有时候写起来有点麻烦,需要保持等式。因为在initdb的部分遇到了问题,所以尝试使用类似上述的方式,通过使用stat来确认DB集群只在不存在时才进行initdb。使用PG_VERSION的存在判断还有点可疑。我想要通过判断DB集群目录本身的存在来进行判断,但当只提供了一个空目录时,我不知道该怎么办,所以就这样做了。

创建数据库和表格更难确保幂等性…
如果开始使用shell命令的返回值进行检查,可能会被迫强行将正常的shell脚本转换为Ansible的语法,所以我放弃了。
如果更深入地阅读Ansible文档,也许会有更好的解决方法。

执行

# ansible-playbook postgresql.yml 

PLAY [dbservers] ***************************************************************

TASK [setup] *******************************************************************
ok: [192.168.56.101]

TASK [test connection] *********************************************************
ok: [192.168.56.101]

TASK [install yum repository] **************************************************
ok: [192.168.56.101]

TASK [install postgresql server] ***********************************************
skipping: [192.168.56.101] => (item=[u'postgresql95', u'postgresql95-server', u'postgresql95-devel']) 

TASK [stat] ********************************************************************
ok: [192.168.56.101]

TASK [initdb] ******************************************************************
skipping: [192.168.56.101]

TASK [start postgresql server] *************************************************
ok: [192.168.56.101]

PLAY RECAP *********************************************************************
192.168.56.101             : ok=6    changed=0    unreachable=0    failed=0   


以上!

请提供更多背景资料。

    • Ansible Documentation

 

    CentOS7にPostgreSQLをインストールする
广告
将在 10 秒后关闭
bannerAds