LoginSignup
2
2

More than 3 years have passed since last update.

Postgresql11.xでインスタンスを複数起動する

Posted at

PostgreSQLインストール

PostgreSQL11.6をインストールし、インスタンスを複数起動する。
また、起動スクリプトもインスタンスごとに作成して個別に起動/停止できるようにする。

  • インスタンス①

    • pgsql-5432
    • ポート:5432
    • /data/pgsql-5432
  • インスタンス②

    • pgsql-5433
    • ポート5433
    • /data/pgsql-5433

Yumリポジトリの追加

今回はバージョン11をインストールするため、リポジトリの追加を行う。

$ yum --disablerepo=\* --enablerepo=centos-media list
$ yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Yumの実行

$ yum -y install postgresql11-server postgresql11-contrib
$ rpm -qa |grep postgres
$ ls -l /usr/pgsql-11/

環境変数の設定

postgresユーザにPATHを追加する。

$ su - postgres
$ vi ./bashrc
export PATH=$PATH:/usr/pgsql-11/bin
export PGDATA=/data/pgsql-5432
export PATH
export PGDATA

$ source bashrc

インスタンス①(pgsql-5432)

一つ目のインスタンスpgsql-5432を作成する。

インスタンス作成

initdbコマンドでディレクトリ「/data/pgsql-5432」にインスタンス作成を作成する。

$ initdb --pgdata=/data/pgsql-5432
$ cat /data/pgsql-5432/PG_VERSION
11

インスタンス起動確認

pg_ctlコマンドを実行し、インスタンスの起動確認をする。

$ su postgres
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 start
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 stop
$ exit

起動スクリプト作成

インストール時に作成された起動スクリプトを複製して、インスタンス①用に編集する。
※デフォルトのpostgresql.serviceは使用する予定が無ければ、別ディレクトリへ退避、もしくは編集で良いかも。
systemctlとかを実行する時にTAB補完されてしまうため。

$ cd /usr/lib/systemd/system/
$ cp -p postgresql.service postgresql-5432.service
$ vi /usr/lib/systemd/system/postgresql-5432.service
Environment=PGDATA=/data/pgsql-5432/

起動スクリプト確認

インスタンス①のサービス停止/起動、必要なら自動起動設定をしておく。
※インスタンス②を作るときに、このままポートが被るためサービス停止しておく。

$ systemctl daemon-reload
$ systemctl status postgresql-5432.service
$ systemctl start postgresql-5432.service
$ systemctl stop postgresql-5432.service
$ systemctl status postgresql-5432.service

$ systemctl enable postgresql-5432.service
$ systemctl list-unit-files |grep postgres

インスタンス②(pgsql-5433)

一つ目のインスタンスpgsql-5433を作成する。
「インスタンス①」で実行した手順のディレクトリパスを変更するだけ。

インスタンス作成

initdbコマンドでディレクトリ「/data/pgsql-5433」にインスタンス作成を作成する。

$ initdb --pgdata=/data/pgsql-5433
$ cat /data/pgsql-5433/PG_VERSION
11

インスタンス起動確認

pg_ctlコマンドを実行し、インスタンスの起動確認をする。

$ su postgres
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 start
$ /usr/pgsql-11/bin/pg_ctl -D /data/pgsql-5432 stop
$ exit

起動スクリプト作成

インストール時に作成された起動スクリプトを複製して、インスタンス②用に編集する。

$ cd /usr/lib/systemd/system/
$ cp -p postgresql.service postgresql-5433.service
$ vi /usr/lib/systemd/system/postgresql-5433.service
Environment=PGDATA=/data/pgsql-5432/

起動スクリプト確認

インスタンス②のサービス停止/起動、必要なら自動起動設定をしておく。
※このままだとインスタンス①とポートが被るためサービス停止しておく。

$ systemctl daemon-reload
$ systemctl status postgresql-5433.service
$ systemctl start postgresql-5433.service
$ systemctl stop postgresql-5433.service
$ systemctl status postgresql-5433.service

$ systemctl enable postgresql-5433.service
$ systemctl list-unit-files |grep postgres

ポート設定

各インスタンスが使用するポートを変更する。
今回はインスタンス②のみ変更。

$ vi /data/pgsql-5433/postgresql.conf
#port = 5432
port = 5433

インスタンス起動

インスタンスを個別に起動させる。

$ systemctl start postgresql-5432.service
$ systemctl status postgresql-5432.service

$ systemctl start postgresql-5433.service
$ systemctl status postgresql-5433.service

プロセス確認

各インスタンスのプロセスを確認する。

$ ps -ef |grep pgsql
postgres 28435     1  0 Feb09 ?        00:00:02 /usr/pgsql-11/bin/postmaster -D /data/pgsql-5432/
postgres 28456     1  0 Feb09 ?        00:00:01 /usr/pgsql-11/bin/postmaster -D /data/pgsql-5433/

ポート確認

各インスタンスが指定したポートで起動していることを確認する。

$ ss -anp |grep 5432
~~~
tcp    LISTEN     0      128       *:5432                  *:*                   users:(("postmaster",pid=28435,fd=3))
~~~

$ ss -anp |grep 5433
~~~
tcp    LISTEN     0      128       *:5433                  *:*                   users:(("postmaster",pid=28456,fd=3))
~~~

あとは、インスタンスごとに設定するだけ!

$ ll /data/pgsql-5432
$ ll /data/pgsql-5433

以上。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2