これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
PGroongaは1.2.4からPostgreSQL組み込みのロジカルレプリケーションをサポートしています。
このドキュメントではPostgreSQL組み込みのロジカルレプリケーション機能をPGroonga用に設定する方法を説明します。多くの手順は通常のロジカルレプリケーションの設定手順です。いくつかPGroonga固有の手順があります。
ロジカルレプリケーションはレプリケーション元とレプリケーション先で同じスキーマを持つ必要がありません。
そのため、ここでは、レプリケーション先にのみインデックスを設定します。
PostgreSQL組み込みのロジカルレプリケーション機能をPGroonga用に設定する手順は次の通りです。「[通常]」タグは通常のロジカルレプリケーションの手順であることを示しています。「[固有]」タグはPGroonga固有の手順であることを示しています。
[通常] パブリッシャーとサブスクライバーにPostgreSQLをインストールします。
[固有] サブスクライバーにPGroongaをインストールします。
[通常] パブリッシャーとサブスクライバーのPostgreSQLデータベースを初期化します。
[通常] パブリッシャーのpostgresql.conf
とpg_hba.conf
にロジカルレプリケーションの設定を追加します。
[通常] パブリッシャーとサブスクライバーにテーブルを作成します。
[通常] パブリッシャーにパブリケーションを作成します。
[通常] サブスクライバーにサブスクリプションを作成します。
[固有] サブスクライバーにPGroongaのインデックスを作成します。
[通常] パブリッシャーにデータを挿入します。
このドキュメントでは次の環境を使います。
パブリッシャー:
OS:CentOS 7
IPアドレス: 172.16.0.1
データベース名:blog
レプリケーションユーザー名:replicator
レプリケーションユーザーのパスワード:passw0rd
サブスクライバー
OS:CentOS 7
IPアドレス: 172.16.0.2
データベース名:blog
このドキュメントではCentOS 7用のコマンドラインを書いています。もし、他のプラットフォームを使っている場合は自分でコマンドラインを調整してください。
これは通常の手順です。
パブリッシャーとサブスクライバーに PostgreSQL 17 をインストールします。
パブリッシャーとサブスクライバー
% sudo -H yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -qf --queryformat="%{VERSION}" /etc/redhat-release)-$(rpm -qf --queryformat="%{ARCH}" /etc/redhat-release)/pgdg-redhat-repo-latest.noarch.rpm
% sudo yum install postgresql17-server
PostgreSQL: Linux downloads (CentOS)も参照してください。
これはPGroonga固有の手順です。
サブスクライバーにPGroongaをインストールします。
サブスクライバー:
% sudo -H yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -qf --queryformat="%{VERSION}" /etc/redhat-release)-$(rpm -qf --queryformat="%{ARCH}" /etc/redhat-release)/pgdg-redhat-repo-latest.noarch.rpm
% sudo -H yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm
% sudo -H yum install -y postgresql17-pgroonga
これは通常の手順です。
パブリッシャーとサブスクライバーのPostgreSQLのデータベースを初期化します。
パブリッシャーとサブスクライバー
% sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
% sudo systemctl enable --now postgresql-17
postgresql.con
にロジカルレプリケーションの設定を追加するこれは通常の手順です。
パブリッシャーの postresql.conf
にのみ、以下のロジカルレプリケーションの設定を追記します。
wal_level = logical
max_wal_senders = 2
(= 1 (サブスクライバー数) * 2
。 * 2
は意図せず接続が切れた場合のため。)
max_replication_slots = 1
(= 1 (サブスクライバーの数)
)
/var/lib/pgsql/17/data/postgresql.conf
:
変更前:
#listen_address = 'localhost'
#wal_level = minimal
#max_wal_senders = 0
#max_replication_slots = 0
変更後:
listen_address = '*'
wal_level = logical
max_wal_senders = 2
max_replication_slots = 1
パブリッシャーの pg_hba.conf
にのみ、以下のロジカルレプリケーションの設定を追加します。
172.16.0.2/32
から レプリケーションユーザー replicator
による接続を許可します。/var/lib/pgsql/17/data/pg_hba.conf
:
変更前:
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
変更後:
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
# IPv4 remote connections:
host all replicator 172.16.0.2/32 md5
この設定を反映するためにPostgreSQLを再起動します。
% sudo -H systemctl restart postgresql-17
パブリッシャーにのみレプリケーションのためのユーザーを作成します。
% /usr/pgsql-17/bin/createuser --pwprompt replicator -U postgres
Enter password for new role: (passw0rd)
Enter it again: (passw0rd)
これは通常の手順です。
サブスクライバーに通常ユーザーを作成します。
サブスクライバー:
% /usr/pgsql-17/bin/createuser ${USER} -U postgres
パブリッシャーとサブスクライバーでデータベースを作成します。
パブリッシャーとサブスクライバー
% /usr/pgsql-17/bin/createdb --owner ${USER} blog -U postgres
作成されたデータベース内でテーブルを作成する。
blog
データベースへ接続する。
% /usr/pgsql-17/bin/psql blog -U ${USER}
entries
テーブルを作成します。
CREATE TABLE entries (
title text,
body text
);
これはPGroonga固有の手順です。
このデータベースにPGroongaをインストールします。スーパーユーザー権限が必要です。
サブスクライバー:
CREATE EXTENSION pgroonga;
サブスクライバーにPGroongaのインデックスを作成します。
サブスクライバー:
CREATE INDEX entries_full_text_search ON entries USING pgroonga (title, body);
パブリッシャーにのみ、パブリケーションを作成します。
CREATE PUBLICATION pub_srv1_blog FOR TABLE entries;
サブスクライバーにのみ、サブスクリプションを作成します。
CREATE SUBSCRIPTION sub_srv2_blog CONNECTION 'dbname=blog hostaddr=172.16.0.2 port=5432 user=replicator password=passw0rd' PUBLICATION pub_srv1_blog;
作成したentries
テーブルにデータを追加します。
INSERT INTO entries VALUES ('PGroonga', 'PGroonga is a PostgreSQL extension for fast full text search that supports all languages. It will help us.');
INSERT INTO entries VALUES ('Groonga', 'Groonga is a full text search engine used by PGroonga. We did not know about it.');
INSERT INTO entries VALUES ('PGroonga and replication', 'PGroonga 1.1.6 supports WAL based streaming replication. We should try it!');
レプリケーションの確認:
パブリッシャー:
SELECT * FROM entries;
title | body
---------+---------------------------------------------------------------------------
PGroonga | PGroonga is a PostgreSQL extension for fast full text search that supports all languages. It will help us.
Groonga | Groonga is a full text search engine used by PGroonga. We did not know about it.
PGroonga and replication | PGroonga 1.1.6 supports WAL based streaming replication. We should try it!
(3 rows)
サブスクライバー:
SELECT * FROM entries;
title | body
---------+---------------------------------------------------------------------------
PGroonga | PGroonga is a PostgreSQL extension for fast full text search that supports all languages. It will help us.
Groonga | Groonga is a full text search engine used by PGroonga. We did not know about it.
PGroonga and replication | PGroonga 1.1.6 supports WAL based streaming replication. We should try it!
(3 rows)
これで、サブスクライバーで作成したPGroongaのインデックスで、サブスクライバーで複製したデータを検索できます。
SET enable_seqscan TO off;
SELECT * FROM entries WHERE body &@ 'Groonga';
title | body
---------+----------------------------------------------------------------------------------
Groonga | Groonga is a full text search engine used by PGroonga. We did not know about it.
(1 row)