PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

PowerPoint Presentation

Si 知識情報処理

Postgres Plus Advanced Server 9.3パーティションテーブルの特徴と性能検証レポート

PGECons技術ドキュメントテンプレート Ver.3

PostgreSQL による クラスタ構成の可能性 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

スライド 1

Visual Basic Oracle Database 11 Release 1

スライド 1

PowerPoint プレゼンテーション

Base によるアプリケーション開発とサポート 鎌滝雅久 /OpenOffice.org 日本ユーザー会 OSC2007 Hokkaido 2007 年 6 月 30 日土曜日 10:55-11:40 北海道大学学術交流会館第 4 会議室

◎phpapi.indd

PostgreSQL Plus 管理者ガイド

Microsoft Word - Lab6.doc

データアダプタ概要

10th Developer Camp - B5

XMLとXSLT

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

intra-mart Accel Platform

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

<4D F736F F D2091B28BC68CA48B8695F18D908F912E646F63>

スライド 1

PostgreSQL カンファレンス 2013 証券取引バックオフィスにおける Oracle から PostgreSQL への マイグレーション SBI ジャパンネクスト証券株式会社 イアン バーウィック

Rmenuフレームワーク

Notesアプリが iPadで動くDomino Mobile Apps ご紹介

スライド 1


Silk Central Connect 15.5 リリースノート

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

アジェンダ はクラウド上でも十分使えます 1. の概要 とは の導入事例 で利用される構成 2. をクラウドで使う クラウドサービスの分類 Amazon Web Services による構成例 2

TALON Tips < 親子関係のある構成データを TALON で表示する > 株式会社 HOIPOI 第 1.1 版 p. 1

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

サーババンドル版ライセンス NX7700x シリーズ Express5800 シリーズのサーバと同時に購入することで パッケージ製品よりも安価 に導入することのできるライセンスも提供しています ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよ

VB実用Ⅲ⑩ フリーデータベースⅡ

Caché SQL に関するよくある質問

HeartCoreインストールマニュアル

POSTGRESQL 9.2 /POSTGIS (WINDOWS 版 ) 導入 設定手順書 (VER. 1) June 20, 2014

Microsoft Word - SSL-VPN接続サービスの使い方

— intra-mart Accel Platform セットアップガイド (WebSphere編)   第7版  

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよび 4 コアライセンスを ベースライセンス 追加サーバライセンスおよび追加 2 コアライセンスを 追加ライセンス と呼びます 1 台の物理サーバに対してベースライセンスは 1 つしか購入すること

5. オープンソースWAF「ModSecurity」導入事例 ~ IPA はこう考えた ~

HeartCoreインストールマニュアル(PHP版)


ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよび 4 コアライセンスを ベースライセンス 追加サーバライセンスおよび追加 2 コアライセンスを 追加ライセンス と呼びます 1 台の物理サーバに対してベースライセンスは 1 つしか購入すること

今さら聞けない!? Oracle入門 ~前編~

データベースアクセス

ストアドプロシージャ移行調査編

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

PowerPoint プレゼンテーション

ITdumpsFree Get free valid exam dumps and pass your exam test with confidence

Oracle Database Clientリリース・ノート, 10gリリース1( ) for Microsoft Windows

intra-mart Accel Platform — OData for SAP HANA セットアップガイド   初版  

HeartCore(PHP 版 ) インストール手順について説明いたします なお 本資料は 例として下記内容を前提として説明しております 環境情報 対象 OS: Linux ( ディストリビューション : Red Hat Enterprise Linux Server) APサーバ : Apache

Python によるジオプロセシング スクリプト入門

Microsoft Word - tutorial3-dbreverse.docx

ADempiere (3.5)

今さら聞けない!? Oracle入門 ~後編~

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

_mokuji_2nd.indd

Microsoft Word - nvsi_050090jp_oracle10g_vlm.doc

A. InstallScript プロジェクト InstallScript インストールは InstallScript エンジンによって制御され 決められた順序で一連のイベントが生成されます これらのイベントは インストールを実行するソフトウェアハンドラーをトリガーします たとえば インストールがロ

Hyper-V 仮想マシンの設定

RADIUS サーバを使用して NT のパスワード期限切れ機能をサポートするための Cisco VPN 3000 シリーズ コンセントレータの設定

PowerPoint Presentation

PostgreSQLによる クラスタ運用および負荷分散術 SRA OSS, Inc. 日本支社 OSS事業本部 星合 拓馬

Microsoft Word - nvsi_100222jp_oracle_exadata.doc

Rmenuフレームワーク

Chapter

Microsoft Word - VBA基礎(6).docx

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

テクニカルドキュメントのテンプレート

Sylpheed とは オープンソースのメールソフト ライセンスは GPL+LGPL 高速 軽量 高機能 高い操作性 高い信頼性 導入が容易 マルチプラットフォーム Windows, Linux, etc. 多言語対応 ( 約 30 ヶ国語 )

WEBシステムのセキュリティ技術

Transcription:

PL/Proxy と PgBouncer オープンセミナー 2009@ 徳島 (2009 年 10 月 03 日 ) 講師 : 桑村潤 日本 ユーザ会 のしくみ分科会 Copyright 2009 Japan Users Group

PL/Proxy, PgBouncer とは Skype TM のバックエンドのために培われた技術 将来の 10 億ユーザ認証を目標とした高可用性重視の設計 を活用し 軽量かつ簡単 PgBouncer はコネクションプーラー PL/Proxy はリモート DB 呼び出し用プロキシー言語で レプリケーションやパーティショニングの記述が可能 コミュニティへの返礼として公開 (BSD ライセンス ) が稼動するプラットホームをサポート (Windows にも対応 ) Copyright 2009 Japan Users Group

検索性能 開発背景 大規模テーブル データの分散と接続のプールにより応答速度の向上 運用保守 データの分散によって vacuum backup restore の効率化 障害対策 障害の影響範囲を局所化 システム全体の運用を継続 また 単純な仕組みで迅速な対応を可能に Copyright 2009 Japan Users Group

運用概念図 DB1 plproxy DB2 pgbouncer pgbouncer P1 P2 P3 P4 plproxy DBx partitions WAL backups plproxy+pgbouncer を使ってみよう! オープンソースカンファレンス 2009 Okinawa 2009.09.26( 土 ) ( 独立行政法人情報処理推進機構 (IPA) オープンソフトウェア センター斉藤浩 ) より引用 Copyright 2009 Japan Users Group

PgBouncer の特長 軽量かつ強固な connection pooler 必要なメモリ量は 概ね接続当たり 2kb 複数の サーバを対象 全て もしくは 特定の サーバに対して接続を中断可能 殆どの環境設定項目をオンラインで変更可能 クライアント接続の切断なく オンラインでリスタート / アップグレードが可能 処理中 SQL を解析しないため CPU への負荷は小さい https://developer.skype.com/skypegarage/dbprojects/pgbouncer Copyright 2009 Japan Users Group

pgbouncer のモジュール構成 接続管理情報 認証情報 pgbouncer connect DB 1 client connect libevent イベント通知ライブラリで memcached などで使われ 高速なレスポンスを実現して好評 Postgres フロントエンド / バックエンドプロトコル 3.0 を独自のハンドシェークで実装している DB 2 plproxy+pgbouncer を使ってみよう! オープンソースカンファレンス 2009 Okinawa 2009.09.26( 土 ) ( 独立行政法人情報処理推進機構 (IPA) オープンソフトウェア センター斉藤浩 ) より引用 Copyright 2009 Japan Users Group

pgbouncer : インストール 提供サイトの http://pgfoundry.org/projects/pgbouncer から安定版をダウンロード (pgbouncer-1.3.1 2009-07-06) ビルドは 所定の作業ディレクトリにpgbouncerを展開し, configure with-libevent=/prefix; make; make install; を実行 (libevent-1.3b 以降が必要 http://www.monkey.org/~provos/libevent からダウンロードしてインストール libevent-1.4.12-stable 2009-7-24) pgbouncer 構成ファイルを編集する バイナリパッケージ RHEL5 用には PGDG yum リポジトリもある http://yum.pgsqlrpms.org/howtoyum.php Windows 版バイナリはさいとうひろし氏のサイト http://winpg.jp/~saito/pg_work/plproxy/pgbouncer/ Copyright 2009 Japan Users Group

pgbouncer: プーリング方式 Session Pooling 最も堅実な方法 クライアントが接続すると 1 つのサーバ接続が 接続の間 持続して割り当てられる クライアントの接続が切れたとき サーバ接続はプールに戻される レガシーアプリではこの方式が有用 Transaction pooling サーバ接続が 1 つのトランザクションの間だけ割り当てられる pgbouncer がそのトランザクションが終了したことを認識した時点で サーバ接続はプールに戻される バックエンド接続したアプリケーションの例外で壊す恐れがあるので要注意 アプリケーションと協調をとって使い方を注意し クライアントを壊す恐れのない機能のみを使うべき Statement pooling 最も活性的なプール方法 マルチステートメントのトランザクションには使えない すなわち autocommit モードをクライアントに強制し PL/Proxy との連携が主な目的 Copyright 2009 Japan Users Group

PL/Proxy の特長 のストアドプロシージャ言語 (PL/pgsql) で書かれた拡張モジュール リモートデータベースのプロシージャを呼び出すためのプロキシー言語 例えば フィールド値のハッシュをもとにデータベース間にデータを分割 ( 構成関数で定義 ) リモート関数と同じ名前のプロキシー関数を作成し 行き先の情報はプロキシー関数の中で指定 https://developer.skype.com/skypegarage/dbprojects/plproxy Copyright 2009 Japan Users Group

plproxy のモジュール構成 P o s t g r e S Q L plproxy 構成 (schema) connect DB p1 plproxy Libpq (client) DB p2 本体の contrib モジュールと同じ build 手順で作成 クライアント認証は本体 (libpq) が行います plproxy+pgbouncer を使ってみよう! オープンソースカンファレンス 2009 Okinawa 2009.09.26( 土 ) ( 独立行政法人情報処理推進機構 (IPA) オープンソフトウェア センター斉藤浩 ) より引用 Copyright 2009 Japan Users Group

plproxy: インストール 提供サイトの http://pgfoundry.org/projects/plproxy から 安定版をダウンロード (plproxy-2.0.8 2009-01-16) ビルドは 所定の作業ディレクトリに plproxy を展開して make; make install; を実行 ( 問題が起きる場合は pg_config 等 の実行バイナリディレクトリに path が通っているか確認 ターゲットのデータベースへ plproxy 機能をインストールするために plproxy.sql ファイルをロードする # psql -f $PGSHARE/contrib/plproxy.sql mydb plproxy の動作確認のために テスト機能を作成 バイナリパッケージ RHEL5 用など PGDG yum リポジトリもある http://yum.pgsqlrpms.org/howtoyum.php Windows 版バイナリはさいとうひろし氏のサイト http://winpg.jp/~saito/pg_work/plproxy/ Copyright 2009 Japan Users Group

plproxy : Language 定義言語は PL/PgSQL と類似 ストリングの引用 コメント 行末のセミコロン ステートメントは 4 つだけ CONNECT, CLUSTER, RUN, SELECT 各々の機能は どのデータベースで SQL を実行させるべきかを決定するために CONNECT か CLUSTER ステートメントと RUN ステートメントのペア構成が必要 CONNECT libpq connstr ; クエリを接続し実行するために 場所を指定 複数機能が同じ connstr を持てば 同じ接続を使用 CLUSTER cluster_name ; 実行する cluster name を指定 cluster name は plproxy.get_cluster_* 機能で pass されたもの CLUSTER cluster_func(..); proxy 機能引数と同時にクラスタ名をダイナミックに決定 cluster_func はクラスタ名文字列を返す Copyright 2009 Japan Users Group

plproxy : Configuration スキーマ : 以下の 3 つの構成機能は plproxy のために必須 ( これらは PL/pgsql で記述する関数 ) plproxy.get_cluster_partitions(cluster_name text) リモートのデータベースへ接続する際 指定されている plproxy の接続文字列で初期化 plproxy.get_cluster_version(cluster_name text) plproxy の構成が変更された場合 再読込みが必要 全ての機能が plproxy を経由するため できる限り早く呼ばれるべき plproxy.get_cluster_config( in cluster_name text, out key text,out val text) 接続が確立している間 plproxy パラメータを変更することができる Copyright 2009 Japan Users Group

plproxy :Language RUN ON... RUN ON ALL; RUN ON ANY; クエリを cluster 内の全パーティションで並列実行 ランダムにいづれかのパーティションで実行 RUN ON <NR>; パーティション番号 <NR> の上で実行 RUN ON partition_func(..); 1 つ以上のハッシュ値 (int4) を返す partition_func() に指定した関数を実行 RUN ON argument; 変数 ( 例 $1) でパーティション番号を指定 クエリは タグ付けされたパーティションで実行される 複数のパーティションにタグ付けされれば クエリはそれらのパーティションで並列実行される Copyright 2009 Japan Users Group

plproxy+pgbouncer の実装例 pgbouncer id=0001~1000 DBPart1 plproxy Web Application Back Office Application id=1001~2000 DBPart2 DBPartN Copyright 2009 Japan Users Group

pgbouncer 構成例 ;; database name = connect string [databases] proxy = host=127.0.0.1 port=54320 dbname=jpug user=jpug password=pass part1 = host=127.0.0.1 port=54321 dbname=jpug user=jpug password=pass part2 = host=127.0.0.1 port=54322 dbname=jpug user=jpug password=pass ;; Configuation section [pgbouncer] admin_users = admin stats_users = stat_collector logfile = /home/jpug/pgsql/log/pgbouncer_test.log pidfile = /home/jpug/pgsql/log/pgbouncer_test.pid listen_addr = 127.0.0.1 listen_port = 6666 port: 6666 port: 54320 pgbounce r p r o x y B port: 54321 p a r t 1 port: 54322 p a r t 2 auth_type = trust ; any, trust, plain, crypt, md5 auth_file = /home/jpug/pgsql/pgbouncer_test_u.txt pool_mode = session ; session - after client disconnects ; transaction - after transaction finishes ; statement - after statement finishes Copyright 2009 Japan Users Group

plproxy: 構成例 ユーザ名とメールアドレスからなるテーブルに plproxy を使ってデータを格納してみる わずかな設定変更で格納方法を変更できること 格納の仕方による振る舞いの違いを確認する RUN ON hashtext( 名前 ) hashtext() 関数の戻り値 (int) によって 複数の格納先パーティションへ振り分ける 次ページ以降のサンプル参照 RUN ON ALL 値のセットを返す関数が必要となる (RETRUNS SET OF TEXT) すべてのパーティションに格納される Copyright 2009 Japan Users Group

サンプル 1: 各バックエンド DB での登録 クラスタ化するデータベースのそれぞれにテーブルの実体と関数を作成する 関数名は プロキシ上で登録するものと同じ名前 型 引数型にする CREATE TABLE ユーザ ( ); ユーザ名 text, メール text -- 各リモート側データベースに定義する挿入関数 create language plpgsql; --- 関数定義のため CREATE OR REPLACE FUNCTION ユーザ挿入 ( ユーザ IN text, メール IN text) RETURNS integer AS $$ INSERT INTO ユーザ ( ユーザ名, メール ) VALUES ($1,$2); SELECT 1; $$ LANGUAGE SQL; port: 54320 plproxy schema functions FUNCTION ユーザ挿入 texthash: 0 texthash: 1 --- 型に注意 --- 型に注意 port: 54321 port: 54322 CLUSTER FUNCTION ユーザ挿入 TABLE ユーザ FUNCTION ユーザ挿入 TABLE ユーザ Copyright 2009 Japan Users Group

サンプル 2a: フロントエンド DB に登録する plproxy 構成 (plpgsql 関数 ) (plproxy.get_cluster_partitions) port: 54321 CLUSTER クエリをリモートデータベースに送る必要があるとき plproxy は plproxy.get_cluster_partitions(cluster) 関数を呼び出し 各パーティションに送るための接続文字列を取得する ( パーティションの数は 2 の階乗でなくてはならない ) port: 54320 plproxy schema functions FUNCTION ユーザメール取得 X texthash: 0 texthash: 1 FUNCTION ユーザメール取得 X TABLE ユーザ port: 54322 FUNCTION ユーザメール取得 X CREATE LANGUAGE plpgsql; CREATE SCHEMA plproxy; --- plproxy 関数用スキーマ CREATE OR REPLACE FUNCTION plproxy.get_cluster_partitions(cluster_name text) RETURNS SETOF text AS $$ BEGIN IF cluster_name = ' クラスタ ' THEN RETURN NEXT 'port=54321 host=127.0.0.1 dbname=jpug user=jpug'; RETURN NEXT 'port=54322 host=127.0.0.1 dbname=jpug user=jpug'; RETURN; END IF; RAISE EXCEPTION ' クラスタ名が見つかりません '; END; $$ LANGUAGE plpgsql; Copyright 2009 Japan Users Group

サンプル 2b: フロントエンド DB に登録する plproxy 構成 (plpgsql 関数 ) (plproxy.get_cluster_version) plproxy.get_cluster_version(cluster_name) 関数は リクエスト毎に呼び出され plproxy.get_cluster_partitions() の結果キャッシュを出力として再利用できるかどうか決定する CREATE OR REPLACE FUNCTION plproxy.get_cluster_version(cluster_name text) RETURNS int4 AS $$ BEGIN IF cluster_name = ' クラスタ ' THEN RETURN 1; END IF; RAISE EXCEPTION ' クラスタ名が見つかりません '; END; $$ LANGUAGE plpgsql; Copyright 2009 Japan Users Group

サンプル 2c: フロントエンド DB に登録する plproxy 構成 (plpgsql 関数 ) ( plproxy.get_cluster_config ) plproxy.get_cluster_config() 関数はパラメータを調整する ここでは接続の持続時間を設定している 他のパラメータについては本体付属文書を参照のこと CREATE OR REPLACE FUNCTION plproxy.get_cluster_config( in cluster_name text, out key text, out val text) RETURNS SETOF record AS $$ BEGIN -- lets use same config for all clusters key := 'connection_lifetime'; val := 30*60; -- 30min. RETURN NEXT; RETURN; END; $$ LANGUAGE plpgsql; Copyright 2009 Japan Users Group

サンプル 3: フロントエンド DB に登録する (plproxy 関数 ) ここでは ユーザ テーブルは ユーザ名のハッシュ値によっていくつかのデータベースに分散されていることを前提としている パーティショニングされるデータベースへの接続文字列は get_cluster_partitions() 関数の中にある 次の関数は プロキシーサーバで実行され 適切にパーティショニングされたリモートデータベースから 指定ユーザのメールアドレスを取得 CREATE LANGUAGE plproxy; -- プロキシ側データベースに定義する挿入関数 CREATE OR REPLACE FUNCTION ユーザ挿入 ( ユーザIN text, メールIN text) CLUSTER RETURNS integer AS $$ --- 型に注意 CLUSTER ' クラスタ '; RUN ON hashtext( ユーザ IN); $$ LANGUAGE plproxy; --- plproxy 言語登録 port: 54320 plproxy schema functions FUNCTION ユーザ挿入 texthash: 0 port: 54321 FUNCTION ユーザ挿入 port: 54322 TABLE ユーザ texthash: 1 FUNCTION ユーザ挿入 TABLE ユーザ Copyright 2009 Japan Users Group

まとめ port: 54321 CLUSTER port: 54320 plproxy schema functions FUNCTION ユーザ挿入 RUN ON ALL FUNCTION ユーザ挿入 TABLE ユーザ port: 54322 FUNCTION ユーザ挿入 TABLE ユーザ Copyright 2009 Japan Users Group

謝辞 オープンソースに興味を持ち 集まってくださった皆様に感謝いたします 本セミナーのために資料をご提供くださった独立行政法人情報処理推進機構 (IPA) オープンソフトウェア センターの斉藤浩様に感謝いたします PL/Proxy, PgBouncer の動作について 情報を提供下さった Skype TM 社の Marko Kreen 氏 JPUG のさいとうひろし氏に感謝いたします ならびに PL/Proxy, PgBouncer の開発に貢献くださった人々に感謝いたします Copyright 2009 Japan Users Group

おしまいです お疲れさまでした こんどの JPUG イベントはこれだ! 今のうちにスケジュールを! Conference 2009 Japan JPUG 10th Anniversary Conference 日にち : 2009 年 11 月 20 日 ( 金 )~21 日 ( 土 ) 場所 : AP 浜松町 ( 東京都港区 ) 主催 : 日本 ユーザ会運営 : Conference 2009 Japan 実行委員会 Copyright 2009 Japan Users Group