DRBDはLINBIT Information Technologies GmbHの登録商標です 入門 PostgreSQL Pacemaker DRBDで 高可用性構成を構築してみよう オープンソースカンファレンス2014 Tokyo/Spring 2014年2月28日 SRA OSS, Inc. 日本支社 佐藤 友章 sato@sraoss.co.jp 1
はじめに どのような人に聞いてほしいか PostgreSQLを使っている人 PostgreSQLの可用性を上げたいと思っている人 可用性構成は難しそうだと思っている人 とりあえずPostgreSQLの高可用性構成を構築する手順 について説明 とりあえず 細かいことは置いておく スプリットブレイン STONITHなど Pacemaker HeartbeatについてはLinux-HA Japan Project DRBDについてはサードウェアにも話を聞こう PostgreSQLについてはSRA OSSも忘れないで 2
高可用性とは システムをいかに止めずに動かし続けられるかの度合 い 可用性が高いこと HA High Availabilityとも言う 可用性は稼働率や停止時間で計られる カーネルのアッ プデートでサー バを再起動 0 00 サーバの障害に 気づいて復旧を 開始 12 00 サーバの障害が 発生 24 00 サーバの復旧が 完了 稼働率は 18 18 6 75 停止時間は 6時間 日 91.25日 年 日単位の停止時間を年単位に換算するのには無理があるが 3
PostgreSQLのHA構成 PostgreSQL高可用性構成の選択肢とトレンド http://www.sraoss.co.jp/event_seminar/2013/20130212_pgha_seminar_sraoss.pdf 4
Pacemakerとは 5
DRBDとは 6
システム構成 PostgreSQL高可用性構成の選択肢とトレンド http://www.sraoss.co.jp/event_seminar/2013/20130212_pgha_seminar_sraoss.pdf 7
インストール 8
PostgreSQLのインストール SBY PGDGのリポジトリでPostgreSQLをインストール PGDGとは PostgreSQL Global Development Group PostgreSQLの開発コミュニティ http://www.postgresql.org/ 1. リポジトリのパッケージをインストール ## yum yum -y -y install install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdghttp://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdgcentos93-9.3-1.noarch.rpm centos93-9.3-1.noarch.rpm 省略 省略 Complete! Complete! CentOS 6 x64以外については以下のurlを参照 http://yum.postgresql.org/repopackages.php 2. PostgreSQLのパッケージをインストール ## yum yum -y -y groupinstall groupinstall "PostgreSQL "PostgreSQL Database Database Server Server 9.3 9.3 PGDG" PGDG" 省略 省略 Complete! Complete! 9
PacemakerとHeartbeatのインストール 1 Linux-HA Japanリポジトリのダウンロード SBY Linux-HA JapanのローカルリポジトリでPacemakerをイ ンストール Linux-HA Japanとは LinuxでHAクラスタを実現するソフトに関する日本のコミュニティ http://linux-ha.sourceforge.jp/ 1. ローカルリポジトリをダウンロード 最新リリース情報 からOS に応じた Pacemakerリポジ トリパッケージ を選ぶ メニューの ダウンロード インストール から LINUXHA JAPAN提供パッケージ 一覧 を選ぶ RHEL 6系 x64 pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz RHEL 6系 x86 pacemaker-1.0.13-1.2.el6.i686.repo.tar.gz RHEL 5系 x64 pacemaker-1.0.13-1.2.el5.x86_64.repo.tar.gz RHEL 5系 x86 pacemaker-1.0.13-1.2.el5.i386.repo.tar.gz OSのアーキテクチャに応じ たローカルリポジトリのファ イルを選んでダウンロード 10
PacemakerとHeartbeatのインストール 2 Linux-HA Japanリポジトリの設定 SBY 2. ローカルリポジトリを/tmpディレクトリに展開 ## cd cd /tmp /tmp ## tar tar -xzf -xzf ~/Downloads/pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz ~/Downloads/pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz ほかのディレクトリに展開した場合には 展開先のディレクトリ に合わせてリポジトリの設定を変更 ## vim vim./pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo./pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo [pacemaker] [pacemaker] name=pacemaker name=pacemaker baseurl=file:///tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/ baseurl=file:///tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/ 3. OS標準のリポジトリからPacemaker関連のパッケージ がインストールされないようにリポジトリの設定を変更 ## vim vim /etc/yum.repos.d/centos-base.repo /etc/yum.repos.d/centos-base.repo [base] [base] 省略 省略 exclude=cluster-glue* exclude=cluster-glue* corosync* corosync* pacemaker* pacemaker* resource-agents* resource-agents* [updates] [updates] 省略 省略 exclude=cluster-glue* exclude=cluster-glue* corosync* corosync* pacemaker* pacemaker* resource-agents* resource-agents*
PacemakerとHeartbeatのインストール 3 PacemakerとHeartbeatパッケージのインストール SBY 4. PacemakerとHeartbeatのパッケージをインストール ## cd cd /tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo /tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo ## yum yum -c -c pacemaker.repo pacemaker.repo -y -y install install pacemaker pacemaker heartbeat heartbeat 省略 省略 Complete! Complete! リポジトリに含まれるそのほかのパッケージ パッケージ名 説明 Excelなどの表計算ソフトで編集したCSVファイルからPacemakerの設 定ファイルを生成するツール ディスクにアクセスして読み取りを行うことでディスクの監視を行うリ ソースエージェント pm_crmgen pm_diskd pm_extras NetVault Backupクライアント用のリソースエージェント NVclient 仮 想IPアドレスの排他制御によるスプリットブレイン防止用のリソースエー ジェント VIPcheck ハートビート通信用のネットワークインタフェース の状態を表示する機能 ifcheckd STONITH実行時に停止するノード を判断するSTONITHモジュール stonith-helper pm_kvm_tools KVM上のPacemakerと仮想マシン上のPacemakerを連携する機能 pm_logconv-hb Pacemaker Heartbeatのログメッセージを読みやすく変換する機能 vm-ctl 仮想マシンリソースを制御するツール 12
DRBDのインストール 1 ELRepoリポジトリの設定 SBY ELRepoのリポジトリでDRBDをインストール ELRepoとは RHEL系のOS向けに標準でないパッケージを提供するプロジェクト http://elrepo.org/ 1. 公開キーをインポート ## rpm rpm --import --import http://www.elrepo.org/rpm-gpg-key-elrepo.org http://www.elrepo.org/rpm-gpg-key-elrepo.org パッケージの署名をチェックするのに使う 2. リポジトリのパッケージをインストール ## rpm rpm -ivh -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm を取得中 を取得中 準備中... ########################################### 準備中... ########################################### [100%] [100%] 1:elrepo-release ########################################### 1:elrepo-release ########################################### [100%] [100%] RHEL 6系 elrepo-release-6-6.el6.elrepo.noarch.rpm RHEL 5系 elrepo-release-5-5.el5.elrepo.noarch.rpm 13
DRBDのインストール 2 DRBDパッケージのインストール SBY 3. DRBDのパッケージをインストール ## yum yum -y -y kmod-drbd84 kmod-drbd84 drbd84-utils drbd84-utils 省略 省略 Complete! Complete! 4. DRBDはPacemakerによって起動されるので OSの起 動時に自動的に起動されないように設定を変更 ## chkconfig chkconfig $$ chkconfig chkconfig drbd drbd drbd drbd off off --list --list drbd drbd 0:off 0:off 1:off 1:off 2:off 2:off 3:off 3:off 4:off 4:off 5:off 5:off 6:off 6:off 14
OSの設定 15
OSの設定 1 ファイアウォールの設定 SBY PostgreSQL Heartbeat DRBD で使うポートを開く PostgreSQL 5432 TCP Heartbeat 694 UDP 1. ファイアウォールの設定を行う DRBD 7788 TCP サービス名 ポート プロトコル ## vim vim /etc/sysconfig/iptables /etc/sysconfig/iptables -A -A INPUT INPUT -p -p icmp icmp -j -j ACCEPT ACCEPT -A -A INPUT INPUT -i -i lo lo -j -j ACCEPT ACCEPT -A INPUT -m state --state -A INPUT -m state --state NEW NEW -m -m tcp tcp -p -p tcp tcp --dport --dport 22 22 -j -j ACCEPT ACCEPT -A -A INPUT INPUT -m -m state state --state --state NEW NEW -m -m tcp tcp -p -p tcp tcp --dport --dport 5432 5432 -j -j ACCEPT ACCEPT -A -A INPUT INPUT -m -m state state --state --state NEW NEW -m -m udp udp -p -p udp udp --dport --dport 694 694 -j -j ACCEPT ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 7788 -j -A INPUT -m state --state NEW -m tcp -p tcp --dport 7788 -j ACCEPT ACCEPT -A -A INPUT INPUT -j -j REJECT REJECT --reject-with --reject-with icmp-host-prohibited icmp-host-prohibited -A FORWARD -j REJECT --reject-with -A FORWARD -j REJECT --reject-with icmp-host-prohibited icmp-host-prohibited COMMIT COMMIT 2. ファイアウォールを再起動 ## service service iptables: iptables: iptables: iptables: iptables: iptables: iptables: iptables: iptables iptables restart restart ファイアウォールルールを消去中: ファイアウォールルールを消去中: チェインをポリシー チェインをポリシー ACCEPT ACCEPT へ設定中filter へ設定中filter モジュールを取り外し中: モジュールを取り外し中: ファイアウォールルールを適用中: ファイアウォールルールを適用中: 直接ファイルを編集せずに system-config-firewallを 使ってもOK [[ [[ [[ [[ OK OK OK OK OK OK OK OK ]] ]] ]] ]] 16
OSの設定 2 SELinuxの設定 SBY SELinuxの設定は難しいので無効にする 無効にしないと動かないわけではないが ちゃんと設定してあ げないと動かないこともある 1. SELinuxによるアクセス制御を一時的に無効にする ## setenforce setenforce 00 2. OSの起動時に完全に無効になるようにSELinuxの設定 を変更 ## vim vim /etc/selinux/config /etc/selinux/config ## SELINUX= SELINUX= can can take take one one of of these these three three values: values: ## enforcing enforcing -- SELinux SELinux security security policy policy is is enforced. enforced. ## permissive SELinux prints warnings instead permissive - SELinux prints warnings instead of of enforcing. enforcing. ## disabled disabled -- No No SELinux SELinux policy policy is is loaded. loaded. SELINUX=disabled SELINUX=disabled アクセス制御自体は無効になっているので OSを再起動しなく てもOK 17
OSの設定 3 Syslogの設定 SBY PostgreSQL Pacemaker DRBDのログが専用のファ イルに出力されるようにSyslog rsyslog の設定を行う Syslogの設定を行う ## vim vim /etc/rsyslog.conf /etc/rsyslog.conf #### #### RULES RULES #### #### local0.* local0.* && ~~ :msg, :msg, contains, contains, "drbd" "drbd" && ~~ 省略 省略 *.info;mail.none;authpriv.none;cron.none *.info;mail.none;authpriv.none;cron.none /var/log/ha-log /var/log/ha-log /var/log/ha-log /var/log/ha-log /var/log/messages /var/log/messages ファシリティがlocal0のログと drbd を含むログを取得 Syslogを再起動 ## service service rsyslog rsyslog restart restart システムロガーを停止中: システムロガーを停止中: システムロガーを起動中: システムロガーを起動中: [[ OK OK ]] [[ OK OK ]] 18
Heartbeatの設定 19
Heartbeatの設定 1 Heartbeatの設定 テンプレートをコピーして設定ファイルを編集 ## ## cp cp /usr/share/doc/heartbeat-3.0.5/ha.cf /usr/share/doc/heartbeat-3.0.5/ha.cf /etc/ha.d /etc/ha.d vim vim /etc/ha.d/ha.cf /etc/ha.d/ha.cf pacemaker pacemaker respawn respawn logfacility logfacility local0 local0 #udpport #udpport 694 694 ucast ## alice ucast eth0 eth0 192.168.137.101 192.168.137.101 alice ucast eth0 192.168.137.102 # bob ucast eth0 192.168.137.102 # bob node node alice alice node node bob bob 抜粋 抜粋 おもなパラメータ # 番号記号 から行末ま ではコメント pacemaker respawn Pacemakerといっしょに動かすかどうか 動かすならrespawn を指定 テンプレートに書かれていないのでパラメータ自体を追加 log_facility local0 Syslogファシリティを指定 udpport 694 ハートビート通信に使うポートを指定 20
Heartbeatの設定 2 Heartbeatのおもなパラメータ おもなパラメータ 続き ucast eth0 192.168.137.101 ucast eth0 192.168.137.102 # alice # bob ユニキャストによるハートビート通信の設定としてデバイスと相手のIPア ドレスを指定 自分のIPアドレスを指定する必要はないが ノード間で設定ファイルを同 じにしておいたほうが管理しやすい マルチキャスト mcast ブロードキャスト bcast でも指定できる node alice node bob クラスタに加えるノードを指定 ノード名は uname -n で返ってくるホスト名と同じでなければならない そのほかのパラメータについてはテンプレートのコメント や man ha.cf でマニュアルを参照 21
Heartbeatの設定 3 認証用キーの設定 ハートビート通信でノードの認証に使うキーの設定を行う 1. 認証用キーファイルのテンプレートをコピー ## cp cp /usr/share/doc/heartbeat-3.0.5/authkeys /usr/share/doc/heartbeat-3.0.5/authkeys /etc/ha.d /etc/ha.d 2.rootユーザにしか読めないようにアクセス権を変更 ## chmod chmod 0600 0600 /etc/ha.d/authkeys /etc/ha.d/authkeys 3. 認証用キーファイルを編集 ## vim vim /etc/ha.d/authkeys /etc/ha.d/authkeys auth auth 11 11 sha1 sha1 1d55b4aa7fe26469aee71baacd6f8e26e51b7d5c 1d55b4aa7fe26469aee71baacd6f8e26e51b7d5c authの後にどの設定を使うかの番号を指定 設定には番号 ハッシュ化方式 認証用キーを指定 認証用キーは推測しにくいものであればOK ## head head -c -c 8k 8k /dev/urandom /dev/urandom sha1sum sha1sum d04675e6abdcb49913a0f94a08d760953cbd9430 d04675e6abdcb49913a0f94a08d760953cbd9430-22
Heartbeatの設定 4 Heartbeatの起動 設定ファイルを待機系ノードにコピーし 両方のノードで Heartbeatを起動 SBY ## scp scp /etc/ha.d/ha.cf /etc/ha.d/ha.cf /etc/ha.d/authkeys /etc/ha.d/authkeys bob:/etc/ha.d bob:/etc/ha.d root@bob's root@bob's password: password: パスワードを入力 パスワードを入力 ha.cf 100% ha.cf 100% 10KB 10KB 10.4KB/s 10.4KB/s authkeys 100% 0.7KB/s authkeys 100% 700 700 0.7KB/s 00:00 00:00 00:00 00:00 ## service service heartbeat heartbeat start start Starting Starting High-Availability High-Availability services: services: Done. Done. Heartbeatが起動していることを確認 ## crm_mon crm_mon Version: しばらく待って Online の Version: 1.0.13-30bb726 1.0.13-30bb726 後にすべてのノードが表示 22 Nodes expected Nodes configured, configured, unknown unknown expected votes votes されればOK 00 Resources configured. Resources configured. ============ ============ Online: Online: [[ alice alice bob bob ]] Ctrl Cで終了 Ctrl Cで終了 23
DRBDの設定 24
DRBDの設定 1 DRBD用パーティションの準備 SBY DRBD用のパーティションを準備 ディスクまたはパーティション /dev/sdb1など とりあえず試してみたいだけなら ループバックデバイス /dev/loop0など でもOK ## mkdir mkdir /srv/images /srv/images ## dd dd if=/dev/zero if=/dev/zero of=/srv/images/pgsql-data.img of=/srv/images/pgsql-data.img bs=1m bs=1m count=1024 count=1024 1024+0 1024+0 records records in in 1024+0 records out 1024+0 records out 1073741824 1073741824 bytes bytes (1.1 (1.1 GB) GB) copied, copied, 5.30452 5.30452 s, s, 202 202 MB/s MB/s ## losetup losetup /dev/loop0 /dev/loop0 /srv/images/pgsql-data.img /srv/images/pgsql-data.img ## vim /etc/rc.local vim /etc/rc.local touch touch /var/lock/subsys/local /var/lock/subsys/local losetup losetup /dev/loop0 /dev/loop0 /srv/images/pgsql-data.img /srv/images/pgsql-data.img 25
DRBDの設定 2 DRBDリソースの設定 DRBDリソースの設定ファイルを作成し 待機系ノードに コピー ## vim vim /etc/drbd.d/pgsql.res /etc/drbd.d/pgsql.res resource resource pgsql pgsql {{ protocol protocol C; C; meta-disk meta-disk internal; internal; disk disk {{ resync-rate resync-rate 40M; 40M; }} on on alice alice {{ device device /dev/drbd0; /dev/drbd0; disk disk /dev/loop0; /dev/loop0; address address 192.168.137.101:7788; 192.168.137.101:7788; }} on on bob bob {{ device device /dev/drbd0; /dev/drbd0; disk disk /dev/loop0; /dev/loop0; address address 192.168.137.102:7788; 192.168.137.102:7788; }} }} ## scp scp /etc/drbd.d/pgsql.res /etc/drbd.d/pgsql.res bob:/etc/drbd.d bob:/etc/drbd.d root@bob's root@bob's password: password: パスワードを入力 パスワードを入力 pgsql.res 100% pgsql.res 100% 321 321 0.3KB/s 0.3KB/s 00:00 00:00
DRBDの設定 3 DRBDリソースの起動とデータの初期同期 メタデータを作成し DRBDリソースを起動 SBY ## drbdadm drbdadm create-md create-md pgsql pgsql Writing Writing meta meta data... data... initializing initializing activity activity log log NOT initializing bitmap NOT initializing bitmap New New drbd drbd meta meta data data block block successfully successfully created. created. success success ## drbdadm drbdadm up up pgsql pgsql データの初期同期を行う ## drbdadm drbdadm disk-options disk-options --resync-rate=110m --resync-rate=110m pgsql pgsql ## drbd-overview drbd-overview 0:pgsql/0 0:pgsql/0 Connected Connected Secondary/Secondary Secondary/Secondary Inconsistent/Inconsistent Inconsistent/Inconsistent CC r----r----## drbdadm drbdadm primary primary --force --force pgsql pgsql ## drbd-overview drbd-overview 0:pgsql/0 0:pgsql/0 SyncSource SyncSource Primary/Secondary Primary/Secondary UpToDate/Inconsistent UpToDate/Inconsistent CC r----r----[=========>...] sync'ed: 50.4% (524092/1048508)K [=========>...] sync'ed: 50.4% (524092/1048508)K ## drbd-overview drbd-overview 0:pgsql/0 0:pgsql/0 Connected Connected Primary/Secondary Primary/Secondary UpToDate/UpToDate UpToDate/UpToDate CC r----r----## drbdadm adjust pgsql drbdadm adjust pgsql 27
DRBDの設定 4 ファイルシステムの作成とマウント DRBDデバイスにファイルシステムを作成し マウント ## mkfs.ext4 mkfs.ext4 /dev/drbd0 /dev/drbd0 mke2fs mke2fs 1.41.12 1.41.12 (17-May-2010) (17-May-2010) Discarding Discarding device device blocks: blocks: done done Filesystem label= Filesystem label= 省略 省略 This This filesystem filesystem will will be be automatically automatically checked checked every every 21 21 mounts mounts or or 180 180 days, days, whichever whichever comes comes first. first. Use Use tune2fs tune2fs -c -c or or -i -i to to override. override. ## mkdir mkdir /mnt/pgsql-data /mnt/pgsql-data ## mount -t mount -t ext4 ext4 /dev/drbd0 /dev/drbd0 /mnt/pgsql-data /mnt/pgsql-data ## df df Filesystem 1K-ブロック 使用 Filesystem 1K-ブロック 使用 使用可 使用可 使用% 使用% マウント位置 マウント位置 /dev/mapper/volgroup-lv_root /dev/mapper/volgroup-lv_root 14006192 14006192 5254108 5254108 8040612 8040612 40% 40% // tmpfs 506208 72 506136 tmpfs 506208 72 506136 1% 1% /dev/shm /dev/shm /dev/sda1 495844 73912 396332 /dev/sda1 495844 73912 396332 16% 16% /boot /boot /dev/drbd0 1032020 17668 961928 /dev/drbd0 1032020 17668 961928 2% 2% /mnt/pgsql-data /mnt/pgsql-data 28
PostgreSQLの設定 29
PostgreSQLの設定 1 データベースクラスタの作成 DRBDデバイス上のファイルシステムにデータベースク ラスタを作成 ## mkdir mkdir /mnt/pgsql-data/data /mnt/pgsql-data/data ## chmod chmod 0700 0700 /mnt/pgsql-data/data /mnt/pgsql-data/data ## chown postgres:postgres chown postgres:postgres /mnt/pgsql-data/data /mnt/pgsql-data/data ## su su postgres postgres $$ /usr/pgsql-9.3/bin/initdb /usr/pgsql-9.3/bin/initdb -A -A md5 md5 -D -D /mnt/pgsql-data/data /mnt/pgsql-data/data -E -E UTF8 UTF8 \\ >> --locale=c --locale=c -W -W 省略 省略 新しいスーパーユーザのパスワードを入力してください: 新しいスーパーユーザのパスワードを入力してください: パスワードを入力 パスワードを入力 再入力してください: 再入力してください: もう一度パスワードを入力 もう一度パスワードを入力 省略 省略 成功しました 以下を使用してデータベースサーバを起動することができます 成功しました 以下を使用してデータベースサーバを起動することができます /usr/pgsql-9.3/bin/postmaster /usr/pgsql-9.3/bin/postmaster -D -D /mnt/pgsql-data/data /mnt/pgsql-data/data または または /usr/pgsql-9.3/bin/pg_ctl /usr/pgsql-9.3/bin/pg_ctl -D -D /mnt/pgsql-data/data /mnt/pgsql-data/data -l -l logfile logfile start start $$ ls ls /mnt/pgsql-data/data /mnt/pgsql-data/data PG_VERSION PG_VERSION pg_hba.conf pg_hba.conf base pg_ident.conf base pg_ident.conf global pg_multixact global pg_multixact pg_clog pg_notify pg_clog pg_notify pg_serial pg_serial pg_snapshots pg_snapshots pg_stat pg_stat pg_stat_tmp pg_stat_tmp pg_subtrans pg_subtrans postgresql.conf postgresql.conf pg_tblspc pg_tblspc pg_twophase pg_twophase pg_xlog pg_xlog 30
PostgreSQLの設定 2 PostgreSQLの設定 リモートホストからの接続を監視し Syslogでログを取得 するようにPostgreSQLの設定を変更 $$ vim vim /mnt/pgsql-data/data/postgresql.conf /mnt/pgsql-data/data/postgresql.conf listen_addresses ## what listen_addresses == '*' '*' what IP IP address(es) address(es) to to listen listen on; on; #port ## (change #port == 5432 5432 (change requires requires restart) restart) log_destination ## Valid log_destination == 'syslog' 'syslog' Valid values values are are combinations combinations of of logging_collector ## Enable logging_collector == off off Enable capturing capturing of of stderr stderr and and csvlog csvlog #syslog_facility #syslog_facility == 'LOCAL0' 'LOCAL0' log_line_prefix = '' ## special log_line_prefix = '' special values: values: 抜粋 抜粋 同じネットワーク内から接続できるようにクライアント認証 の設定を変更 $$ vim vim /mnt/pgsql-data/data/pg_hba.conf /mnt/pgsql-data/data/pg_hba.conf ## TYPE USER TYPE DATABASE DATABASE USER host all all host all all ADDRESS ADDRESS 192.168.137.0/24 192.168.137.0/24 ## "local" "local" is is for for Unix Unix domain domain socket socket connections connections only only local all all local all all METHOD METHOD md5 md5 md5 md5 31
PostgreSQLの設定 3 PostgreSQLの起動と停止 PostgreSQLを起動し ネットワーク越しに接続できるこ とを確認し 停止 $$ /usr/pgsql-9.3/bin/pg_ctl /usr/pgsql-9.3/bin/pg_ctl start start -w -w -D -D /mnt/pgsql-data/data /mnt/pgsql-data/data サーバの起動完了を待っています...LOG: サーバの起動完了を待っています...LOG: ending ending log log output output to to stderr stderr HINT: Future log output will go to log destination "syslog". HINT: Future log output will go to log destination "syslog". 完了 完了 サーバ起動完了 サーバ起動完了 $$ psql psql -h -h alice alice パスワード: パスワード: パスワードを入力 パスワードを入力 psql psql (9.3.3) (9.3.3) "help" "help" でヘルプを表示します. でヘルプを表示します. =# =# \q \q $$ /usr/pgsql-9.3/bin/pg_ctl /usr/pgsql-9.3/bin/pg_ctl stop stop -D -D /mnt/pgsql-data/data /mnt/pgsql-data/data サーバ停止処理の完了を待っています...完了 サーバ停止処理の完了を待っています...完了 サーバは停止しました サーバは停止しました $$ exit exit 32
Pacemakerの設定 33
Pacemakerの設定 1 Pacemakerの設定 Pacemakerとリソースのデフォルト値の設定を行う ## vim vim pgsql.crm pgsql.crm property property \\ no-quorum-policy="ignore" no-quorum-policy="ignore" \\ stonith-enabled="false" stonith-enabled="false" \\ startup-fencing="false" startup-fencing="false" rsc_defaults rsc_defaults \\ resource-stickiness="infinity" resource-stickiness="infinity" \\ migration-threshold="2" migration-threshold="2" \\ failure-timeout="60s" failure-timeout="60s" 次のページに続く 次のページに続く 34
Pacemakerの設定 2 DRBDマスタスレーブリソースの設定 DRBDマスタスレーブリソースを作成 primitive primitive drbd drbd ocf:linbit:drbd ocf:linbit:drbd \\ params params \\ drbd_resource="pgsql" drbd_resource="pgsql" \\ op op start start timeout="240s" timeout="240s" \\ op op stop stop timeout="100s" timeout="100s" \\ op op monitor monitor interval="20s" interval="20s" timeout="20s" timeout="20s" op monitor interval="10s" timeout="20s" op monitor interval="10s" timeout="20s" role="master" role="master" \\ op op promote promote timeout="90s" timeout="90s" \\ op op demote demote timeout="90s" timeout="90s" on_fail="restart" on_fail="restart" on_fail="restart" on_fail="restart" \\ \\ ms ms ms_drbd ms_drbd drbd drbd \\ meta meta \\ master-max="1" master-max="1" \\ master-node-max="1" master-node-max="1" \\ clone-max="2" clone-max="2" \\ clone-node-max="1" clone-node-max="1" \\ notify="true" notify="true" 次のページに続く 次のページに続く 35
Pacemakerの設定 3 ファイルシステムと仮想IPアドレスリソースの設定 ファイルシステムと仮想IPアドレスリソースを作成 primitive primitive filesystem filesystem ocf:heartbeat:filesystem ocf:heartbeat:filesystem \\ params params \\ device="/dev/drbd0" device="/dev/drbd0" \\ directory="/mnt/pgsql-data" directory="/mnt/pgsql-data" \\ fstype="ext4" fstype="ext4" \\ op op start start timeout="60s" timeout="60s" \\ op op stop stop timeout="60s" timeout="60s" \\ op op monitor monitor interval="20s" interval="20s" timeout="40s" timeout="40s" on_fail="restart" on_fail="restart" primitive primitive ipaddr ipaddr ocf:heartbeat:ipaddr2 ocf:heartbeat:ipaddr2 \\ params params \\ ip="192.168.137.201" ip="192.168.137.201" \\ nic="eth0" nic="eth0" \\ cidr_netmask="24" cidr_netmask="24" \\ op op start start timeout="20s" timeout="20s" \\ op op stop stop timeout="20s" timeout="20s" \\ op op monitor monitor interval="10s" interval="10s" timeout="20s" timeout="20s" on_fail="restart" on_fail="restart" 次のページに続く 次のページに続く 36
Pacemakerの設定 4 PostgreSQLグループリソースの設定 PostgreSQLグループリソースを作成 primitive primitive pgsql pgsql ocf:heartbeat:pgsql ocf:heartbeat:pgsql \\ params params \\ pgctl="/usr/pgsql-9.3/bin/pg_ctl" pgctl="/usr/pgsql-9.3/bin/pg_ctl" \\ start_opt="-p start_opt="-p 5432" 5432" \\ psql="/usr/bin/psql" psql="/usr/bin/psql" \\ pgdba="postgres" pgdba="postgres" \\ pgdata="/mnt/pgsql-data/data" pgdata="/mnt/pgsql-data/data" \\ pgport="5432" pgport="5432" \\ monitor_user="postgres" monitor_user="postgres" \\ monitor_password="password" monitor_password="password" \\ op op start start timeout="120s" timeout="120s" \\ op op stop stop timeout="120s" timeout="120s" \\ op op monitor monitor interval="30s" interval="30s" timeout="30s" timeout="30s" on_fail="restart" on_fail="restart" group group group_pgsql group_pgsql \\ filesystem filesystem ipaddr ipaddr pgsql pgsql colocation colocation group_pgsql_and_ms_drbd_master group_pgsql_and_ms_drbd_master \\ inf: inf: group_pgsql group_pgsql ms_drbd:master ms_drbd:master order order ms_drbd_promote_before_group_pgsql_start ms_drbd_promote_before_group_pgsql_start \\ inf: inf: ms_drbd:promote ms_drbd:promote group_pgsql:start group_pgsql:start 37
Pacemakerの設定 5 設定のロード ファイルから設定をロードしてリソースを作成 ## crm crm configure configure load load replace replace pgsql.crm pgsql.crm crm_verify[2199]: crm_verify[2199]: 2014/02/27_14:50:29 2014/02/27_14:50:29 WARN: WARN: unpack_nodes: unpack_nodes: Blind Blind faith: faith: not fencing unseen nodes not fencing unseen nodes ## crm_mon crm_mon -r -r ============ ============ Last Last updated: updated: Thu Thu Feb Feb 27 27 14:51:25 14:51:25 2014 2014 Stack: Heartbeat Stack: Heartbeat Current Current DC: DC: bob bob (e6cb12d9-acdc-45c7-ab3c-6f969e9d1665) (e6cb12d9-acdc-45c7-ab3c-6f969e9d1665) -- partition partition with with quorum quorum Version: Version: 1.0.13-30bb726 1.0.13-30bb726 22 Nodes Nodes configured, configured, unknown unknown expected expected votes votes 22 Resources Resources configured. configured. ============ ============ Online: Online: [[ alice alice bob bob ]] Resource Resource Group: Group: group_pgsql group_pgsql filesystem (ocf::heartbeat:filesystem): filesystem (ocf::heartbeat:filesystem): ipaddr (ocf::heartbeat:ipaddr2): ipaddr (ocf::heartbeat:ipaddr2): pgsql (ocf::heartbeat:pgsql): pgsql (ocf::heartbeat:pgsql): Started Started Master/Slave Master/Slave Set: Set: ms_drbd ms_drbd Masters: Masters: [[ bob bob ]] Slaves: Slaves: [[ alice alice ]] Started Started Started Started bob bob bob bob bob bob
動作確認 39
PowerGres HA Pacemaker版 PowerGresでPostgreSQLの信頼性をより高めよう http://www.sraoss.co.jp/event_seminar/2013/20131127_powergres-plus-and-ha.pdf 40
オープンソースとともに 41