Назад | Перейти на главную страницу

Сервер Postgres не запускается на drbd + pacemaker

Я пытаюсь запустить сервер postgres через ubuntu 14.04 с помощью drbd и fiesystem.

Состояние службы, как показано ниже:

Last updated: Mon Mar 14 01:16:45 2016
Last change: Mon Mar 14 01:05:53 2016 via cibadmin on node1
Stack: corosync
Current DC: node2 (2) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
5 Resources configured


Online: [ node1 node2 ]

 Master/Slave Set: ms_drbd [drbd_postgres]
     Masters: [ node1 ]
     Stopped: [ node2 ]
 Resource Group: database
     fs_postgres        (ocf::heartbeat:Filesystem):    Started node1
     ip_postgres        (ocf::heartbeat:IPaddr2):       Started node1
     postgresql (ocf::heartbeat:pgsql): Stopped

Failed actions:
    drbd_postgres_start_0 (node=node2, call=367, rc=1, status=complete, last-rc-change=Mon Mar 14 00:55:56 2016
, queued=3798ms, exec=0ms
): unknown error

Мои конфигурации кластера, как показано ниже:

node $id="1" node1
node $id="2" node2
primitive drbd_postgres ocf:linbit:drbd \
        params drbd_resource="db_disk" \
        op monitor interval="29s" role="Master" \
        op monitor interval="31s" role="Slave"
primitive fs_postgres ocf:heartbeat:Filesystem \
        params device="/dev/drbd0" directory="/var/lib/postgresql/9.5/main" fstype="ext4"
primitive ip_postgres ocf:heartbeat:IPaddr2 \
        params ip="192.168.1.103" cidr_netmask="24" \
        op monitor interval="30s"
primitive postgresql ocf:heartbeat:pgsql \
        params config="/etc/postgresql/9.5/main/postgresql.conf" \
        params pgctl="/usr/lib/postgresql/9.5/bin/pg_ctl" \
        params pgdata="/var/lib/postgresql/9.5/main" \
        op start interval="0" timeout="120s" \
        op stop interval="0" timeout="120s" \
        meta target-role="Started"
group database fs_postgres ip_postgres postgresql
ms ms_drbd drbd_postgres \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation fs_on_drbd inf: fs_postgres ms_drbd:Master
colocation postgresql_on_drbd inf: database ms_drbd:Master
order postgres_after_fs inf: fs_postgres:promote postgresql:start
order postgresql_after_drbd inf: ms_drbd:promote database:start
property $id="cib-bootstrap-options" \
        dc-version="1.1.10-42f2063" \
        cluster-infrastructure="corosync" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"    node $id="1" node1
node $id="2" node2
primitive drbd_postgres ocf:linbit:drbd \
        params drbd_resource="db_disk" \
        op monitor interval="29s" role="Master" \
        op monitor interval="31s" role="Slave"
primitive fs_postgres ocf:heartbeat:Filesystem \
        params device="/dev/drbd0" directory="/var/lib/postgresql/9.5/main" fstype="ext4"
primitive ip_postgres ocf:heartbeat:IPaddr2 \
        params ip="192.168.1.103" cidr_netmask="24" \
        op monitor interval="30s"
primitive postgresql ocf:heartbeat:pgsql \
        params config="/etc/postgresql/9.5/main/postgresql.conf" \
        params pgctl="/usr/lib/postgresql/9.5/bin/pg_ctl" \
        params pgdata="/var/lib/postgresql/9.5/main" \
        op start interval="0" timeout="120s" \
        op stop interval="0" timeout="120s" \
        meta target-role="Started"
group database fs_postgres ip_postgres postgresql
ms ms_drbd drbd_postgres \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation fs_on_drbd inf: fs_postgres ms_drbd:Master
colocation postgresql_on_drbd inf: database ms_drbd:Master
order postgres_after_fs inf: fs_postgres:promote postgresql:start
order postgresql_after_drbd inf: ms_drbd:promote database:start
property $id="cib-bootstrap-options" \
        dc-version="1.1.10-42f2063" \
        cluster-infrastructure="corosync" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"

Конфигурация Corosync:

totem {
  version: 2
  cluster_name: postgresql
  transport: udpu
  interface {
    ringnumber: 0
    bindnetaddr: 192.168.1.0
    broadcast: yes
    mcastport: 5405
  }
}

quorum {
  provider: corosync_votequorum
  expected_votes: 2
  two_node: 1
}

nodelist {
  node {
    ring0_addr: 192.168.1.101
    name: node1
    nodeid: 1
  }
  node {
    ring0_addr: 192.168.1.102
    name: node2
    nodeid: 2
  }
}

logging {
  to_logfile: yes
  logfile: /var/log/corosync/corosync.log
  to_syslog: yes
  timestamp: on
}

Конфигурация DRBD:

resource db_disk {
  device /dev/drbd0;
  meta-disk internal;
  syncer {
    rate 40M;
  }
  on node1 {
    address 172.16.1.101:7789;
    disk    /dev/sdb1;
  }
  on node2 {
    address 172.16.1.102:7789;
    disk    /dev/sdb1;
  }
}

Я не вижу никаких сообщений об ошибках в журналах, кроме этого:

root@node1:/var/log# egrep 'ERR|WARN' syslog
Mar 14 01:06:48 node1 Filesystem(fs_postgres)[13266]: WARNING: Couldn't     find device [/dev/drbd0]. Expected /dev/??? to exist
root@node1:/var/log#

Похоже, что требуется ограничение oder, которое гарантирует, что при монтировании файловой системы будет выполнено ожидание, пока ресурс drbd не будет успешно повышен до основного. Без этого ограничения порядка Pacemaker мог бы попытаться смонтировать FS, пока DRBD все еще играет второстепенную роль, что не разрешено drbd.

Попробуй это:

order fs_after_drbd inf: ms_drbd:promote fs_postgres:start