この記事では、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に手紙を書くようお願いします。
社会のためにすべてを迅速に修正します。