Pacemaker、Corosync、およびDRBDを使用したアクティブ/パッシブPostgreSQLクラスターの構成(CentOS 5.5)

この記事では、Pacemaker、Corosync、およびDRBDを使用してアクティブ/パッシブPostgreSQLクラスターを構成する方法について説明します。

BRLink Servidor LinuxチームのRafael Marangoniが作成



1.備考:





Linuxディストリビューション:


Centos 5.5ディストリビューションは基礎として使用されましたが、Red Hat LinuxまたはFedore Coreを基礎として使用できます

DRBDを使用してノード間でPostgreSQLデータを複製します。DRBD専用のディスクまたはパーティションが必要です。

要確認:インストール中にディスクのパーティション分割を行う必要があります



ネットワーク機器/トポロジ:


ノードごとに2つのギガビットNICを使用します。1つ(eth0)はネットワーク(LAN)に接続し、もう1つ(eth1)は両方のノードにクロスコネクトケーブルで接続します。 クロスオーバーケーブルは、システムパフォーマンスのために使用されます。

したがって、2つの物理ノードnode1.clusterbr.intおよびnode2.clusterbr.intを使用します。

node1.clusterbr.int:最初のノード10.0.0.191(LAN)のIPおよびIP 172.16.0.1(クロスコネクト)

node2.clusterbr.int:ip 10.0.0.192(LAN)およびIP 172.16.0.2(相互接続)

dbip.clusterbr.int:cluster ip、10.0.0.190(すべてのアプリケーションは、PostgreSQLにアクセスするためにこのIPを指定する必要があります)

*クロスコネクトクロスオーバーとして記述します



ディスク:


両方のノードには2つのセクションがあります。

/ dev / sda:OS用。

/ dev / sdb:DRBDの場合。



PostgreSQL:


PostgreSQLバージョン8.5では、DRBDに保存されるすべてのデータがクラスター内で使用されます。



2.ノードの準備:



SELINUXを無効にします。

vi /etc/selinux/config







(この行のみを修正し、残りはそのままにします)

SELINUX=disabled







ホスト名とホストゲートウェイを構成します。

vi /etc/sysconfig/network







node1:

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=node1.clusterbr.int

GATEWAY=10.0.0.9

node2:

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=node2.clusterbr.int

GATEWAY=10.0.0.9








ネットワークインターフェイスを構成します。

node1:

LANインターフェース:

vi /etc/sysconfig/network-scripts/ifcfg-eth0



DEVICE=eth0

BOOTPROTO=static

IPADDR=10.0.0.191

NETMASK=255.255.255.0

ONBOOT=yes

HWADDR=a6:1e:3d:67:66:78








クロスオーバー/ DRBDインターフェース:

vi /etc/sysconfig/network-scripts/ifcfg-eth1



DEVICE=eth1

BOOTPROTO=static

IPADDR=172.16.0.1

NETMASK=255.255.255.0

ONBOOT=yes

HWADDR=ee:ef:ff:9a:9a:57








node2:

LANインターフェース:

vi /etc/sysconfig/network-scripts/ifcfg-eth0



DEVICE=eth0

BOOTPROTO=static

IPADDR=10.0.0.192

NETMASK=255.255.255.0

ONBOOT=yes

HWADDR=52:52:a1:1a:62:32








クロスオーバー/ DRBDインターフェース:

vi /etc/sysconfig/network-scripts/ifcfg-eth1



DEVICE=eth1

BOOTPROTO=static

IPADDR=172.16.0.2

NETMASK=255.255.255.0

ONBOOT=yes

HWADDR=1a:18:b2:50:96:1e








DNSセットアップ:

vi /etc/resolv.conf



search clusterbr.int

nameserver 10.0.0.9








ホスト名の設定:

構成は両方のノードで同じです:

vi /etc/hosts



127.0.0.1 localhost.localdomain localhost

10.0.0.191 node1.clusterbr.int node1

10.0.0.192 node2.clusterbr.int node2

10.0.0.190 dbip.clusterbr.int node2








ネットワークを確認します。

node1:

node2にpingを実行します(LANインターフェース経由):

ping -c 2 node2



[root@node1 ~]# ping -c 2 node2

PING node2 (10.0.0.192) 56(84) bytes of data.

64 bytes from node2 (10.0.0.192): icmp_seq=1 ttl=64 time=0.089 ms

64 bytes from node2 (10.0.0.192): icmp_seq=2 ttl=64 time=0.082 ms

--- node2 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 999ms

rtt min/avg/max/mdev = 0.082/0.085/0.089/0.009 ms








node2にpingを実行します(クロスオーバーインターフェース経由):

ping -c 2 172.16.0.2



[root@node1 ~]# ping -c 2 172.16.0.2

PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.

64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.083 ms

64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.083 ms

--- 172.16.0.2 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 999ms

rtt min/avg/max/mdev = 0.083/0.083/0.083/0.000 ms








node2:

node1にpingを実行します(LANインターフェース経由):

ping -c 2 node1

[root@node2 ~]# ping -c 2 node1

PING node1 (10.0.0.191) 56(84) bytes of data.

64 bytes from node1 (10.0.0.191): icmp_seq=1 ttl=64 time=0.068 ms

64 bytes from node1 (10.0.0.191): icmp_seq=2 ttl=64 time=0.063 ms

--- node1 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 999ms

rtt min/avg/max/mdev = 0.063/0.065/0.068/0.008 ms








node1にpingを送信します(クロスオーバーインターフェイス経由):

ping -c 2 172.16.0.1



[root@node2 ~]# ping -c 2 172.16.0.1

PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.

64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=1.36 ms

64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.075 ms

--- 172.16.0.1 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1001ms

rtt min/avg/max/mdev = 0.075/0.722/1.369/0.647 ms








初期化パラメーターを設定します。

(変更はこの行でのみ行われ、残りはそのままです)

vi /etc/inittab



id:3:initdefault:








実行中のサービスを見てみましょう:

chkconfig --list | grep 3:sim



[root@node1 ~]# chkconfig --list | grep 3:sim

acpid 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

anacron 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

apmd 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

atd 0:não 1:não 2:não 3:sim 4:sim 5:sim 6:não

cpuspeed 0:não 1:sim 2:sim 3:sim 4:sim 5:sim 6:não

crond 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

irqbalance 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

kudzu 0:não 1:não 2:não 3:sim 4:sim 5:sim 6:não

network 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

rawdevices 0:não 1:não 2:não 3:sim 4:sim 5:sim 6:não

sshd 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

syslog 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não








次に、上記の手順を実行した後、ノードを再起動します。



3.必要なソフトウェアのインストール



必要なパッケージを配置します。

yum install -y postgresql84** gcc perl-mailtools perl-dbi php-pgsql







リポジトリを追加します。

rpm -Uvh download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm







次に、ClusterLabs EPELリポジトリをインストールします。

wget -O /etc/yum.repos.d/pacemaker.repo clusterlabs.org/rpm/epel-5/clusterlabs.repo







クラスターとDRBDパケットをインストールします。

yum install -y pacemaker corosync drbd83 kmod-drbd83 heartbeat







4. DRBDの構成


最初に、両方のノードでDRBDを構成する必要があります。

vi /etc/drbd.conf



global {

usage-count no;

}

common {

syncer { rate 100M; }

protocol C;

}

resource postgres {

startup {

wfc-timeout 0;

degr-wfc-timeout

120;

}

disk { on-io-error detach; }

on node1.clusterbr.int {

device /dev/drbd0;

disk /dev/sdb;

address 172.16.0.1:7791;

meta-disk internal;

}

on node2.clusterbr.int {

device /dev/drbd0;

disk /dev/sdb;

address 172.16.0.2:7791;

meta-disk internal;

}

}








主要な構成アイテム:



リソース:DRBDによって制御されるリソースを指し、「Postgres」と呼びます

ディスク:DRBDを使用するデバイス(ディスクまたはパーティション)を指定します

address:DRBDが使用するIPアドレスとポート(クロスオーバーインターフェイスを指定しました)

syncer:ノード間のデータレート

質問や疑問がある場合は、いつでもマニュアルを使用できます: www.drbd.org/users-guide-emb



この構成の後、PostgreSQLリソースに関するメタデータを作成できます。

以下を行うことにより:

node1:

drbdadm create-md postgres



[root@node1 ~]# drbdadm create-md postgres

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.








node2:

drbdadm create-md postgres



[root@node2 ~]# drbdadm create-md postgres

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.








次に、接続する前にリソースを作成する必要があります。再び、両方のノードで次のアクションを実行します。

drbdadm up postgres







これで、ノード間の初期同期を実行できます。node1を選択して、メインノードへの同期を実行します。

drbdadm -- --overwrite-data-of-peer primary postgres







同期を確認するには、次のようにします。

cat /proc/drbd



[root@node1 ~]# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----

ns:48128 nr:0 dw:0 dr:48128 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:8340188

[>....................] sync'ed: 0.6% (8144/8188)M delay_probe: 7

finish: 0:11:29 speed: 12,032 (12,032) K/sec








同期が完了するまで待ちます。 このプロセスには時間がかかることがありますが、すべてはディスクのサイズ、パフォーマンス、そしてもちろんネットワーククラスターインターフェイスの速度に依存します。

同期プロセスが終了したら、postgreリソースの状態を確認できます

node1:

cat /proc/drbd



[root@node1 ~]# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----

ns:8388316 nr:0 dw:0 dr:8388316 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0








node2:

cat /proc/drbd



[root@node2 ~]# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----

ns:0 nr:8388316 dw:8388316 dr:0 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0








5. PostgreSQLのセットアップ


まず、両方のノードでDRBDサービスを開始する必要があります

/etc/init.d/drbd start







前に述べたように、node1はメインノードであるため、コマンドを実行します。

cat /proc/drbd



[root@node1 ~]# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----

ns:8388316 nr:0 dw:0 dr:8388316 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0








プライマリ/セカンダリは、ローカルサーバーがプライマリであり、もう一方がセカンダリであることを意味します。



次に、DRBDをフォーマットし、ファイルシステムとしてext3を選択する必要があります。

node1:

mkfs.ext3 /dev/drbd0







その後、デバイスを標準のPostgreSQLロケーションとしてマウントできます。

ノードにセクションをマウントします。

node1:

mount -t ext3 /dev/drbd0 /var/lib/pgsql







次に、所有者とマウントグループを変更します。

node1:

chown postgres.postgres /var/lib/pgsql







次に、PostgreSQLデータベースを初期化します。

node1:

su - postgres

initdb /var/lib/pgsql/data

exit








私はクラスタノードとIPで認証をチェックすることを好みます:

node1:

echo "host all all 10.0.0.191/32 trust" >> /var/lib/pgsql/data/pg_hba.conf

echo "host all all 10.0.0.192/32 trust" >> /var/lib/pgsql/data/pg_hba.conf

echo "host all all 10.0.0.190/32 trust" >> /var/lib/pgsql/data/pg_hba.conf








次に、PostgreSQLがすべてのインターフェイスで動作するように設定を行います。

node1:

vi /var/lib/pgsql/data/postgresql.conf







この行のコメントのみを外します。

listen_addresses = '0.0.0.0'







PostgreSQLを実行します。

node1:

/etc/init.d/postgresql start







次に、PostgeSQLを管理する管理ユーザーを作成します。

node1:

su - postgres

createuser --superuser admpgsql --pwprompt








admpgsqlでパスワードを設定する必要があります



その後、データベースを作成してデータを入力します。

node1:

su - postgres

createdb pgbench

pgbench -i pgbench








pgbenchはデータベースにいくつかの情報を入力します:

pgbench -i pgbench



-bash-3.2$ pgbench -i pgbench

NOTA: tabela "pgbench_branches" não existe, ignorando

NOTA: tabela "pgbench_tellers" não existe, ignorando

NOTA: tabela "pgbench_accounts" não existe, ignorando

NOTA: tabela "pgbench_history" não existe, ignorando

creating tables...

10000 tuples done.

20000 tuples done.

30000 tuples done.

40000 tuples done.

50000 tuples done.

60000 tuples done.

70000 tuples done.

80000 tuples done.

90000 tuples done.

100000 tuples done.

set primary key...

NOTA: ALTER TABLE / ADD PRIMARY KEY criará à ndice implà cito "pgbench_branches_pkey" na tabela "pgbench_branches"

NOTA: ALTER TABLE / ADD PRIMARY KEY criará à ndice implà cito "pgbench_tellers_pkey" na tabela "pgbench_tellers"

NOTA: ALTER TABLE / ADD PRIMARY KEY criará à ndice implà cito "pgbench_accounts_pkey" na tabela "pgbench_accounts"

vacuum...done.








それでは、データベースを調べて確認してみましょう。

node1:

psql -U admpgsql -d pgbench

select * from pgbench_tellers;



psql -U admpgsql -d pgbench

psql (8.4.5)

Digite "help" para ajuda.



pgbench=# select * from pgbench_tellers;

tid | bid | tbalance | filler

-----+-----+----------+--------

1 | 1 | 0 |

2 | 1 | 0 |

3 | 1 | 0 |

4 | 1 | 0 |

5 | 1 | 0 |

6 | 1 | 0 |

7 | 1 | 0 |

8 | 1 | 0 |

9 | 1 | 0 |

10 | 1 | 0 |

(10 registros)








これでセットアップは完了です。



node2でのPostgreSQLの動作確認:

ただし、Pacemakerサービスの使用を開始する前に、postgreがnode2で動作することを確認することをお勧めします。

まず、node1でpostgresqlを停止する必要があります。

node1:

/etc/init.d/postgresql stop







次に、DRBDをマウントします。

umount /dev/drbd0







次に、DRBDでnode1をセカンダリとして作成します。

drbdadm secondary postgres







次に、node2でDRBDをプライマリにします。

node2:

drbdadm primary postgres







次に、DRBDデバイスをマウントします。

mount -t ext3 /dev/drbd0 /var/lib/pgsql/







最後にPostgreSQLを実行します:

/etc/init.d/postgresql start







ここで、node2を介してpgbenchにアクセスできるかどうかを確認します。

psql -U admpgsql -d pgbench

select * from pgbench_tellers;



[root@node2 ~]# psql -U admpgsql -d pgbench

psql (8.4.5)

Digite "help" para ajuda.



pgbench=# select * from pgbench_tellers;

tid | bid | tbalance | filler

-----+-----+----------+--------

1 | 1 | 0 |

2 | 1 | 0 |

3 | 1 | 0 |

4 | 1 | 0 |

5 | 1 | 0 |

6 | 1 | 0 |

7 | 1 | 0 |

8 | 1 | 0 |

9 | 1 | 0 |

10 | 1 | 0 |

(10 registros)








すべてが正常に機能していることを確認したら、クラスターを初期化する必要があります。

node2:

/etc/init.d/postgresql stop

umount /dev/drbd0

drbdadm secondary postgres

/etc/init.d/drbd stop








node1:

drbdadm primary postgres

/etc/init.d/drbd stop








両方のノードでコマンドを実行して、両方のノードですべてのサービスが無効になっていることを確認する必要があります。

chkconfig --level 35 drbd off

chkconfig --level 35 postgresql off








6. Corosync(openAIS)の構成



Corosyncセットアップの作成

node1:

export ais_port=4000

export ais_mcast=226.94.1.1

export ais_addr=`ip address show eth0 | grep "inet " | tail -n 1 | awk '{print $4}' | sed s/255/0/`








次に、データを確認します。

env | grep ais_







ais_addr変数には、クラスターがリッスンするネットワークアドレスが含まれている必要があります。

次に、corosync構成ファイルを作成します。

cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

sed -i.gres "s/.*mcastaddr:.*/mcastaddr:\ $ais_mcast/g" /etc/corosync/corosync.conf

sed -i.gres "s/.*mcastport:.*/mcastport:\ $ais_port/g" /etc/corosync/corosync.conf

sed -i.gres "s/.*bindnetaddr:.*/bindnetaddr:\ $ais_addr/g" /etc/corosync/corosync.conf








構成に次を追加します。

cat <<-END >>/etc/corosync/corosync.conf

aisexec {

user: root

group: root

}

END

cat <<-END >>/etc/corosync/corosync.conf

service {

# Load the Pacemaker Cluster Resource Manager

name: pacemaker

ver: 0

}

END








ファイル/etc/corosync/corosync.conf



次のとおりです。

compatibility: whitetank



totem {

version: 2

secauth: off

threads: 0

interface {

ringnumber: 0

bindnetaddr: 10.0.0.0

mcastaddr: 226.94.1.1

mcastport: 4000

}

}



logging {

fileline: off

to_stderr: yes

to_logfile: yes

to_syslog: yes

logfile: /tmp/corosync.log

debug: off

timestamp: on

logger_subsys {

subsys: AMF

debug: off

}

}



amf {

mode: disabled

}

aisexec {

user: root

group: root

}

service {

# Load the Pacemaker Cluster Resource Manager

name: pacemaker

ver: 0

}








node1から、設定をnode2に転送します。

scp /etc/corosync/* node2:/etc/corosync/







両方のノードで、目標のカタログを作成する必要があります。

mkdir /var/log/cluster/







今すぐcorosyncを実行します

node1:

/etc/init.d/corosync start







サービスが正常に機能しているかどうかを確認しましょう。

node1:

grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages



[root@node1 bin]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages

Apr 7 12:37:21 node1 corosync[23533]: [MAIN ] Corosync Cluster Engine ('1.2.0'): started and ready to provide service.

Apr 7 12:37:21 node1 corosync[23533]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.








corosyncがリッスンするインターフェイスを確認してみましょう。

grep TOTEM /var/log/messages



[root@node1 bin]# grep TOTEM /var/log/messages

Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] Initializing transport (UDP/IP).

Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).

Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] The network interface [10.0.0.191] is now up.

Apr 7 12:37:21 node1 corosync[23533]: [TOTEM ] A processor joined or left the membership and a new membership was formed.








次に、ペースメーカーを参照してください。

grep pcmk_startup /var/log/messages



[root@node1 bin]# grep pcmk_startup /var/log/messages

Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: CRM: Initialized

Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] Logging: Initialized pcmk_startup

Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295

Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: Service: 9

Apr 7 12:37:21 node1 corosync[23533]: [pcmk ] info: pcmk_startup: Local hostname: node1








corosyncプロセスを確認します。

ps axf



[root@node1 bin]# ps axf

(should contain something like this)

23533 ? Ssl 0:00 corosync

23539 ? SLs 0:00 \_ /usr/lib/heartbeat/stonithd

23540 ? S 0:00 \_ /usr/lib/heartbeat/cib

23541 ? S 0:00 \_ /usr/lib/heartbeat/lrmd

23542 ? S 0:00 \_ /usr/lib/heartbeat/attrd

23543 ? S 0:00 \_ /usr/lib/heartbeat/pengine

23544 ? S 0:00 \_ /usr/lib/heartbeat/crmd








すべてがうまくいけば、コロシンクをnode2に転送できます

node2:

/etc/init.d/corosync start







両方のノードでクラスターチェックを実行します。

crm_mon -1



[root@node1 ~]# crm_mon -1

============

Last updated: Fri Oct 29 17:44:36 2010

Stack: openais

Current DC: node1.clusterbr.int - partition with quorum

Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677

2 Nodes configured, 2 expected votes

0 Resources configured.

============



Online: [ node1.clusterbr.int node2.clusterbr.int ]








両方のノードがオンラインとして定義されていることを確認する必要があります。



corosyncを追加して、両方のノードで自動ロードします。

chkconfig --level 35 corosync on







7. Pacemakerのセットアップ



クラスターを管理するための重要なコマンド:



クラスター構成を確認します。

crm_verify -L







リストとクラスターステータスを取得します。

crm_mon -1







クラスター構成リスト:

crm configure show







開いているcrmコンソールのリスト

crm







Stonithを構成する

クラスター構成を確認すると、いくつかのエラーが表示されます。

crm_verify -L







したがって、Stonithを無効にするには、いずれかのノードで次のコマンドを実行する必要があります。

crm configure property stonith-enabled=false







これで、クラスター構成チェックはエラーなしで失敗するはずです。

crm_verify -L







基本的なクラスター設定



ノードから任意のノードでコマンドを実行します。

crm configure property no-quorum-policy=ignore







値を設定すると、リソースが別のノードに変更されるため、ノードの1つで同期が失敗した場合、同期は他のノードによってインターセプトされます。

crm configure rsc_defaults resource-stickiness=100







設定を見てみましょう。

crm configure show



[root@node1 ~]# crm configure show

node node1.clusterbr.int

node node2.clusterbr.int

property $id="cib-bootstrap-options" \

dc-version="1.0.9-89bd754939df5150de7cd76835f98fe90851b677" \

cluster-infrastructure="openais" \

expected-quorum-votes="2" \

stonith-enabled="false" \

no-quorum-policy="ignore"

rsc_defaults $id="rsc-options" \

resource-stickiness="100"








DBIP設定



クラスターのIPアドレスをDBIP構成に追加します。

crm configure primitive DBIP ocf:heartbeat:IPaddr2 \

params ip=10.0.0.190 cidr_netmask=24 \

op monitor interval=30s








ステータスを確認します。

crm_mon -1



[root@node1 ~]# crm_mon -1

============

Last updated: Fri Oct 29 17:47:53 2010

Stack: openais

Current DC: node1.clusterbr.int - partition with quorum

Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677

2 Nodes configured, 2 expected votes

1 Resources configured.

============



Online: [ node2.clusterbr.int node1.clusterbr.int ]



DBIP (ocf::heartbeat:IPaddr2): Started node2.clusterbr.int








クラスターの状態は、リソースが機能する場所を示していることに注意してください。現時点では、node2で作業が行われていますが、node1でも機能します。



クラスター上のDRBD設定



DRBDをクラスターに追加します。

crm configure primitive drbd_postgres ocf:linbit:drbd \

params drbd_resource="postgres" \

op monitor interval="15s"








プライマリノードとセカンダリノードをセットアップします。

crm configure ms ms_drbd_postgres drbd_postgres \

meta master-max="1" master-node-max="1" \

clone-max="2" clone-node-max="1" \

notify="true"








DRBDのマウント:

crm configure primitive postgres_fs ocf:heartbeat:Filesystem \

params device="/dev/drbd0" directory="/var/lib/pgsql" fstype="ext3"








クラスターでのPostgreSQLの構成



クラスターにpostgresqlを追加します。

crm configure primitive postgresql ocf:heartbeat:pgsql \

op monitor depth="0" timeout="30" interval="30"








次に、サービスをpostgresグループに追加する必要があります

crm configure group postgres postgres_fs DBIP postgresql

crm configure colocation postgres_on_drbd inf: postgres ms_drbd_postgres:Master








postgreを実行後に構成する

DRBDcrm configure order postgres_after_drbd inf: ms_drbd_postgres:promote postgres:start







クラスター構成を見てみましょう

crm configure show



[root@node1 ~]# crm configure show

node node1.clusterbr.int

node node2.clusterbr.int

primitive DBIP ocf:heartbeat:IPaddr2 \

params ip="10.0.0.190" cidr_netmask="24" \

op monitor interval="30s"

primitive drbd_postgres ocf:linbit:drbd \

params drbd_resource="postgres" \

op monitor interval="15s"

primitive postgres_fs ocf:heartbeat:Filesystem \

params device="/dev/drbd0" directory="/var/lib/pgsql" fstype="ext3"

primitive postgresql ocf:heartbeat:pgsql \

op monitor interval="30" timeout="30" depth="0" \

meta target-role="Started"

group postgres postgres_fs DBIP postgresql \

meta target-role="Started"

ms ms_drbd_postgres drbd_postgres \

meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

colocation postgres_on_drbd inf: postgres ms_drbd_postgres:Master

order postgres_after_drbd inf: ms_drbd_postgres:promote postgres:start

property $id="cib-bootstrap-options" \

dc-version="1.0.9-89bd754939df5150de7cd76835f98fe90851b677" \

cluster-infrastructure="openais" \

expected-quorum-votes="2" \

stonith-enabled="false" \

no-quorum-policy="ignore"

rsc_defaults $id="rsc-options" \

resource-stickiness="100"

[root@node1 ~]#








優先ノードを構成します。

crm configure location master-prefer-node1 DBIP 50: node1.clusterbr.int







ステータスを確認します。

crm_mon -1



[root@node2 ~]# crm_mon -1

============

Last updated: Fri Oct 29 19:54:09 2010

Stack: openais

Current DC: node2.clusterbr.int - partition with quorum

Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677

2 Nodes configured, 2 expected votes

2 Resources configured.

============



Online: [ node2.clusterbr.int node1.clusterbr.int ]



Master/Slave Set: ms_drbd_postgres

Masters: [ node2.clusterbr.int ]

Slaves: [ node1.clusterbr.int ]

Resource Group: postgres

postgres_fs (ocf::heartbeat:Filesystem): Started node2.clusterbr.int

DBIP (ocf::heartbeat:IPaddr2): Started node2.clusterbr.int

postgresql (ocf::heartbeat:pgsql): Started node2.clusterbr.int








エラーが発生した場合は、新しいcorosync構成がシステムに受け入れられるように、両方のノードをオーバーロードする必要があります。 また、システムを再起動した後、postgresサービスへのTCP 5432ポートを介してDBIP(10.0.0.190)に接続する必要があります。



クラスター管理



リソースを別のノードに転送する:

crm resource migrate postgres node1.clusterbr.int







移行コマンドの削除:

crm resource unmigrate postgres







メッセージを消去します。

crm resource cleanup postgres







PostgreSQLサービスを停止します

crm resource stop postgresql







PostgreSQLサービスの開始

crm resource start postgresql







8.サービスのステータス用のWebインターフェイスを作成します



Webインターフェイスは、クラスターの監視に便利です。

Apacheの開始:

/etc/init.d/httpd start

chkconfig --level 35 httpd on








クラスターのディレクトリ(DocumentRoot)を作成します。

mkdir /var/www/html/cluster/







ページを生成するには、次を実行します。

crm_mon --daemonize --as-html /var/www/html/cluster/index.html







そして、このすべてをスタートアップに入れましょう:

echo "crm_mon --daemonize --as-html /var/www/html/cluster/index.html" >> /etc/rc.d/rc.local







ブラウザで銃口の可用性を確認します。

10.0.0.190/cluster







9. phppgAdminをインストールしてpostgresqlと連携する



両方のノードでアクションを実行します。

mkdir /download

cd /download

wget 'http://downloads.sourceforge.net/project/phppgadmin/phpPgAdmin%20%5Bbeta%5D/phpPgAdmin-5.0/phpPgAdmin-5.0-beta2.tar.bz2?r=http%3A%2F%2Fphppgadmin.sourceforge.net%2F%3Fpage%3Ddownload&ts=1288189530&use_mirror=ufpr'








インストール:

tar -jxvf phpPgAdmin-5.0-beta2.tar.bz2

mv phpPgAdmin-5.0-beta2 /var/www/html/cluster-pgadmin

chown apache.apache -R /var/www/html/cluster-pgadmin








10.0.0.190/cluster-pgadminのブラウザーに移動します

追伸 postgresqlのインストール中にユーザー名とパスワードが入力されました



10.ネットワークアクセス



ローカルネットワークからpostgresqlにアクセスする必要がある場合、Postgresで認証を設定することを忘れないでください



ここでは、MD5ネットワーク認証を10.0.0.0/24に設定します

echo "host all all 10.0.0.0/24 md5">> /var/lib/pgsql/data/pg_hba.conf







postgresを再起動します。

crm resource stop postgresql

crm resource start postgresql








11.モニタリング



クラスタ監視は、スクリプト実行プロセス全体の重要な部分です。 Zabbixを使用して監視することをお勧めします。このため、各ノードでZabbixエージェントをインストールし、これらの項目の監視を設定します。



1. pingの可用性を確認します(10.0.0.191、10.0.0.192および172.16.0.1、172.16.0.2)

2. DBIP(IPクラスター)10.0.0.190の可用性の確認

3. DBIP 10.0.0.190のTCPポート5432を確認します

4. CPU、RAM、ディスクを確認します

5. monitor_drbd.shスクリプトを使用できます(すべてが正常な場合、結果は1を返し、問題がある場合は0を返します)

Zabbixのmonitor_drbd.shスクリプト:

#!/bin/bash



CHECK=`cat /proc/drbd | grep UpToDate/UpToDate | cut -d: -f5 | cut -c1-17`

STRING_OK="UpToDate/UpToDate"



# Comparando as duas.

if [ "$CHECK" == "$STRING_OK" ] ; then

# Is ok, returning 1

echo 1;

else

# Not ok, returning 0

echo 0;

fi








PS誤字や翻訳の不一致を見た場合は、PMに手紙を書くようお願いします。

社会のためにすべてを迅速に修正します。



All Articles