Windows でも PostgreSQL が使いたい 2018/12/10 PGConf.ASIA 2018 Day-0 NTT テクノクロス株式会社山本育 1
目次 自己紹介 PostgreSQL for Windowsの歴史 導入方法 Linux 版とWindows 版の相違点 高可用性 性能評価 まとめ 2
自己紹介 NTT テクノクロス株式会社所属 山本育 本日は PGECons メンバの立場で発表します PGECons = PostgreSQL Enterprise Consortium https://www.pgecons.org/ Twitter #pgecons 3
突然ですが 4
お客様の中に PostgreSQL を 使ったことがある方は いらっしゃいますか? 5
お客様の中に PostgreSQL を Windows で使ったことがある 方はいらっしゃいますか? 6
PostgreSQL for Windows の歴史 PostgreSQL は Unix 互換プラットフォーム (RHEL, CentOS, Ubuntu, etc..) で動作させることが多い もちろん PostgreSQL は Windows でも動きます 7
PostgreSQL for Windows の歴史 Windows 版 PostgreSQL の誕生から今に至るまでの 主な変更点 バージョン 初期 PostgreSQL for Windows 構築 Windows 上では動作しない ~7.4 cygwin 上で動作 8.0~ Windows 上で動作するようになった GUI でインストールできるようになった 9.0~ 64 ビットモードで動くようになった 9.6~ update_process_title がデフォルトで無効になった [PostgreSQL 9.6 文書リリースノートより ] Windows では大部分の他プラットフォームよりもプロセスタイトルを更新するオーバーヘッドが大きく また 大部分の Windows ユーザはプロセスタイトルを表示できるツールを持っていないことから 更新してもあまり役に立ちません 8
はじめのいっぽ HOW TO INSTALL? 9
導入方法 Windows for PostgreSQL を使うには 1. インストーラーを利用 https://www.postgresql.org/download/windows/ 2. ソースコードからインストール https://www.postgresql.org/docs/10/static/install -windows.html 詳細は PGEcons の Web で公開しています https://pgecons-sec-tech.github.io/techreport/html_wg3_windows/wg3_windows.html - e9929a972c8b27eec178dfecf58d9f8a 10
導入方法 from インストーラー 1. EnterpriseDB 社から提供されているインストーラーをダウンロード https://www.postgresql.org/download/windows 2. 画面に沿って数クリック 11
導入方法 from ソースコード 1. Microsoft Visual Studio for Windows Desktop のインストール 2. Microsoft Windows SDK のインストール 3. Strawberry Perl のインストール 4. ビルド build.bat 5. インストール install.bat : インストーラーがある 12
導入方法 導入自体はインストーラーを利用した方が簡単 ソースコードから導入した方が細かい設定が可能 2017 年度 WG3 活動報告書 Windows 環境調査編 configure オプションの比較 blocksize wal_segsize wal_blocksize zlib ges 13
Linux 版とのちがい WHAT IS THE DIFFERENCE? 14
Linux 版と Windows 版の相違点 PostgreSQL 自体は概ね同じ 主な相違点 1. インストール時のカスタマイズ可否 2. contribモジュールの対応状況 3. 周辺ツールの対応状況 4. ロギング 15
インストール時のカスタマイズ可否 Windows インストール時のカスタマイズ差分 対応していない項目が多い ソースコードとインストーラーで差分がある カスタマイズ項目一覧 Unix 版の設定値 configure のオプション from ソースコード configure.pl に記述 from インストーラー --enable-nls[=languages] nls O --with-openssl openssl O --enable-debug X X --with-libxml xml O X(iconv) iconv X O: 設定項目あり X: 設定項目なし 16
インストール時のカスタマイズ可否 共通 各国語サポート Linux: --enable-nls[=languages] Windows: nls / インストーラー時の設定 SSL 接続の有効化 相違 Linux: --with-openssl Windows: openssl / インストーラー時の設定 デバッグモードの起動 Linux: --enable-debug Windows: 設定できない 17
インストール時のカスタマイズ可否 特殊 XML のサポート有効化 Linux: --with-libxml Windows: xml / インストーラー時の設定 iconv の追加設定が必須 18
contrib モジュールの対応状況 contrib モジュールは PostgreSQL インストール時についてくるモジュール群で有効化することで PostgreSQL をより便利に使える contrib モジュールの多くは対応済み 40/46 件が対応 contrib の Windows 対応状況 未対応モジュール (6 件 ) 通常の運用で使うことはない 19
contrib モジュールの対応状況 未対応モジュール一覧 モジュール名 intagg intarray sepgsql sslinfo uuid-ossp xml2 説明 整数型の集約子と列挙子の提供 NULL のない整数配列を操作する関数と演算子を提供 SELinux のセキュリティポリシーに基づいたアクセス制御機能を提供 接続する SSL 証明書に関する情報を提供 UUID を生成する関数を提供 XPath 問い合わせと XSLT 機能を提供 20
周辺ツールの対応状況 PostgreSQLは周辺ツールが充実している 周辺ツールを使うことで運用が楽になる 周辺ツールはWindows 対応していないことが多い カテゴリごとにツールを紹介 バックアップ 運用監視 その他便利ツール 周辺ツールの Windows 対応状況 21
周辺ツールの対応状況 ( バックアップ ) 対応済み pg_basebackup(demo) 未対応 本体機能 静止点を取って物理バックアップを取得できる pg_rman バックアップ / リストアを体系的に管理する バックアップは物理方式 Linux 環境でしか動作しない 22
周辺ツールの対応状況 ( 運用監視 ) 対応済み pg_stat_statements 未対応 contrib 同梱 SQL 文の実行時の統計情報を記録する pg_statsinfo PostgreSQLのサーバ運用状況を定期的に取得する pg_stats_reporterと合わせるとグラフィカルに参照できる Linux 環境でしか動作しない pg_mons zabbixを使ったサーバ運用状況の監視 内部はshellの構成なのでWindowsでは動かない 23
周辺ツールの対応状況 ( その他便利ツール ) 対応済み pgadmin4(demo) GUIでPostgreSQLを操作できるツール Windowsインストーラーはデフォルトで使える 24
ロギング PostgreSQL は様々な形式でログ出力できる stderr csvlog syslog(linuxのみ ) eventlog(windowsのみ ) 25
ロギング eventlog 出力 イベントビュアーから PostgreSQL のログを参照できる インストーラーを利用するとイベントソースに PostgreSQL を自動登録する log_destination = eventlog と設定する 26
もしもにそなえる HIGH AVAILABILITY 27
High Availability High Availability(HA) とは = 高可用性 サービス停止が少ないシステム システムの各コンポーネントの冗長性を上げる データの破損を防ぐ & 復旧を早くするため 手法 : コンポーネントを複製する 障害時に復旧までの時間を短くする 手法 : 切り替え自動化のコンポーネントを追加する 28
DB の冗長構成 問題点 : DBサーバは単一故障点になりえる 冗長性を上げる PostgreSQL は冗長構成が組める Hot Standby(Replication 型 ) 検証済み Cold Standby( ディスク共有型 ) 未検証 29
Hot Standby(Replication 型 ) Replication 型とは DB(Master) に書き込んだデータを他の DB(Standby) に伝搬する方法 Replication にはモードがある 同期 非同期 Standby は参照のみできる 参照の負荷分散の目的にも使える PostgreSQL の機能なので Windows でも利用できる ストリーミングレプリケーション機能 30
Hot Standby(Replication 型, 非同期 ver) クライアント OK を受けてもデータが複製されているか不明 1. 更新 2. OK Master ディスク 3. データの伝搬 4. OK Standby ディスク 31
Hot Standby(Replication 型, 同期 ver) クライアント OK を受け取ればデータの複製が保証されている 1. 更新 4. OK Master ディスク 2. データの伝搬 3. OK Standby ディスク 32
Hot Standby(Replication 型 ) クライアント 更新 / 参照 参照 Master ディスク データの伝搬 Standby ディスク 33
Cold Standby( 共有ディスク型 ) 共有ディスク型とは 書き込むディスクを共有して バックアップノードを用意する方法 Standby ノードは PostgreSQL が停止しているので参照できない 共有ディスクが用意できれば Windows でも利用できる 34
Cold Standby( 共有ディスク型 ) 更新 / 参照 クライアント 共有ディスクの冗長化を検討する Standby ノードには何もできない Master..zzZZ Standby 共有ディスク 35
障害時に復旧までの時間を短くする PostgreSQL の Mater 障害時に復旧 ( フェイルオーバー ) する 1. Hot Standby(Replication 型 ) Master を切り離す Standby を Master に昇格する 2. Cold Standby( 共有ディスク型 ) Master を切り離す Standby ノードを起動する 36
フェイルオーバー (Hot Standby) Master の故障が発生する クライアント 更新 / 参照 参照 Crash!! Master Standby ディスク ディスク 37
フェイルオーバー (Hot Standby) Master を切り離す Master の切り離し pg_ctl stop クライアント Crash!! Master Standby ディスク ディスク 38
フェイルオーバー (Hot Standby) Standby を Master に昇格する クライアント Crash!! Master コマンド発行 pg_ctl promote Standby ディスク ディスク 39
フェイルオーバー (Hot Standby) Standby を Master に昇格する クライアント 更新 / 参照 Crash!! Master Master ディスク ディスク 40
フェイルオーバー (Cold Standby) クライアント 更新 / 参照 Crash!! Master..zzZZ Standby 共有ディスク 41
フェイルオーバー (Cold Standby) クライアント 更新 / 参照 Crash!! Master Master 共有ディスク コマンド発行 pg_ctl start 42
障害時に復旧までの時間を短くする 復旧を自動化する Replication 型 Pgpool-II(WAL shipping) を利用する PostgreSQL 自体に復旧を自動化する機能はない 共有ディスク型 WSFC を利用する未検証 WSFC(Windows Server Failover Cluster) 43
Master 障害時に復旧までの時間を短くする Pgpool-II を使う Pgpool-II とは クライアントと PostgreSQL の間に入ってクエリを一次受けする PostgreSQL の故障を検知してフェイルオーバーする 良いところ 故障の検知 フェイルオーバーの自動化 参照クエリの自動分散 不便なところ Pgpool-II 自身は Windows 環境で動かない 今回の検証時も Linux 環境で動作させた Pgpool-II は ssh 経由で操作するので Windows Server に ssh を入れる必要がある 44
Pgpool-II を用いたフェイルオーバー自動化 クライアント更新 / 参照 Pgpool-II 更新 / 参照 参照 Master ディスク データの伝搬 Standby ディスク 45
Pgpool-II を用いたフェイルオーバー自動化 クライアント Master 故障の検知 Pgpool-II Master Crash!! Standby ディスク ディスク 46
Pgpool-II を用いたフェイルオーバー自動化 クライアント Pgpool-II Standby の自動昇格 Master Crash!! Master ディスク ディスク 47
Pgpool-II を用いたフェイルオーバー自動化 クライアント更新 / 参照 Pgpool-II 更新 / 参照 Master Crash!! Master ディスク ディスク 48
冗長構成 Replication 型 共有ディスク型 Pros. PostgreSQL で完結できる 多くのパターンの故障を救える 参照系の負荷を分散できる Pgpool-II を組み合わせてフェイルオーバーが自動化できる Windows Server の常套手段を使える Microsoft のポリシーに沿える Cons. Pgpool-II を利用すると LinuxOS マシンが必須 Windows に ssh が必要 共有ディスクをつくる必要がある 共有ディスク故障の冗長化を検討する必要がある 49
じっさいのところ PERFORMANCE MEASUREMENT 50
性能評価 Windows 版は性能が悪いと言われていた 測定結果が見当たらなかったので実際に測定した Linux 版とWindows 版の性能比較 Windows 版のパラメータチューニング性能比較 51
PostgreSQL for Windows の歴史 Windows 版 PostgreSQL の誕生から今に至るまでの 主な変更点 バージョン PostgreSQL for Windows 構築 ~8.0 cygwin 上で動作 8.0~ Windows 上で動作するようになった GUI でインストールできるようになった 9.0~ 64 ビットモードで動くようになった 9.6~ update_process_title がデフォルトで無効になった [PostgreSQL 9.6 文書リリースノートより ] Windows では大部分の他プラットフォームよりもプロセスタイトルを更新するオーバーヘッドが大きく また 大部分の Windows ユーザはプロセスタイトルを表示できるツールを持っていないことから 更新してもあまり役に立ちません 52
PostgreSQL for Windows の歴史 Windows 版 PostgreSQL の誕生から今に至るまでの 主な変更点 バージョン PostgreSQL for Windows 構築 ~8.0 cygwin 上で動作 8.0~ Windows 上で動作するようになった GUI でインストールできるようになった 9.0~ 64 ビットモードで動くようになった 9.6~ update_process_title がデフォルトで無効になった [PostgreSQL 9.6 文書リリースノートより ] Windows では大部分の他プラットフォームよりもプロセスタイトルを更新するオーバーヘッドが大きく また 大部分の Windows ユーザはプロセスタイトルを表示できるツールを持っていないことから 更新してもあまり役に立ちません 53
update_process_title が与える性能影響 update_process_title が無効になると PostgreSQL の性能はあがる スケールファクタ =300 参照のみモードの結果 参考 :[RFC] Change the default of update_process_title to off (https://www.postgresql.org/message-id/0a3221c70f24fb45833433255569204d1f5be3e8%40g01jpexmbyt05) 54
性能測定 1. Linux 版と Windows 版同じパラメータで性能比較 2. Windows 版の影響しそうなパラメータをチューニングして性能測定 shared_buffers 64MB 40GB PostgreSQL 10.1 を利用 pgbench を利用して測定 (pgbench とは ) 詳しい測定方法は以下を参照ください https://pgecons-sec-tech.github.io/techreport/html_wg1_2017/wg1_2017.html - documentcontents/wg1/wg1_2017/scaleup 55
性能測定 1. Linux 版と Windows 版同じパラメータで性能比較 2. Windows 版の影響しそうなパラメータをチューニングして性能測定 shared_buffers 64MB 40GB PostgreSQL 10.1 を利用 pgbench を利用して測定 (pgbench とは ) 56
Linux 版と Windows 版の性能比較 参照モデルの場合 Windows 版 /Linux 版での性能差はなかった 更新モデルの場合 高負荷時は Windows 版の方が性能が低い可能性がある 57
性能測定 1. Linux 版と Windows 版同じパラメータで性能比較 2. Windows 版の影響しそうなパラメータをチューニングして性能測定 shared_buffers 64MB 40GB PostgreSQL 10.1 を利用 pgbench を利用して測定 (pgbench とは ) 58
Windows 版パラメータチューニング性能測定 shared_buffers を変更しても性能は変わらない 64MB 以上に設定すればよい 59
さいごに CLOSING... 60
まとめ Windows 版の PostgreSQL も安心して利用できる ただし 一部利用できない周辺ツールがある 61
PGECons のご紹介 PostgreSQL 本体および各種ツールの情報収集と提供 整備などの活動を通じて エンタープライズ領域への普及を推進する (2012 年 4 月設立 ) 参加企業が共同検証や情報発信を実施 正会員 16 社 一般会員 46 社 (2018 年 12 月現在 ) 監事 技術部会 総会理事会 運営委員会広報 発信部会 事務局 CR 部会 理事長運営委員長技術部会長 CR 部会長広報 発信部会長広報 発信副部会長事務局長監事 : 日本電信電話株式会社 : 日本電気株式会社 : 富士通株式会社 :SRA OSS, Inc. 日本支社 : 株式会社日立製作所 : 株式会社アシスト :SRA OSS, Inc. 日本支社 : 税理士法人ジャストスタッフ WG1 WG2 WG3 62
PGECons の成果物 PGECons の Web サイトで成果物を公開しています https://pgecons-sec-tech.github.io/techreport/ 本日発表した成果物も公開しています 63
ご清聴ありがとうございました 64
65