PostgreSQL 10.4をRHEL 7.5(AWSのEC2)へインストールしてPITR可能な初期設定を行う
目次
概要
リリースから時間が経ってしまいましたが、PostgreSQL 10をインストールしてみたので手順を載せます。 2018/8/4時点でリビジョンは10.4まで進んでいました。 設定ファイルの設定項目が増えていたり、ディレクトリ名が変わっているものがありましたが、 バージョン10のインストールの基本的な流れは9.6と変わらないようです。
今回はRHEL 7.5がインストールされたAWSのEC2インスタンスに、PostgreSQL 10.4をインストールします。 運用の中で、人為的な操作ミスによるデータの削除や、バッチ処理のバグによるデータ誤りなどのデータベースの論理障害が 発生することを想定し、バックアップからのPITR(Point In Time Recovery)を行える構成とします。 ただし、ディスクの故障など物理障害は今回想定から外すこととし、Linuxのディスク構成を簡略化しています。 また、SystemdでPostgreSQLの起動を制御できるよう設定します。
WALファイルをアーカイブする場合の注意点として、アーカイブファイルを自動で削除する仕組みがありません。 ディスクの使用率が不足する前に定期的に削除する必要があります。 適切なタイミングとしては、データベースクラスタのベースバックアップを取得したタイミングで、 それ以前に生成されたアーカイブファイルが不要となりますので、 ベースバックアップの実行とアーカイブファイルの削除をセットで運用するのが良いと思います。 今回はその詳細については触れませんが、運用設計として考慮しておいてください。
WALはWrite Ahead Loggingの略で、いわゆるデータベースのトランザクションログです。 Oracle DatabaseではREDOログと呼んでいるものと同じです。
構成
想定環境
今回構築するPostgreSQLサーバのプロセス、メモリ、接続の構成概要は以下の通りとなります。
ディレクトリ構成は任意ですが、今回は以下の通りとします。 ご自身の環境に読み替えて構築してください。
最新データ | /data/ |
---|---|
バックアップデータ | /bkup/ |
データベースクラスタ | /data/pgdata1/ |
WALファイル | /data/pgdata1/pg_wal/ |
アーカイブファイル | /bkup/pgdata1/pg_arch/ |
サーバ環境はAWS(Amazon Web Services)のEC2インスタンスを利用しました。 サーバのスペックは以下のとおりです。 構築作業時はスペックが低くても問題ないので、インスタンスタイプはt2.microを選択しています。 本番運用開始前にインスタンスタイプをアップさせる前提です。
項目 | 内容 |
---|---|
インスタンスタイプ | t2.micro |
vCPU | 1 |
メモリ | 1GiB |
ディスク | SSD 10GiB |
リージョン | アジアパシフィック (東京) |
サーバ構成
OSバージョン
Red Hat Enterprise Linux 7.5 x86_64
ソフトウェア・パッケージ一覧
- postgresql10-10.4-1PGDG.rhel7.x86_64.rpm
- postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm
- postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm
環境構築
インストール
wgetのインストール
今回利用したAWSのEC2インスタンスでは初期状態でwgetがインストールされていないので、 始めにインストールします。その後、wgetでPostgreSQLのインストールパッケージをダウンロードします。 コマンドに都度 sudo をつけるのが面倒なので、作業は root ユーザで実行しています。
$ sudo su - # yum -y install wget Loaded plugins: amazon-id, rhui-lb, search-disabled-repos rhui-REGION-client-config-server-7 | 2.9 kB 00:00:00 rhui-REGION-rhel-server-releases | 3.5 kB 00:00:00 rhui-REGION-rhel-server-rh-common | 3.8 kB 00:00:00 (1/7): rhui-REGION-client-config-server-7/x86_64/primary_db | 1.2 kB 00:00:00 (2/7): rhui-REGION-rhel-server-rh-common/7Server/x86_64/group | 104 B 00:00:00 (3/7): rhui-REGION-rhel-server-releases/7Server/x86_64/group | 855 kB 00:00:00 (4/7): rhui-REGION-rhel-server-rh-common/7Server/x86_64/primary_db | 121 kB 00:00:00 (5/7): rhui-REGION-rhel-server-rh-common/7Server/x86_64/updateinfo | 33 kB 00:00:00 (6/7): rhui-REGION-rhel-server-releases/7Server/x86_64/updateinfo | 2.9 MB 00:00:00 (7/7): rhui-REGION-rhel-server-releases/7Server/x86_64/primary_db | 54 MB 00:00:01 Resolving Dependencies --> Running transaction check ---> Package wget.x86_64 0:1.14-15.el7_4.1 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================== Package Arch Version Repository Size ======================================================================================================================== Installing: wget x86_64 1.14-15.el7_4.1 rhui-REGION-rhel-server-releases 547 k Transaction Summary ======================================================================================================================== Install 1 Package Total download size: 547 k Installed size: 2.0 M Downloading packages: wget-1.14-15.el7_4.1.x86_64.rpm | 547 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : wget-1.14-15.el7_4.1.x86_64 1/1 Verifying : wget-1.14-15.el7_4.1.x86_64 1/1 Installed: wget.x86_64 0:1.14-15.el7_4.1 Complete!
RPMパッケージのダウンロード
PostgreSQLサーバに最低限必要なRPMパッケージを3つダウンロードします。 ファイルのダウンロード先は /media/installer/ ディレクトリとしています。
【ダウンロードサイト】
RHEL 7系(x86_64)Linux向けPostgreSQL 10ダウンロードページ
# cd /media/ # mkdir installer # cd installer/ # wget https://yum.postgresql.org/10/redhat/rhel-7-x86_64/postgresql10-10.4-1PGDG.rhel7.x86_64.rpm --2018-08-04 12:55:04-- https://yum.postgresql.org/10/redhat/rhel-7-x86_64/postgresql10-10.4-1PGDG.rhel7.x86_64.rpm Resolving yum.postgresql.org (yum.postgresql.org)... 174.143.35.196, 2001:4800:1501:1::196 Connecting to yum.postgresql.org (yum.postgresql.org)|174.143.35.196|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/postgresql10-10.4-1PGDG.rhel7.x86_64.rpm [following] --2018-08-04 12:55:06-- http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/postgresql10-10.4-1PGDG.rhel7.x86_64.rpm Resolving download.postgresql.org (download.postgresql.org)... 174.143.35.246, 204.145.124.244, 217.196.149.55, ... Connecting to download.postgresql.org (download.postgresql.org)|174.143.35.246|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1624360 (1.5M) [application/x-redhat-package-manager] Saving to: ‘postgresql10-10.4-1PGDG.rhel7.x86_64.rpm’ 100%[==============================================================================>] 1,624,360 1.45MB/s in 1.1s 2018-08-04 12:55:08 (1.45 MB/s) - ‘postgresql10-10.4-1PGDG.rhel7.x86_64.rpm’ saved [1624360/1624360] # wget https://yum.postgresql.org/10/redhat/rhel-7-x86_64/postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm --2018-08-04 12:55:16-- https://yum.postgresql.org/10/redhat/rhel-7-x86_64/postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm Resolving yum.postgresql.org (yum.postgresql.org)... 174.143.35.196, 2001:4800:1501:1::196 Connecting to yum.postgresql.org (yum.postgresql.org)|174.143.35.196|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm [following] --2018-08-04 12:55:17-- http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm Resolving download.postgresql.org (download.postgresql.org)... 87.238.57.227, 174.143.35.246, 204.145.124.244, ... Connecting to download.postgresql.org (download.postgresql.org)|87.238.57.227|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 362496 (354K) [application/x-redhat-package-manager] Saving to: ‘postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm’ 100%[==============================================================================>] 362,496 324KB/s in 1.1s 2018-08-04 12:55:19 (324 KB/s) - ‘postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm’ saved [362496/362496] # wget https://yum.postgresql.org/10/redhat/rhel-7-x86_64/postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm --2018-08-04 12:55:30-- https://yum.postgresql.org/10/redhat/rhel-7-x86_64/postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm Resolving yum.postgresql.org (yum.postgresql.org)... 174.143.35.196, 2001:4800:1501:1::196 Connecting to yum.postgresql.org (yum.postgresql.org)|174.143.35.196|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm [following] --2018-08-04 12:55:30-- http://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm Resolving download.postgresql.org (download.postgresql.org)... 217.196.149.55, 87.238.57.227, 174.143.35.246, ... Connecting to download.postgresql.org (download.postgresql.org)|217.196.149.55|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 4742480 (4.5M) [application/x-redhat-package-manager] Saving to: ‘postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm’ 100%[==============================================================================>] 4,742,480 707KB/s in 7.5s 2018-08-04 12:55:38 (615 KB/s) - ‘postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm’ saved [4742480/4742480] # ls -l total 6576 -rw-r--r--. 1 root root 1624360 May 14 13:46 postgresql10-10.4-1PGDG.rhel7.x86_64.rpm -rw-r--r--. 1 root root 362496 May 14 13:46 postgresql10-libs-10.4-1PGDG.rhel7.x86_64.rpm -rw-r--r--. 1 root root 4742480 May 14 13:46 postgresql10-server-10.4-1PGDG.rhel7.x86_64.rpm
RPMパッケージからPostgreSQLをインストール
ダウンロードしたRPMパッケージを使用してPostgreSQLをインストールします。 インストール時に警告メッセージが表示されますが、無視して構いません。
# rpm -ihv postgresql10-*.rpm warning: postgresql10-10.4-1PGDG.rhel7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY Preparing... ################################# [100%] Updating / installing... 1:postgresql10-libs-10.4-1PGDG.rhel################################# [ 33%] 2:postgresql10-10.4-1PGDG.rhel7 ################################# [ 67%] 3:postgresql10-server-10.4-1PGDG.rh################################# [100%]
設定
postgresユーザのパスワード設定
PostgreSQLのパッケージをインストールすると、自動で postgres という名前のLinuxユーザが作成されます。 作成直後はパスワードが設定されていないため、設定します。
# passwd postgres Changing password for user postgres. New password: ←パスワードを入力(表示されません) Retype new password: ←上と同じパスワードを入力(表示されません) passwd: all authentication tokens updated successfully.
postgresユーザの環境変数設定
postgresユーザの環境変数としてデータベースクラスタとPostgreSQLのコマンドへのパスを設定します。
# grep postgres /etc/passwd ←postgresユーザのホームディレクトリを確認
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
# cd /var/lib/pgsql/
# vi .bash_profile
※以下、該当箇所のみ変更※ PGDATA=/var/lib/pgsql/10/data export PGDATA ↓変更 PGDATA=/data/pgdata1 export PGDATA export PATH=$PATH:/usr/pgsql-10/bin
データベースクラスタ用ディレクトリ($PGDATA)作成
インストールしたRPMパッケージで初期設定されているデータベースクラスタは /var/lib/pgsql/10/data/ となっています。 このままでも良いのですが、ディレクトリ階層が深くて分かりづらいため /data/pgdata1/ に変更します。 また、アーカイブファイルの格納先は /bkup/pgdata1/pg_arch/ とします。 その他、データベースクラスタのベースバックアップの取得先は /bkup/ ディレクトリとします。
データベースクラスタのベースバックアップと最新のWALファイル、アーカイブファイルはPITRに必要なファイルなので、 冗長化を高めたディスクに保管した方が良いですが、今回は物理障害ではなく、論理障害(人為的操作ミス)からの 復旧に限定した構成としているため、データベースクラスタと同じディスク上に保存しています。
それぞれディレクトリを作成して必要なパーミッションを設定します。 データベースクラスタ用のディレクトリはPostgreSQL管理者ユーザの postgres のみが参照、更新できるようにします。
# cd / # chmod 777 data ←最新データ用 # mkdir -m 777 bkup ←バックアップデータ用 # su - postgres -bash-4.2$ cd /data/ -bash-4.2$ mkdir -m 700 pgdata1 ←データベースクラスタ用 -bash-4.2$ ls -l total 0 drwx------. 2 postgres postgres 6 Aug 4 13:08 pgdata1 -bash-4.2$ cd /bkup/ -bash-4.2$ mkdir -m 700 pgdata1 -bash-4.2$ ls -l total 0 drwx------. 2 postgres postgres 6 Aug 4 13:08 pgdata1 -bash-4.2$ cd pgdata1/ -bash-4.2$ mkdir -m 700 pg_arch ←アーカイブファイル用 -bash-4.2$ ls -l total 0 drwx------. 2 postgres postgres 6 Aug 4 13:09 pg_arch
データベースクラスタ作成
前の手順で作成したデータベースクラスタ用ディレクトリ内にデータベースクラスタを作成します。 initdbコマンドを使用しますが、必ず管理者ユーザであるpostgresユーザで実行してください。 エンコーディングは UTF8、ロケールは設定しません。 PostgreSQLでロケールを選択した場合、検索性能に問題が出るらしく、 ロケールを選択しないことが推奨とされています。(10でも該当するかは未確認です)
-bash-4.2$ initdb --encoding=UTF8 --no-locale --pgdata=/data/pgdata1 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "C". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /data/pgdata1 ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: pg_ctl -D /data/pgdata1 -l logfile start -bash-4.2$
PostgreSQLの設定ファイル変更
ここではPostgreSQLインスタンスがリッスンするIPアドレスと ログ出力、WALファイルのアーカイブに関する設定を行います。
初期設定ではPostgreSQLが localhost(127.0.0.1)のみでリッスンする設定になっています。 そのため、他のサーバからTCP/IP接続することができません。 ローカルからもリモートからもTCP/IP接続できるように、 このサーバが持つ全てのIPアドレスでリッスンする設定とします(全てと言ってもEC2のデフォルトではNICはeth0の1つしかありませんが)。
ログの出力先は /data/pgdata1/log/ ディレクトリとします。 ログファイル名は postgresql-20180804.log のように ログファイルが作成された年月日を付与します。 ログファイルは7日間経過後に自動でローテーションされ、 新しいログファイルに出力が切り替わるようにします。 ログが一定のファイルサイズに達した際にローテーションされる機能は使用しません。 あくまで日数経過後にローテーションします。 ログのタイムゾーンが日本になっていない場合は、日本(Japan)に変更します。 ログメッセージの形式は以下のようになります。
【ログメッセージの出力例】
2018-08-04 22:41:50.448 JST [9000] LOG: database system was shut down at 2018-08-04 22:09:35 JST
2018-08-04 22:41:50.452 JST [8997] LOG: database system is ready to accept connections
WALファイルは初期設定ではアーカイブする設定になっていないため、 ログファイルが循環すると古いファイルから削除されてしまいます。 PITRではベースバックアップからの一連の更新ログが必要となるため、 WALファイルをアーカイブする設定に変更します。 また、データベースクラスタのベースバックアップ(pg_basebackup)を取得する際に レプリケーションプロトコルが利用される仕様となっているため、 一部レプリケーションに関する設定も必要となります。
データベースクラスタ内の postgresql.conf ファイルを編集します。
-bash-4.2$ cd /data/pgdata1/ -bash-4.2$ vi postgresql.conf
※以下、該当箇所を変更※ #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ #listen_addresses = 'localhost' # what IP address(es) to listen on; ↓変更 listen_addresses = '*' # what IP address(es) to listen on;
#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------
#wal_level = replica # minimal, replica, or logical
↓変更
wal_level = replica # minimal, replica, or logical
#archive_mode = off # enables archiving; off, on, or always
↓変更
archive_mode = on # enables archiving; off, on, or always
#archive_command = '' # command to use to archive a logfile segment
↓変更
archive_command = 'cp %p /bkup/pgdata1/pg_arch/%f' # command to use to archive a logfile segment
#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------
#max_wal_senders = 10 # max number of walsender processes
↓変更
max_wal_senders = 2 # max number of walsender processes
※変更なし※
#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------
log_destination = 'stderr' # Valid values are combinations of
logging_collector = on # Enable capturing of stderr and csvlog
log_directory = 'log' # directory where log files are written,
log_filename = 'postgresql-%a.log' # log file name pattern,
↓変更
log_filename = 'postgresql-%Y%m%d.log' # log file name pattern,
log_truncate_on_rotation = on # If on, an existing log file with the
↓変更
log_truncate_on_rotation = off # If on, an existing log file with the
log_rotation_age = 1d # Automatic rotation of logfiles will
↓変更
log_rotation_age = 7d # Automatic rotation of logfiles will
※変更なし※
log_rotation_size = 0 # Automatic rotation of logfiles will
log_line_prefix = '%m [%p] ' # special values:
log_timezone = 'UTC'
↓変更
log_timezone = 'Japan'
クライアント認証の設定
クライアントからPostgreSQLに接続する際の認証設定を行います。 デフォルトで設定されている内容は全てコメントアウトし、必要な設定をファイルの末尾に追加します。 設定する認証ルールは以下の通りとします。
- postgresユーザ(管理者ユーザ)がUNIXドメインソケット接続(ローカル接続)を行った場合は、 パスワードの入力を求めない。
- postgresユーザ(管理者ユーザ)がUNIXドメインソケット接続(ローカル接続)でレプリケーションが要求された場合、 パスワードの入力を求めない(replicationという名のデータベースは存在せず、特殊な操作を表す予約語)。
- postgresユーザ(管理者ユーザ)以外のユーザ(一般ユーザ)がUNIXドメインソケット接続(ローカル接続)を行った場合は、 PostgreSQLユーザ名とパスワードで認証する。パスワードはMD5で暗号化して送信する。
- ユーザに関係なくTCP/IP接続(リモート接続)を行った場合は、PostgreSQLユーザ名とパスワードで認証する。 システム開発者がpgAdmin4などを利用してインターネット経由で接続してくることを想定し、接続元IPアドレスが不定であることから、 任意のIPアドレス(0.0.0.0/0)からの接続を許可する。※LAN環境でのみ利用する場合はIPアドレスを限定してください。 パスワードはMD5で暗号化して送信する。
PostgreSQLでデータベースクラスタのオンラインバックアップ(pg_basebackup)を実行する場合、 レプリケーションプロトコルを利用してバックアップが作成される仕様となっています。 そのため、上記2つ目のルールを記述しておく必要があることに注意してください。
-bash-4.2$ vi pg_hba.conf
※以下、該当箇所を変更※ # TYPE DATABASE USER ADDRESS METHOD # "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 trust # 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 ↓変更 # TYPE DATABASE USER ADDRESS METHOD # "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 trust ※コメントアウト # 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 all postgres peer local replication postgres peer local all all md5 host all all 0.0.0.0/0 md5
Systemdの設定
Systemdを利用してPostgreSQLの起動を管理する設定を行います。 PostgreSQL用のサービスユニットファイルをコピーして編集します。 変更するのは PGDATA の環境変数のみで構いません。
-bash-4.2$ exit logout # cp -piv /lib/systemd/system/postgresql-10.service /etc/systemd/system/postgresql-10.service ‘/lib/systemd/system/postgresql-10.service’ -> ‘/etc/systemd/system/postgresql-10.service’ # cd /etc/systemd/system/ # ls -l total 8 drwxr-xr-x. 2 root root 57 Mar 23 17:45 basic.target.wants lrwxrwxrwx. 1 root root 46 Mar 23 17:43 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service lrwxrwxrwx. 1 root root 57 Mar 23 17:43 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service lrwxrwxrwx. 1 root root 37 Mar 23 17:51 default.target -> /lib/systemd/system/multi-user.target drwxr-xr-x. 2 root root 87 Mar 23 17:42 default.target.wants drwxr-xr-x. 2 root root 38 Mar 23 17:45 dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants drwxr-xr-x. 2 root root 32 Mar 23 17:42 getty.target.wants drwxr-xr-x. 2 root root 35 Mar 23 17:42 local-fs.target.wants drwxr-xr-x. 2 root root 4096 Mar 23 17:51 multi-user.target.wants drwxr-xr-x. 2 root root 48 Mar 23 17:43 network-online.target.wants -rw-r--r--. 1 root root 1728 May 14 13:44 postgresql-10.service drwxr-xr-x. 2 root root 134 Mar 23 17:42 sysinit.target.wants drwxr-xr-x. 2 root root 44 Mar 23 17:42 system-update.target.wants # vi postgresql-10.service
※以下、該当箇所のみ変更※ # Location of database directory Environment=PGDATA=/var/lib/pgsql/10/data/ ↓変更 # Location of database directory Environment=PGDATA=/data/pgdata1/
SystemdでPostgreSQLを自動起動に設定
SystemdでPostgreSQLのサービスユニットが認識されていることを確認します。 初期状態ではPostgreSQLは停止状態で、自動起動も無効になっています。 上記の手順でPostgreSQLをインストールした場合、 サービスユニット名は postgresql-10.service となっています。 OS起動時にSystemdがPostgreSQLを自動起動するように設定します。
# systemctl status postgresql-10.service ● postgresql-10.service - PostgreSQL 10 database server Loaded: loaded (/etc/systemd/system/postgresql-10.service; disabled; vendor preset: disabled) ←自動起動無効 Active: inactive (dead) ←停止状態 Docs: https://www.postgresql.org/docs/10/static/ # systemctl enable postgresql-10.service Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-10.service to /etc/systemd/system/postgresql-10.service. # systemctl status postgresql-10.service ● postgresql-10.service - PostgreSQL 10 database server Loaded: loaded (/etc/systemd/system/postgresql-10.service; enabled; vendor preset: disabled) ←自動起動有効 Active: inactive (dead) ←停止状態 Docs: https://www.postgresql.org/docs/10/static/
SystemdでPostgreSQLの起動
SystemdでPostgreSQLを起動します。
# systemctl start postgresql-10.service # systemctl status postgresql-10.service ● postgresql-10.service - PostgreSQL 10 database server Loaded: loaded (/etc/systemd/system/postgresql-10.service; enabled; vendor preset: disabled) ←自動起動有効 Active: active (running) since Sat 2018-08-04 13:41:50 UTC; 2s ago ←起動状態 Docs: https://www.postgresql.org/docs/10/static/ Process: 8992 ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 8997 (postmaster) CGroup: /system.slice/postgresql-10.service tq8997 /usr/pgsql-10/bin/postmaster -D /data/pgdata1/ tq8999 postgres: logger process tq9001 postgres: checkpointer process tq9002 postgres: writer process tq9003 postgres: wal writer process tq9004 postgres: autovacuum launcher process tq9005 postgres: archiver process tq9006 postgres: stats collector process mq9007 postgres: bgworker: logical replication launcher Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal systemd[1]: Starting PostgreSQL 10 database server... Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.431 JST [8997]...2 Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.431 JST [8997]...2 Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.433 JST [8997]..." Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.435 JST [8997]..." Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.444 JST [8997]...s Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.444 JST [8997].... Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal systemd[1]: Started PostgreSQL 10 database server. Hint: Some lines were ellipsized, use -l to show in full.
スーパーユーザのパスワード設定
データベースクラスタ作成時点では、スーパーユーザ(データベースユーザ) postgres のパスワードが設定されていません。 以下では postgres ユーザのパスワードを「password」に設定しますが、実際にはもっと推測されづらいものを採用してください。
# su - postgres Last login: Sat Aug 4 13:07:16 UTC 2018 on pts/0 -bash-4.2$ psql -c "alter role postgres with password 'password';" ALTER ROLE -bash-4.2$ exit logout
動作確認
プロセス起動確認
PostgreSQLのプロセスが起動していることを確認します。 今回の設定ではマスタサーバプロセス1つとワーカプロセス8つが起動します。 logical replication launcherプロセスはバージョン9.6の時は起動していませんでした。 バージョン10からロジカルレプリケーションがサポートされたので、そのためのプロセスと思われます。
# ps -ef | grep postgres | grep -v grep ↓マスタサーバプロセス(1つ) postgres 8997 1 0 13:41 ? 00:00:00 /usr/pgsql-10/bin/postmaster -D /data/pgdata1/ ↓ワーカプロセス(8つ) postgres 8999 8997 0 13:41 ? 00:00:00 postgres: logger process postgres 9001 8997 0 13:41 ? 00:00:00 postgres: checkpointer process postgres 9002 8997 0 13:41 ? 00:00:00 postgres: writer process postgres 9003 8997 0 13:41 ? 00:00:00 postgres: wal writer process postgres 9004 8997 0 13:41 ? 00:00:00 postgres: autovacuum launcher process postgres 9005 8997 0 13:41 ? 00:00:00 postgres: archiver process postgres 9006 8997 0 13:41 ? 00:00:00 postgres: stats collector process postgres 9007 8997 0 13:41 ? 00:00:00 postgres: bgworker: logical replication launcher
ログ出力確認
設定したログファイルにログが出力されていることを確認します。 ログディレクトリ名はバージョン9.6までは pg_log だったのに、バージョン10から log に変わったようです。 ログメッセージの先頭に出力されている日付もJSTなので日本時間になっていることが分かります。
# cd /data/pgdata1/log/ # ls -l total 4 -rw-------. 1 postgres postgres 186 Aug 4 13:41 postgresql-20180804.log # cat postgresql-20180804.log 2018-08-04 22:41:50.448 JST [9000] LOG: database system was shut down at 2018-08-04 22:09:35 JST 2018-08-04 22:41:50.452 JST [8997] LOG: database system is ready to accept connections
SQL実行確認
psqlコマンドで、SQLを実行できることを確認します。
# su - postgres Last login: Sat Aug 4 13:49:30 UTC 2018 on pts/0 -bash-4.2$ psql psql (10.4) Type "help" for help. postgres=# select now(); now ------------------------------- 2018-08-04 13:59:34.515219+00 (1 row) postgres=# select oid, datname from pg_database; oid | datname -------+----------- 13806 | postgres 1 | template1 13805 | template0 (3 rows) postgres=# \q -bash-4.2$ exit logout
SystemdでPostgreSQLの停止
PostgreSQLインスタンスを停止します。
# systemctl stop postgresql-10.service # systemctl status postgresql-10.service ● postgresql-10.service - PostgreSQL 10 database server Loaded: loaded (/etc/systemd/system/postgresql-10.service; enabled; vendor preset: disabled) ←自動起動有効 Active: inactive (dead) since Sat 2018-08-04 14:01:01 UTC; 2min 6s ago ←停止状態 Docs: https://www.postgresql.org/docs/10/static/ Process: 8997 ExecStart=/usr/pgsql-10/bin/postmaster -D ${PGDATA} (code=exited, status=0/SUCCESS) Process: 8992 ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 8997 (code=exited, status=0/SUCCESS) Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal systemd[1]: Starting PostgreSQL 10 database server... Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.431 JST [8997]...2 Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.431 JST [8997]...2 Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.433 JST [8997]..." Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.435 JST [8997]..." Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.444 JST [8997]...s Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal postmaster[8997]: 2018-08-04 22:41:50.444 JST [8997].... Aug 04 13:41:50 ip-172-31-18-21.ap-northeast-1.compute.internal systemd[1]: Started PostgreSQL 10 database server. Aug 04 14:01:01 ip-172-31-18-21.ap-northeast-1.compute.internal systemd[1]: Stopping PostgreSQL 10 database server... Aug 04 14:01:01 ip-172-31-18-21.ap-northeast-1.compute.internal systemd[1]: Stopped PostgreSQL 10 database server. Hint: Some lines were ellipsized, use -l to show in full. # ps -ef | grep postgres | grep -v grep ←プロセスが停止しているので表示されない
アーカイブファイル確認
PostgreSQLのインストール直後はアーカイブファイルは存在しませんが、 上記動作確認を行っている中でWALファイルが循環し、アーカイブされるため、 最後にアーカイブファイルが作成されていることを確認します。
# cd /bkup/pgdata1/pg_arch/ # ls -l total 16384 -rw-------. 1 postgres postgres 16777216 Aug 4 14:01 000000010000000000000001