機能・要件
 構成・方式
 タスク
 導入 
    ダウンロード
    インストール
    PGインストール
    DBバックアップ
    ディレクトリ削除
    追加インストール
    PMインストール
    corosync.conf
    CS認証設定
    PM追加設定
    CS_Unitファイル
    PM_Unitファイル
    ログの出力
    ログメッセージ
    ログローテーション
    プロセス起動
    PostgreSQL設定
    repユーザ作成
    一般ユーザ作成
    pg_hba.conf
    .pgpass作成
    pg-rex_tools.conf
    NW接続登録
    ssh接続
    リソースの設定
    crmファイル作成
    pg-rexスタート
    OS設定

 Pg-Rexダウンロード
 ・pg-rexダウンロード先
 ・同梱されている「利用マニュアル」に沿って、構築・運用する。

 Pg-Rexインストール
 ・両系にPG-REX補助ツールをインストール
解凍した Pg-Rexダウンロードファイルをホームデレク取りへ
Net_OpenSSH、IO_Tty、pg-rex_operation_tools_scriptをインストール
$ sudo -s
# yum install Net_OpenSSH-0.62-1.el7.x86_64.rpm
# yum install IO_Tty-1.11-1.el7.x86_64.rpm
# yum install pg-rex_operation_tools_script-11.2-1.el7.noarch.rpm
 ・両系のディレクトリ構成は同一にする。(確認)
 ・必要なら、yumのキャッシュを削除
# yum clean all
# rm -rf /var/cache/yum

 PostgreSQLインストール
 ・両系にPostgreSQLが正常にインストールされている(db01、db02)
PostgreSQLの「公式リポジトリ」を追加   確認 
PostgreSQLのインストール   確認 
 ・確認     # systemctl list-unit-files --type=service     postgresql-11.service disabled
 DBバックアップ(db01、db02)
 ・既存DBを確認
$ sudo -s 
# su - postgres 
$ pwd 
"/var/lib/pgsql/.pgpass" がグループや他のユーザから読める状態なら「600」に変える。
既存DBのユーザ(ロール名)確認
$ pg_ctl -w start
$ psql -c "\du" 
既存DBのOwner(所有者)確認
$ psql -l 
 ・必要な場合、バックアップする。
 ・DBクラスタバックアップ(db01、db02)
$ pg_ctl stop 
$ exit 
# tar cvf /var/lib/pgsql.tar /var/lib/pgsql 
# gzip /var/lib/pgsql.tar 
# ls -l /var/lib/pgsql.tar.gz 
# cp /var/lib/pgsql.tar.gz /home/xxxx 
DBバックアップ(db01、db02)
# su - postgres
$ pg_ctl -w start
 ダンプ 
$ pg_ctl stop
$ exit
所定の場所に保存

 ディレクトリ削除
 ・両系にPostgreSQLが正常にインストールされている。
クラスタ化前のDBのバックアップが終わったら「/var/lib/pgsql/11」を削除
# cd /var/lib/pgsql
# rm -rf 11
「/var/lib/pgsql」にドットファイルは残る。

 追加インストール(db01、db02)
 ・両系に追加インストール(contrib、docs)
# yum install postgresql11-contrib-11.5-1PGDG.rhel7.x86_64
# yum install postgresql11-docs-11.5-1PGDG.rhel7.x86_64
 ・インストール済パッケージ
# rpm -qa | grep postgres
 postgresql11-libs-11.5-1PGDG.rhel7.x86_64
 postgresql11-11.5-1PGDG.rhel7.x86_64
 postgresql11-server-11.5-1PGDG.rhel7.x86_64
 postgresql11-contrib-11.5-1PGDG.rhel7.x86_64
 postgresql11-docs-11.5-1PGDG.rhel7.x86_64

 Pacemakerインストール
 ・両系にPacemaker、Corosyncが正常にインストールされている(db01、db02)
OSに応じた「Pacemakerリポジトリ」を選択、インストール   確認 
自動起動の無効化(未だなら実施)
# systemctl disable corosync
# systemctl disable pacemaker
ハードウェアwatchdogのモジュールを停止
HP社のハードウェアを使用環境は、hpwdtモジュールを停止
# dmesg | grep "hpwdt" (確認)
OS起動時にiTCO_wdtモジュールがロードされている場合も停止
# dmesg | grep "iTCO_wdt" (確認)

 クラスタ(Pacemaker、Corosync)の基本設定(db01、db02)
 ・ corosync.conf サンプル
 ・設計した ネットワーク構成 に基づき設定
 ・corosync.conf 例     # Please read the corosync.conf.5 manual page     totem {     version: 2     rrp_mode:active     interface {     ringnumber: 0     bindnetaddr: 192.168.x1.0     mcastaddr: 239.255.1.1     mcastport: 5405      }     interface {     ringnumber: 1     bindnetaddr: 192.168.x2.0     mcastaddr: 239.255.1.2     mcastport: 5405      }     }     logging {      syslog_facility: local1      debug: off     }     quorum {      provider: corosync_votequorum      expected_votes: 2 }  ・corosync.conf のパーミッション
ls -l /etc/corosync/corosync.conf 
644

 クラスタ(Corosync)認証設定ファイルの生成(authkey)
 ・両系に クラスタ(Corosync)認証設定ファイル を生成する。

 設定ファイル(Pacemaker)の追加設定(db01、db02)
 ・ /etc/sysconfig/pacemaker に追加
PCMK_logfile=none
PCMK_logfacility=local1
PCMK_logpriority=info
PCMK_fail_fast=yes

 Corosync用Unitファイルの修正(db01、db02)
 ・ corosyncプロセスが故障  したときにcorosyncのwatchdogを効かせたい場合(corosync.service)
 ・ softdogを使用する場合 (db01、db02)

 Pacemaker用Unitファイルの修正(db01、db02)
 ・ Pacemaker (pacemaker.service)

 ログの出力設定rsyslog.conf
 ・ログの出力先を/etc/rsyslog.confに設定  確認 

 ログメッセージ制御機能設定(pm_logconv.conf)
 ・基本設定部([Setting]セクション)を編集  確認 

 ログローテーションの追加設定(syslog)
 ・Pacemaker用ログファイル(/var/log/ha-log)のローテーション設定  確認 

 pm_logconvプロセス、ifcheckdプロセスの起動
 ・プロセス起動  確認 

 PostgreSQLの設定
 ・PostgreSQL Global Development Group(db01、db02両方)
 ・PGDGのパッケージはインストール済
 ・インストール済ファイルとディレクトリ
 ・ユーザ(Linux)確認
パスワード設定

 ・環境変数の設定(db01、db02両方)
「/var/lib/pgsql/.bash_profile」の環境変数をpostgresユーザで設定
# su - postgres
$ vi ~/.bash_profile
 (略)
 export PATH=/usr/pgsql-11/bin:$PATH
 export PGDATA=/dbfp/pgdata/data
$ source /var/lib/pgsql/.bash_profile
$ env

 ・DBクラスタ用ディレクトリをrootユーザで作成(db01、db02両方)
/var/lib/pgsql postgresユーザのホームディレクトリ
/dbfp/pgdata/data DBクラスタ用
/dbfp/pgwal/pg_wal WAL用
/dbfp/pgarch/arc1 アーカイブログ用
# mkdir -p /dbfp/pgdata
# mkdir -p /dbfp/pgwal/pg_wal
# mkdir -p /dbfp/pgarch/arc1
# chown -R postgres:postgres /dbfp

 ・DBクラスタの初期化(db01のみ)
# su - postgres
$ initdb -D /dbfp/pgdata/data -X /dbfp/pgwal/pg_wal --encoding=UTF-8 --no-locale --data-checksums

 ・「postgresql.conf」の編集をpostgresユーザで行う(db01のみ)
cd $PGDATA/
cp postgresql.conf postgresql.conf.org
参考
listen_addresses = '*'
推奨値固定、PG-REXでは、接続を待ち受けるアドレスを個別に設定しない。
wal_level = replica
推奨値固定、logicalを指定することも可能
synchronous_commit = on
推奨値固定
archive_mode = always
always必須
archive_command = '/bin/cp %p /dbfp/pgarch/arc1/%f'
PG-REXでは、cpを使用することを推奨する。
max_wal_senders = 10
PG-REXでは、レプリケーション機能を利用するため1以上を指定
wal_keep_segments = 32
推奨値固定
wal_sender_timeout = 20s
Slaveの故障や両系間の通信断をMasterがすぐに検知できるようにする。
synchronous_standby_names = ''
PG-REX RAが自動的に必要な設定を行う。
hot_standby = on
on必須
max_standby_archive_delay = -1
キャンセルを無効
max_standby_streaming_delay = -1
キャンセルを無効
wal_receiver_status_interval = 5s
0より大きく、wal_sender_timeoutより小さい値
hot_standby_feedback = on
on必須
restart_after_crash = off
Pacemakerによる状態管理の整合性が崩れる。
max_replication_slots = 10
pg_basebackupによるバックアップ取得などに備え、余裕を持たせて指定

 レプリケーションユーザ作成
 ・PostgreSQL起動(db01(Master)でのみ行う。)
$ pg_ctl -w start
 ・レプリケーションユーザを作成
$ psql -c "CREATE ROLE repuser REPLICATION LOGIN PASSWORD 'reppasswd'"
 ・レプリケーション権限付与確認
$ psql -c "\du repuser"
 ・PostgreSQL停止
$ pg_ctl stop

 一般ユーザ作成
 ・PostgreSQL起動(db01(Master)でのみ行う。)
$ pg_ctl -w start
 ・一般ユーザを作成
$ psql -c "CREATE ROLE 一般ユーザ CREATEDB"
ログイン属性の追加はALTERで行う。
$ psql -c "\du repuser"
 ・PostgreSQL停止
$ pg_ctl stop

 pg_hba.confへの追加(db01(Master)でのみ行う。)
 ・TYPE DATABASE USER ADDRESS METHOD
 ・Master側Pacemakerを起動しリソースを設定
$ cd $PGDATA
$ cp pg_hba.conf pg_hba.conf.org
$ vi pg_hba.conf
host replication repuser 192.168.xxx.xx1/32 md5
host replication repuser 192.168.xxx.xx2/32 md5

 .pgpass作成
 ・Master側レプリケーション受付用の仮想IPアドレスと、相手ノードのD-LANのIPアドレスを指定
$ vi ~/.pgpass
192.168.xxx.xx2:5432:replication:repuser:reppasswd
192.168.xxx.xx0:5432:replication:repuser:reppasswd
 ・Slave側
$ vi ~/.pgpass
192.168.xxx.xx1:5432:replication:repuser:reppasswd
192.168.xxx.xx0:5432:replication:repuser:reppasswd

 pg-rex_tools.confの設定
 ・D-LAN_IPAddress に両系のD-LAN IPアドレスを指定
 ・Archive_dir にアーカイブディレクトリの絶対パスを指定
# vi /etc/pg-rex_tools.conf
D-LAN_IPAddress = 192.168.xxx.xx1 , 192.168.xxx.xx2
Archive_dir = /dbfp/pgarch/arc1
STONITH = disable
VIP_SLAVE = disable
PEER_NODE_SSH_PASS_MODE = nopass
BACKUP_NODE_SSH_PASS_MODE = nopass
DISKD_ResourceID = clnDiskd1, clnDiskd2
(略)

 ネットワーク接続登録(db01、db02両方)
 ・PG-REX運用補助ツールでは両系の状態確認にネットワークの通信を用いる。
rootユーザの「.ssh/known_hosts」に
相手先のD-LANのIPアドレスに対する接続登録をする。
 ・Masterで実行
# ssh 192.168.xxx.xx2
Are you sure you want to continue connecting (yes/no)? Yes
 ・Slaveで実行
# ssh 192.168.xxx.xx1
Are you sure you want to continue connecting (yes/no)? Yes

 pg-rexのssh接続(db01、db02両方)
 ・手順ではmaster-slave間のsshのroot接続が必要
 ・sshのパスワード実行なしで実行可能にする。確認
PEER_NODE_SSH_PASS_MODE = nopass
BACKUP_NODE_SSH_PASS_MODE = nopass
 ・rootユーザからの認証許可
# vi /etc/ssh/sshd_config
PermitRootLogin yes のコメントアウトを外す。
PasswordAuthentication yes のコメントアウトを外す。
 ・スタート時にパスワードを要求される。
 ・パスワード入力を無くしたい場合
ssh-keygenでrsa鍵を作成する場合、passphrase入力でEnter(パスワードなし)
db01で鍵作成( 確認 
db02へ秘密鍵移動( 確認 
db02で鍵作成( 確認 
db01へ秘密鍵移動( 確認 

 リソースの設定(pm_crmgen環境定義書)
 ・PG-REX用の「PG-REX11_pm_crmgen.xls」を編集  確認 
 ダウンロードに同梱のExcelシートを編集
クラスタ内のリソース構成、動作条件、パラメータ、配置制約など

 crmファイル作成
 ・ExcelのシートをCSVファイルで保存し、db01へ転送
 ・db01上でpm_crmgenコマンドを使用して、csvファイルをcrmファイルに変換
# pm_crmgen -o xxxx.crm xxxx.csv
# ls -l /root/

 pg-rexスタート
 ・スタートシェル動作には lsof が必要(最小構成ではインストールされない。)
# yum info lsof
 ・以前正常終了が出来ずロックが掛かっている場合(PGSQL.lock)
# rm /var/lib/pgsql/tmp/PGSQL.lock

 OSの設定
 ・ファイアウォールの設定
用途 ポート番号 プロトコル
S-LAN 5432 tcp
D-LAN 22 ssh
5432 tcp
IC-LAN 5405 udp
PING監視用 - icmp
STONITH LAN 623 udp
 ・SELinux
無効にしたほうが無難