PowerGres

技術情報 | PowerGres体験記 | 第 1 回 PowerGres Plus をインストールしてみよう

http://wordpress.sraoss.jp
第1回 PowerGres Plusをインストールしてみよう
対象バージョン: PowerGres Plus V9.1
本文では CentOS 5 (64 ビット版) において PowerGres Plus V9.1(Linux 版)を使用して解説しています。

PowerGres Plusは、オープンソースデータベースの PostgreSQL をベースに、GUI の管理ツールによる使いやすさとストレージ管理機能を拡張して、信頼性とセキュリティを強化したデータベース製品です。

PowerGres Plusでは、GUI がその他のPowerGresファミリーに合わせて刷新されました。

また、トランザクションログの二重化や、データファイルの破損検査に加えて透過的データ暗号化機能に対応しました。

[PowerGres Plus V9.1 – オープンソースデータベース PostgreSQL に信頼性とセキュリティをプラス]
http://powergres.sraoss.co.jp/product/plusv91/

第1回では、より使いやすく、よりセキュアにデータベースの運用管理を行えるようになった PowerGres Plus V9.1 の評価版を使い、インストールからデータベースのセットアップ、基本的なデータベース操作までを紹介します。

インストール

PowerGres Plusをインストールしていきます。インストール作業はrootユーザで行います。

評価版のダウンロード

以下の URL から PowerGres Plus V9.1(Linux 版)の評価版をダウンロードします。

[PowerGres Plus(Linux 版) 評価版ダウンロード]

https://powergres.sraoss.co.jp/pgweb/s/ja/download/download-PlusLinux.php

圧縮ファイルの展開

ダウンロードしたファイルを展開します。

[root@node1 ~]# tar zxvf powergresplus-9.1.tar.gz
powergresplus-9.1/
powergresplus-9.1/LICENSE
:
:
powergresplus-9.1/proj-COPYING.txt
powergresplus-9.1/update.sh

インストーラの実行

展開したディレクトリに移動し、インストールスクリプトを実行します。

使用許諾契約書の内容に同意し、ライセンスキーを入力します。

ライセンスキーはEvaluationと入力しましょう。

製品版と同じ機能が60日間無料で利用できます。

[root@node1 ~]# cd powergresplus-9.1
[root@node1 powergresplus-9.1]# cd powergresplus-9.1
[root@node1 powergresplus-9.1]# sh install.sh
本ソフトウェアプログラムは、以下の 「使用許諾契約書」 の条件にしたがって
使用許諾されます。したがって、必ず本製品をインストールする前に「使用許
:
:
Do you agree to the license terms (yes/no): yes

Please enter the license key (XXXX-XXXX-XXXX-XXXX): Evaluation
License key is for evaluation purposes.
You can use during the 60-day trial period.

ライセンスキーを入力すると、続けて共有メモリに関するカーネルパラメータの設定が行われます。

Checking kernel parameters...
  kernel.shmmax: 515736576 (no need for change)
  kernel.shmall:    125912 (no need for change)

カーネルパラメータの設定値が推奨値よりも少ない場合は、推奨値まで増やすかどうか尋ねられるので、yes と入力しましょう。

Checking kernel parameters...
  kernel.shmmax: 257868288 -> 515736576
  kernel.shmall:     62956 ->    125912

Do you change the kernel parameters (yes/no): yes

Changing kernel parameters... Done.
共有メモリに関するパラメータ設定

PowerGres PlusのベースとなっているPostgreSQLは、起動時に共有メモリを含めたいくつかのメモリ領域をメモリ上に確保します。

代表的なものは、データベースの読み書きに使われる共有バッファ とトランザクションログの書き込みに使われるWALバッファです。

これらのサイズが共有メモリセグメントの上限値 (SHMMAX) をうわまわってしまうと、PostgreSQL は起動できなくなります。

以下はその例です。

PowerGres Plusの管理ツールを使用せずに直接コマンドラインでPostgreSQLを起動しようとすると、エラーメッセージが表示されて起動に失敗します。

[postgres@node1 ~]$ pg_ctl start -D /var/lib/pgsql/data start
サーバは起動中です。
[postgres@node1 ~]$ 2013-05-13 17:19:23 JST [25382] FATAL:  could not create shared memory segment: Invalid argument
2013-05-13 14:19:23 JST [25382] DETAIL:  Failed system call was shmget(key=5440001, size=4011376640, 03600).
2013-05-13 14:19:23 JST [25382] HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.
                                       You can either reduce the request size or reconfigure the kernel with larger SHMMAX......

したがって、豊富なメモリを利用してPostgreSQLを稼動する場合は、PostgreSQL 側の設定だけでなく、OS側の設定も必要である点に注意が必要です。

ただし、最近のOSは共有メモリに関する設定は大きめになっており、あまり問題になることはありません。

PowerGres Plusのインストールスクリプトでは、SHAMAXの推奨値を搭載メモリの25%としています。

また、システム全体の共有メモリの総量 (SHMALL) も、SHAMMAX に応じた値に設定されます。

共有メモリの設定が完了すると、パッケージ群とライセンスキーがインストールされます。

なお、インストール中、postgresユーザが存在しなければ、自動的に作成されます。

Installing packages...
準備中...                ########################################### [100%]
   1:powergresplus91-libs   ########################################### [  7%]
:
:
  13:powergresplus91-pltcl  ########################################### [ 93%]
  14:powergresplus91-test   ########################################### [100%]

Installing license key... Done.

PowerGres Plus V9.1 installation completed.

以上でインストールは完了です。

インストール後のディレクトリ構成

PowerGres Plusのディレクトリ構成は以下の通りです。

/opt/powergresplus91/ PowerGres Plus のインストールディレクトリ
bin/ PowerGres Plus 実行ファイル
etc/ PowerGres Plus 設定ファイル
include/ C言語用ヘッダファイル
lib/ C 言語用ライブラリファイル
libexec/ 形態素解析 – MeCab 実行ファイル
share/ マニュアル及び各種共有ファイル
ssl/ 透過的データ暗号化で利用する OpenSSL のマニュアルおよびスクリプトファイル

インストールされるコマンドの概説

/opt/powergresplus91/bin/ にはコマンドラインから実行できる各種コマンドが格納されています。

主なコマンドはPowerGres Plusの管理ツールを通して実行できます。

以下の表は代表的なコマンドです。

コマンド コマンドの説明 コマンド コマンドの説明
initdb データベースクラスタの初期化 pg_dump データベースの論理バックアップ
createdb データベースの作成 pg_restore 論理バックアップからデータベースのリストア
dropdb データベースの削除 pgx_dmpall*1 データベースクラスタ、テーブル空間、設定ファイルのバックアップ
createuser データベースユーザの登録 pgx_rcvall*1 データベースクラスタ、テーブル空間、設定ファイルのリカバリ
dropuser データベースユーザの削除 psql SQL インタープリタ
pg_ctl データベースサーバの起動・停止など pgx_getenvdata*1*2 データベース環境の情報を取得

*1 PowerGres Plus 独自のコマンドです。

*2 管理ツールからは実行できません。

環境変数の設定

インストールが完了したら、環境変数を設定します。

PowerGres Plus の管理ツールを操作し、データベースを管理するユーザの ~/.bash_profile に以下の行を追加します。

本連載ではデータベースを管理するユーザは postgres とします。

PATH=/opt/powergresplus91/bin:$PATH
MANPATH=/opt/powergresplus91/share/man:$MANPATH
LD_LIBRARY_PATH=/opt/powergres91/lib:$LD_LIBRARY_PATH
export PATH MANPATH LD_LIBRARY_PATH
このページのトップへ戻る
セットアップ
セットアップ

PowerGres Plus を使ってデータベースをセットアップしていきましょう。

postgres ユーザで管理ツールを起動し、postgres ユーザの /var/lib/pgsql/data ディレクトリにデータベースクラスタを作成します。

PowerGres Plus 管理ツールの起動

管理ツール を以下のコマンドで起動します。

[postgres@node1 ~]$ powergres-mgr &

管理ツールが起動します。

サーバの登録とデータベースクラスタの作成

管理ツールでデータベースクラスタを作成します。

ウィザードに従って、以下の情報を入力していきます。

設定項目 設定値 設定項目の説明
ラベル plus91 管理ツールで管理するデータベースクラスタの識別名です。
ポート 5432 データベースの接続ポート番号です。
データベースディレクトリ /var/lib/pgsql/data データベースクラスタのディレクトリです。
バックアップディレクトリ /var/lib/pgsql/backups データベースのバックアップで使用されるディレクトリです。
文字エンコーディング UTF8 データベース側のデフォルトの文字エンコーディングです。
スーパーユーザ名 postgres データベースのスーパーユーザを指定します。
パスワード 任意 上記ユーザのパスワードを指定します。

ラベル、ポート、を入力して「進む(F)」をクリックします。

データベースディレクトリと、バックアップディレクトリを入力します。

今回は /var/lib/pgsql ディレクトリ以下に作成します。

バックアップディレクトリには、PowerGres Plus の独自機能である、二重化されたトランザクションログが格納されます。

また、アーカイブログや、データベースクラスタの物理バックアップ(ベースバックアップ)なども、バックアップディレクトリに格納されます。

二重化されたトランザクションログ

PowerGres Plus では、データベースに関するバックアップを格納するディレクトリ(バックアップディレクトリ)を指定できます。

このディレクトリには、PowerGres Plus の独自機能である二重化されたトランザクションログも格納されます。

トランザクションログとは、データベースの変更情報が格納されたバイナリファイルです。

PowerGres Plus のベースとなっているPostgreSQLは、高速なアクセスと処理を実現するために、データベースの読み書きを共有メモリ上で行います。

また、共有メモリ上の変更内容は直接データベースが配置されているディスクに書き込まれる前に、いったんトランザクションログとして出力され、ある程度トランザクションログが溜まったところでデータベース本体に書き込まれます。

仮にサーバプロセスがクラッシュして、共有メモリ上のデータが消失したとしても、PostgreSQL はトランザクションログ利用することによって、データベースを障害直前の状態まで復旧することが可能です。

しかしながら、PostgreSQL は、トランザクションログを一箇所にしか作成しません。

したがって、ディスク障害などによって使用中のトランザクションログが失われてしまうと、データベースの運用継続、復旧ができなくなってしまいます。

そこで、PowerGres Plus では PostgreSQL に機能拡張を行い、データベースが使用しているトランザクションログと同一のファイルを別のディスクへ出力できるようになっています。

文字エンコーディングはデフォルトのUTF8とします。

スーパーユーザ名はpostgresです。

このスーパーユーザ名は、Linux のアカウントではありません。

PowerGres Plusを通して管理するデータベースのスーパーユーザです。

パスワードを入力して「進む(F)」をクリックします。

データベースクラスタの初期化が行われ、管理ツールへのデータベース登録が完了しました。

データベースサーバの起動

登録したデータベースサーバを起動します。「サービス」をクリックし、「サービスを開始」をクリックします。

正常にサービスが起動すると、「サービスを開始」がグレーアウトします。

コマンドラインでデータベースのセットアップ

管理ツールを使ったデータベースのセットアップ手順を、コマンドラインのみで行ってみます。

データベースクラスタの初期化

データベースクラスタの初期化は、initdb コマンドを使います。

initdb コマンドの主なオプションは以下の通りです。

オプション オプションの説明
–encoding データベース側のデフォルトの文字エンコーディングを指定します。
–no-locale ロケール機能を使用しません。Linux 環境では一般に指定した方がよいオプションです。
-D データベースクラスタのディレクトリを指定します。
[postgres@node1 ~]$ initdb --encoding=UTF8 --no-locale -D /var/lib/pgsql/data
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。
:
:
または
    pg_ctl -D /var/lib/pgsql/data -l logfile start

[postgres@node1 ~]$ ls /var/lib/pgsql/data
PG_VERSION  global   pg_hba.conf    pg_multixact  pg_serial    pg_subtrans  pg_twophase  postgresql.conf
base        pg_clog  pg_ident.conf  pg_notify     pg_stat_tmp  pg_tblspc    pg_xlog

上記のようにメッセージが続き、データベースクラスタが作成されます。

バックアップディレクトリの作成と設定

トランザクションログの二重化と各種バックアップ機能を有効にするための作業です。

空のバックアップディレクトリを作成します。

[postgres@node1 ~]$ mkdir /var/lib/pgsql/backups
[postgres@node1 ~]$ chmod 700 /var/lib/pgsql/backups
[postgres@node1 ~]$ ls -dl /var/lib/pgsql/backups
drwx------ 2 postgres postgres 4096  5月 13 15:01 /var/lib/pgsql/backups

また、postgresql.conf ファイルの編集を行います。

以下の通りパラメータを変更します。

postgresql.conf ファイルはデータベースクラスタディレクトリ内にあります。

wal_level = hot_standby
archive_mode = on
archive_command = '"/opt/powergresplus91/bin/pgx_xlogcopy.cmd" "%p" "/var/lib/pgsql/backups/archived_xlog/%f"'
backup_destination = '/var/lib/pgsql/backups'

パラメータの内容は以下の通りです。

パラメータ パラメータの説明
wal_level トランザクションログに出力する情報量を指定します。archive または hot_standby を指定します。
archive_mode アーカイブモードの有効化。
archive_command トランザクションログをアーカイブする際のコマンド。
backup_destination バックアップディレクトリを指定します。

archive_command には、PowerGres Plus専用のpgx_xlogcopy.cmdを用います。

archive_commandで設定されている %p は、コピー対象となる個々のトランザクションログファイルの絶対パスに置き換えられます。

また、%f はファイル名のみに置き換えられます。

アーカイブログの出力先は、バックアップディレクトリ配下の “archived_xlog” ディレクトリ内である点に注意してください。

データベースサーバの起動

データベースサーバの起動には、pg_ctl start コマンドを使います。

また、pg_ctl status コマンドでデータベースサーバの起動状態を確認できます。

-D オプションでデータベースクラスタのディレクトリを指定します。

[postgres@node1 ~]$ pg_ctl start -D /var/lib/pgsql/data
サーバは起動中です。
[postgres@node1 ~]$ pg_ctl status -D /var/lib/pgsql/data
pg_ctl: サーバが動作中です(PID: 23623)
/opt/powergresplus91/bin/postgres "-D" "/var/lib/pgsql/data"
基本的なデータベースの操作

PowerGresPlus を使ってデータベースを操作してみましょう。

データベースユーザの作成

データベースユーザを追加してみましょう。

データベースのスーパーユーザであるpostgresでもデータベースを操作できますが、スーパーユーザはデータベースに関する全ての権限を所有しています。

セキュリティや誤操作防止の観点から、通常の操作はスーパーユーザとは別に一般ユーザを作成し、そのユーザで操作を行うことをおすすめします。

データベースユーザは厳密には「ロール」と呼びます。

ロールという概念は、ユーザとグループをまとめたものです。

PowerGresではログイン権限やデータベースオブジェクトへの各権限などをロール単位で設定します。

「オブジェクト」の「ロール」を見ると、ロールが確認できます。

データベースセットアップ直後は、データベースのスーパーユーザpostgresのみが作成されており、一般ユーザは作成していないので存在しません。

データベースの作成権限のある一般ユーザを作成しましょう。

「ロールを作成」をクリックします。

ロールの情報と権限は以下の通りとします。

ロール作成項目 設定値
ロール名 testuser
パスワード 任意
ログイン権限 あり
スーパーユーザ権限 なし
データベース作成権限 あり
ロール作成権限 なし
レプリケーション権限 なし

ロール名、パスワードを入力し、必要な権限にチェックを入れて「OK(O)」をクリックします。

「オブジェクト」の「ロール」から testuser が追加されていることが確認できます。

コマンドラインでロールを追加する

管理ツールを使ったロールの追加手順を、コマンドラインのみで行ってみます。

ロールの追加は、createuser コマンドを使います。

createuser コマンドは対話的にロールを追加することができます。

-P オプションを指定して追加したいロールにパスワードを設定します。

引数に追加したいロール名を指定します。

なお、ログイン権限は自動的に付与されます。

[postgres@node1 ~]$ createuser -P testuser
新しいロールのためのパスワード: # 任意のパスワードを入力
もう一度入力してください: # 任意のパスワードを入力
新しいロールをスーパーユーザにしますか? (y/n)n
新しいロールに対してデータベースを作成する権限を与えますか? (y/n)y
新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n
パスワード: # postgres のパスワードを入力

データベースの作成

一般ユーザtestuserでデータベースを作成してみましょう。

データベースクラスタ /var/lib/pgsql/data 内のデータベースを見るには、「オブジェクト」の「データベース」をクリックします。

この時、3 のデータベースが既に存在しています。

これらは、データベースクラスタ初期化時(initdb 実行時)に自動的に作成されます。

postgresがロール、データベース作成などのユーティリティでPostgreSQLへの接続を受け付けるデータベースで、template0, template1がこれから作成するデータベースの雛型データベースとなります。

「オブジェクト」の「データベースを作成」をクリックすると、データベースを作成する事ができます。

ここでは以下のように設定します。

データベース作成項目 設定値
データベース名 testdb
データベース所有者 testuser
文字エンコーディング UTF8
テーブルスペース pg_default

データベース情報を入力して、「OK(O))」をクリックします。

データベースが新たに追加されました。

コマンドラインでデータベースを作成する

管理ツールを使ったデータベースの作成手順を、コマンドラインのみで行ってみます。

データベースの追加は createdb コマンドを使います。

-O オプションでデータベースの所有者を指定します。

引数に作成したいデータベース名を指定します。

[postgres@node1 ~]$ createdb -O testuser testdb
パスワード: # postgres のパスワードを入力

psqlによるデータベースへの接続

psql でデータベースに接続してみましょう。

psql はデータベースに接続してSQLを実行するためのプログラムです。

「その他ツール」から「psql コマンドラインツールを実行」の「実行」をクリックします。

psql を起動すると、以下のターミナルが立ち上がります。

その際、パスワードの入力が求められます。

サーバの登録時にデータベースのスーパーユーザpostgresに設定したパスワードを入力します。

psqlのプロンプトでデータベースのスーパーユーザは =# 、一般ユーザは => で違いがあります。

画面はスーパユーザがpostgresデータベースに接続している状態です。

なお、終了する際は、\q を入力します。

psql には SQL 以外にも psql 内のみで使える便利なバックスラッシュコマンド(メタコマンド)があります。

主なバックスラッシュコマンドは、以下のとおりです。

その他のバックスラッシュコマンドは、psql を使っていく中で紹介していきます。

主なバックスラッシュコマンド
コマンド 意味
\? コマンド一覧
\c databasename [username] 新しい接続で他のデータベースに接続。ユーザ名も付けるとそのユーザで接続
\h [SQL] SQL のヘルプ
\d[t|i|s|v|S] テーブル、インデックス、シーケンス、システムテーブルの一覧
\l データベース一覧
\d [NAME] 指定したテーブル、インデックス、シーケンスなどの定義を表示
\dT データ型の一覧
\df 関数の一覧

まずは \l コマンドでデータベース一覧を確認してみましょう。

管理ツールで作成したtestdbが一覧に表示されています。

また、\du コマンドでロールの一覧も確認してみましょう。

管理ツールで作成した testuser が一覧に表示されています。

続けて、\c コマンド を使って 先ほど作成したデータベース testdb に接続してみましょう。

その後、SET ROLE 文でロールをスーパーユーザpostgresから、一般ユーザ用のロールtestuserに変えてみましょう。

RESET ROLE で元のロールであるスーパーユーザ postgres に戻れます。

コマンドラインから psql でデータベースへ接続する

管理ツールからではなく、コマンドラインからpsqlを起動してデータベースに接続してみましょう。

コマンドは psql コマンドを使います。-d オプションで 接続するデータベースを指定します。

-U オプションでデータベースへ接続するロールを指定します。

-p オプションで接続ポートを指定します。

なお、-U オプションと -d オプションの値は、オプションとして指定せずに、psql コマンドの第一引数と第二引数に接続先データベースと接続ロールを指定することもできます。

以下の例では、Linuxユーザのpostgresがロールのtestuserとして、testdbに接続しています。

[postgres@node1 ~]$ psql -d testdb -p 5432 -U testuser
ユーザ testuser のパスワード: # testuser のパスワードを入力
psql (9.1.9)
"help" でヘルプを表示します.

testdb=>

SQLの実行

psql 上で、SQL を実行し、簡単なテーブルを作成してみましょう。

ここでは、社員テーブル employee を作成します。

下のCREATE TABLE文で4つのカラムを持ったテーブルを定義しています。

CREATE TABLE employee (
  number int,         -- 社員番号
  name text,          -- 名前
  position text,      -- 役職
  date_of_hire date   -- 入社日
);

\d で employee テーブルを確認してみましょう。

\d employee

SQLの基本となる4つの構文INSERT, SELECT, UPDATE, DELETEをそれぞれ実行して、データの投入から削除まで行います。

社員テーブル employee が定義できたら、INSERT 文で以下のデータを登録していきましょう。

INSERT INTO employee VALUES (1981352, '吉本 勘兵衛', 'staff', '1998-04-01');
INSERT INTO employee VALUES (1782822, '長崎 一郎', 'chief', '1978-10-01');
INSERT INTO employee VALUES (2081577, '山田 太郎', 'staff', '2008-04-01');
INSERT INTO employee VALUES (1851139, '大村 祐子', 'chief', '1985-04-01');

テーブルへのデータの登録が済んだら、SELECT文で確認してみましょう。

SELECT * FROM employee;

UPDATE 文でデータの更新を行いましょう。

社員番号1981352の吉本さんの役職が、マネージャ(manager)に昇進したと仮定して、データの更新を行っていきます。

注意しなければならないのは、WHERE 句で条件を指定しないとすべての行が更新されてしまいます。

吉本さんの社員番号を条件に指定しています。

UPDATE employee SET position = 'manager' WHERE number = 1981352;

DELETE 文で削除を行いましょう。

社員番号1851139の大村さんが退職したと仮定してデータの削除を行います。

こちらも、UPDATE文の時と同じようにWHERE句で条件を絞りこんでから削除をします。

DELETE FROM employee WHERE number = 1851139;

SELECT 文で確認してみましょう。

SELECT * FROM employee;

吉本さんがmanagerへ、大村さんが削除されている事がわかります。

SQL 基本 4 構文
データの操作 SQL 構文例
登録 INSERT 文 INSERT INTO employee VALUES (1981352, ‘吉本 勘兵衛’, ‘staff’, ‘1998-04-01’);
検索 SELECT 文 SELECT name FROM employee;
更新 UPDATE 文 UPDATE employee SET position = ‘manager’ WHERE number = 1981352;
削除 DELECT 文 DELETE FROM employee WHERE number = 1851139;
次回予告

今回はPowerGres Plusの導入方法と基本的な使い方を紹介しました。

次回は、オンラインバックアップとそのリカバリ方法をご紹介いたします。

通常のPostgreSQLでは復旧が不可能な場合でも、PowerGres Plusでは、独自機能のトランザクションログの二重化を利用して、簡単に復旧可能です。

いくつかの障害パターンをもとに、「PostgreSQLではできなくてPowerGres Plusではできること」をメインテーマに、体験記をお送りいたします。

SRA OSS Online Shop

製品・サービスに関するお問い合わせ
03-5979-2701

お問い合せ受付時間 月 - 金 10:00 - 17:00

メールフォームでのお問い合わせ

ページトップへ