本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
環境
ハードウェア
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本に障害が発生した時の復元手順
プライマリ障害時にスタンバイをプライマリへ
ストリーミングレプリケーションしているサーバを復元する場合