HP ProliantでDebian12 Postgres15で、ストリーミングレプリケーションするまでまとめ

Linux

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

環境

ハードウェア

HP Proliant DL20 Gen10

[    0.000000] DMI: HPE ProLiant DL20 Gen10/ProLiant DL20 Gen10, BIOS U43 09/16/2021
[    0.000000] tsc: Detected 3400.000 MHz processor
[    0.000000] tsc: Detected 3399.906 MHz TSC

[    1.027289] smartpqi 0000:04:00.0: added 0:2:0:0 0000000000000000 RAID              HPE      E208i-a SR Gen10

[    1.057253] sd 0:1:0:0: [sda] 1875319472 512-byte logical blocks: (960 GB/894 GiB)

Debian

# cat /etc/debian_version
12.1

Postgres

# apt-cache show postgresql
Package: postgresql
Source: postgresql-common (248)
Version: 15+248
Installed-Size: 15
Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org>
Architecture: all
Depends: postgresql-15

IPアドレス

マスター 192.168.0.12 ,IPエイリアス 192.168.0.13

ホットスタンバイ 192.168.0.17

UPS

OMRON BN50T

Omron SimpleShutdownSoftware

サーバ管理ツール

iLO5

ハードウェア RAID1

E208i-a smart array card を利用して、RAID1構成にします。

SSDはMicron製のエンタープライズ製品を選定しました

Debianインストール初期設定

初期設定では、NTPを設定したくらいです。ウィンドウマネージャも設定せず、すべてコマンドラインで設定しました。ウィンドウマネージャを利用していると、何かとトラブルが起こったりするので、私は採用してません。クライアントパソコンならまだ入れる意味も出てくると思うのですが、DBサーバ管理に、ウィンドウマネージャ―は必要ないかなぁという感覚です。

NTP設定

編集するファイル

/etc/systemd/timesyncd.conf

[Time]
NTP=ntp.nict.jp

リスタート

systemctl restart systemd-timesyncd

同期できているか確認する

# systemctl -l status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-04-29 15:23:24 JST; 19s ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 4629 (systemd-timesyn)
     Status: "Initial synchronization to time server 61.205.120.130:123 (ntp.nict.jp)."
      Tasks: 2 (limit: 28637)
     Memory: 1004.0K
        CPU: 40ms
     CGroup: /system.slice/systemd-timesyncd.service
             mq4629 /lib/systemd/systemd-timesyncd

 4月 29 15:23:24 testdb systemd[1]: Starting Network Time Synchronization...
 4月 29 15:23:24 testdb systemd[1]: Started Network Time Synchronization.
 4月 29 15:23:24 testdb systemd-timesyncd[4629]: Initial synchronization to time server 61.205.120.130:123 (ntp.nict.jp).

syslog設定

使い慣れたsyslogも入れておきます。

apt-get install rsyslog

UPS設定

UPSで電源供給する事はすぐできますが、停電が起こった時に安全にシャットダウンしたいです。その時に必要なのが、UPS管理ソフトになります。

USB接続しておき、UPSへの電源供給状態によって規定の時間以上停電が起こった時にシャットダウンスクリプトを走らせます。

1台のOMRON UPSとUSB接続する場合

PowerActPro を利用し、Slaveとして動作させる場合

ストリーミングレプリケーション構築

IPエイリアス

常時稼働しているサーバが、ダウンした時にスタンバイサーバをプライマリに昇格させる際に、IPエイリアスを用いて、実アドレスの変更なしで利用できるようにします。

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eno1
#iface eno1 inet dhcp

allow-hotplug eno1
iface eno1 inet static
        address 192.168.0.12/24
        gateway 192.168.0.254
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8
        dns-search techlive.tokyo


post-up ip route add 192.168.20.0/24 via 192.168.0.1 dev eno1

post-up ip addr add 192.168.0.13/24 dev eno1

IPエイリアス反映確認

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 5c:ba:2c:5a:5a:78 brd ff:ff:ff:ff:ff:ff
    altname enp2s0f0
    inet 192.168.0.12/24 brd 192.168.0.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet 192.168.0.13/24 scope global secondary eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::5eba:2cff:fe5a:5a78/64 scope link
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5c:ba:2c:5a:5a:79 brd ff:ff:ff:ff:ff:ff
    altname enp2s0f1

ルート反映確認

# ip route show
default via 192.168.0.254 dev eno1 onlink
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.12
192.168.20.0/24 via 192.168.0.1 dev eno1

サーバ管理 iLO5

fstab chkdskが走らないようにする

長期間サーバを稼働し、メンテナンスで再起動した際に、自動的にchkdskが走って、1時間ほどサーバが起動しなくなるなどという事態が発生する事があるので、起動時に自動的にchkdskが走らないようにする。

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=bsvasd4-faa1-40c3-89c3-6llllsba8d /               ext4    errors=remount-ro 0       0

最後 <pass> を 0とする

※1だと、chkdskが走る

DBのバックアップスクリプト

Databaseを毎日バックアップするスクリプト

毎日このスクリプトを実行するのはCRONに登録する

echo "バックアップ実行"
TDAY=`date +%Y-%m-%d`
/usr/lib/postgresql/15/bin/pg_dumpall -p 5432 -g -U postgres > /var/local/pgsql/backup/$TDAY.group &
/usr/lib/postgresql/15/bin/pg_dump -p 5432 -U postgres  -F c -b -f "/var/local/pgsql/backup/$TDAY.testdb" -l testdb

#実行結果
ls /var/local/pgsql/backup/$TDAY*

#古いバックアップデータを削除
TMDAY1=`date -d '38 days ago' +%Y-%m-%d`
rm  /var/local/pgsql/backup/$TMDAY1*


#古いログファイルを削除
rm  /var/local/pgsql/log/postgresql-$TMDAY1

pg_dumpall オプション

pg_dumpall [connection-option…] [option…]

クラスタの全てのPostgreSQLデータベースを、1つのスクリプトファイルに書き出す(”ダンプする”)ためのユーティリティ

-g グローバルオブジェクト(ロールとテーブル空間)のみをダンプし、データベースのダンプを行いません。

-f 出力を指定したファイルに送ります。 これが省略されると標準出力が使用されます。

pg_dump オプション

Postgres データベースを スクリプトファイルに抽出する

pg_dump [connection-option…] [option…] [dbname]

-F c 出力形式を選択します。pg_restoreへの入力に適したカスタム形式アーカイブを出力します。

-b ラージオブジェクトをダンプに含めます。

-f 出力を指定のファイルに送ります。

ログファイル・バッチファイル置き場

ログやバックアップファイルを置く場所(自分で好きな場所を設定して構わない)

/var/local/pgsql

バッチファイルを置く場所

/usr/local/sbin/pg_bat

mkdir /var/local/pgsql
mkdir /var/local/pgsql/backup
mkdir /var/local/pgsql/log

chown -R postgres:postgres /var/local/pgsql
chmod -R 775 /var/local/pgsql

mkdir /usr/local/sbin/pg_bat
chown -R postgres:postgres /usr/local/sbin/pg_bat
chmod -R 775 /usr/local/sbin/pg_bat

pg_restoreする時

pg_dumpall にてログインロールをバックアップ、pg_dump にて、データベースをバックアップした時の注意

※ユーザ/ログインロール から復元する。でないと、データベースを復元した時に登録されていないユーザのアクセス権は戻らない

ユーザの復元はpsql を利用する。 pg_dumpall はSQLでバックアップファイルが作成される。

Linuxでのコマンドならこんな感じ

#su - postgres
$/usr/lib/postgresql/15/bin/psql -p 5432 template1 < /home/postgres/2023-11-03.group

※Windowsにインストールした Postgresをリストアする時

"C:\Program Files\PostgreSQL\15\bin\psql.exe" -p 5432 -U postgres template1 < C:\Users\hanako\Desktop\2023-11-22.group

データベースを復元する

#su - postgres
$ /usr/lib/postgresql/15/bin/pg_restore -p 5432 -U postgres -d majp /home/postgres/2023-11-03.majp

SSDが故障した時

RAID1でミラーリングしている場合、SSD1本に障害が発生した時の復元手順

プライマリ障害時にスタンバイをプライマリへ

ストリーミングレプリケーションしているサーバを復元する場合

タイトルとURLをコピーしました