本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
NTP設定
何しろDebianインストールしたら一番最初に行ってます。時刻がずれると、ログとか見るのも苦労するし。
編集するファイル
/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).
Postgres15は入らない
Debian11をインストールし標準のapt.source管理できるPostgresは13になります。
そこで、リポジトリを追加し、Postgres15をapt管理でインストールできるようにします。サポート期間を少しでも長くしたいからです。結構、サーバ変更には労力を使いますので。
リポジトリ追加手順
apt-get install wget curl gnupg2 -y
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
これでリポジトリの準備完了です。postgres15をインストールします。
apt-get install postgresql-15
postgres15の設定ファイルの場所はここ
root@testdb:/etc/postgresql/15/main# ls
conf.d environment pg_ctl.conf pg_hba.conf pg_ident.conf postgresql.conf start.conf
今回は、設定面倒なので、今動いているPostgresからコンフィグ取ってきて入替
postgresql.confはこんな感じ
max_connections = 400
shared_buffers = 8GB
effective_cache_size = 8GB
maintenance_work_mem = 2GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
work_mem = 10485kB
min_wal_size = 2GB
max_wal_size = 4GB
初期パスワード変更のため、pg_hba.confiに一度以下を追記
host all all 192.168.0.0/24 trust
postgres15をリスタート
# /etc/init.d/postgresql restart
Restarting postgresql (via systemctl): postgresql.service.
すると、PgAdmin4からアクセス可能になります
パスワードを設定したい場合
Linuxユーザにもpostgresユーザは作成されているのでパスワードをつける
# passwd postgres
新しい パスワード:
新しい パスワードを再入力してください:
passwd: パスワードは正しく更新されました
postgresユーザで入りなおす
# su - postgres
postgres@test-postgres:~$
PostgreSQL内のpostgresユーザのパスワード変更する
postgres@test-postgres:~$ psql
psql (13.9 (Debian 13.9-0+deb11u1))
"help"でヘルプを表示します。
postgres=# alter role postgres with password 'passwd';
ALTER ROLE
これで、pg_hba.confをtrust → md5に変更すると、LAN内からのアクセスにパスワードが聞かれるようになる。
host all all 192.168.0.0/24 md5
postgresql再起動
# /etc/init.d/postgresql restart
Restarting postgresql (via systemctl): postgresql.service.
LAN内クライアントのpgAdmin4からアクセスしてみるとパスワードを聞かれるようになる。
PostgresDBリストアのコツ
まずはユーザからリストアする
PgAdminでやるとなぜか失敗する(やり方がわかってない?)ので、コマンドでやる
#su postgres
$ /usr/lib/postgresql/15/bin/psql -p 5432 template1 < 2023-01-13.group
その後他のdbをpgadminでリストアしていく
新しいHDDを買ってきて増設します
接続したら、dmesgで確認
debianがインストールしてあるのはsda の480GB。これはマイクロンの高信頼性SSDです。
新しく購入したのは東芝のエンタープライズ向けHDD 4TBで、sdbで認識しているのが分かります。
[ 1.828100] sd 0:0:0:0: [sda] 937703088 512-byte logical blocks: (480 GB/447 GiB)
[ 1.828105] sd 0:0:0:0: [sda] 4096-byte physical blocks
[ 1.828124] sd 0:0:0:0: [sda] Write Protect is off
[ 1.828127] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.828157] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1.828379] sd 1:0:0:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)
[ 1.828384] sd 1:0:0:0: [sdb] 4096-byte physical blocks
[ 1.828398] sd 1:0:0:0: [sdb] Write Protect is off
[ 1.828402] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 1.828424] sd 1:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
本当に買ってきたばかりだったらパーティショニングする必要があります。こちらをご参考に。
実は、他のサーバで利用してパーティショニングもフォーマットも終わっており、マウントしたいパーティションはsdb1で認識している事を確認
[ 1.884023] sdb: sdb1
マウントポイントの作成
# mkdir /mnt/backup
マウントする
mount -t ext4 /dev/sdb1 /mnt/backup/
マウントできたかを確認
# df -lh
ファイルシス サイズ 使用 残り 使用% マウント位置
udev 12G 0 12G 0% /dev
tmpfs 2.4G 620K 2.4G 1% /run
/dev/sda2 438G 1.8G 414G 1% /
tmpfs 12G 1.1M 12G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda1 511M 5.8M 506M 2% /boot/efi
tmpfs 2.4G 0 2.4G 0% /run/user/0
tmpfs 2.4G 0 2.4G 0% /run/user/1000
/dev/sdb1 3.6T 2.4T 1.1T 71% /mnt/backup
起動時マウントできるよに調整 fstabにマウント情報を書き込む
vi /etc/fstab
/dev/sdb1 /mnt/backup ext4 errors=remount-ro 0 0
umount,mountコマンドでsdb1がマウントされている事を確認
# umount /mnt/backup/
root@testdb:/etc/postgresql/15/main# df -lh
ファイルシス サイズ 使用 残り 使用% マウント位置
udev 12G 0 12G 0% /dev
tmpfs 2.4G 620K 2.4G 1% /run
/dev/sda2 438G 1.8G 414G 1% /
tmpfs 12G 1.1M 12G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda1 511M 5.8M 506M 2% /boot/efi
tmpfs 2.4G 0 2.4G 0% /run/user/0
tmpfs 2.4G 0 2.4G 0% /run/user/1000
root@testdb:/etc/postgresql/15/main# mount /mnt/backup/
root@testdb:/etc/postgresql/15/main# ls /mnt/backup/
db/ etc/ log/ lost+found/
root@testdb:/etc/postgresql/15/main# df -lh
ファイルシス サイズ 使用 残り 使用% マウント位置
udev 12G 0 12G 0% /dev
tmpfs 2.4G 620K 2.4G 1% /run
/dev/sda2 438G 1.8G 414G 1% /
tmpfs 12G 1.1M 12G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda1 511M 5.8M 506M 2% /boot/efi
tmpfs 2.4G 0 2.4G 0% /run/user/0
tmpfs 2.4G 0 2.4G 0% /run/user/1000
/dev/sdb1 3.6T 2.4T 1.1T 71% /mnt/backup
nfsでリモートにあるサーバのディスクをマウント
ホストサーバにnfs-kernel-serverをインストール
apt-get install nfs-kernel-server
クライアントマシンにnfsインストール
apt-get install nfs-common
データベースバックアップ用のマウントポイント作成
root@testdb:/home/postgres/mnt# mkdir pg_backup
root@testdb:/home/postgres/mnt# mkdir pg_log
root@testdb:/home/postgres/mnt# mkdir pg_exports
/etc/fstab へ nfsマウントポイントの登録
# 本番DBのバックアップフォルダをnfsでローカルのマウントポイントにマウント
192.168.0.11:/var/local/pgsql/backup /home/postgres/mnt/pg_backup nfs ro,rsize=8182
192.168.0.11:/var/local/pgsql/log /home/postgres/mnt/pg_log nfs ro,rsize=8182
192.168.0.11:/var/local/pgsql/reports /home/postgres/mnt/pg_reports nfs ro,rsize=8182
192.168.0.11サーバ(ホスト本番データベースサーバに設定)がnfsでマウントが出来るように許可
vi /etc/exports
/var/local/pgsql/backup 192.168.0.57/32(rw,sync,no_root_squash,wdelay,no_subtree_check)
/var/local/pgsql/log 192.168.0.57/32(rw,sync,no_root_squash,wdelay,no_subtree_check)
/var/local/pgsql/reports 192.168.0.57/32(rw,sync,no_root_squash,wdelay,no_subtree_check)
sudo exportfs -a
マウントしてみる
# mount /home/postgres/mnt/pg_backup/
# mount /home/postgres/mnt/pg_log/
# mount /home/postgres/mnt/pg_reports/
本番サーバのデータが、/home/postgres/mnt の中で確認できればOK
mntの中のファイルを削除しようとしても削除できない事を確認(nfsでリモートのファイルを削除してしまわないようにしている)
rsyncでバックアップする
nfsでマウントしたリモートのバックアップフォルダを、ローカルにマウントしたディスクへバックアップする
rsyncのインストール
# apt-get install rsync
バックアップスクリプトの作成
# cat /usr/local/sbin/transfer.sh
#!/bin/sh
rsync -au /home/postgres/mnt/pg_backup/ /mnt/backup/db/
rsync -au /home/postgres/mnt/pg_log/ /mnt/backup/log/
rsync -avz -C --delete /etc/ /mnt/backup/etc/
#古いバックアップデータを削除
TMDAY1=`date -d '900 days ago' +%Y-%m-%d`
rm /mnt/backup/db/$TMDAY1*
rm /mnt/backup/log/postgresql-$TMDAY1*
chown -R postgres:sambashare /mnt/backup
chmod -R 774 /mnt/backup
新しいバックアップファイルがコピーされている事を確認
昨日のバックアップファイルがちゃんとできている。
cat postgresql-2023-04-30
ファイルの中身もOK
rsyncで /mnt/backup にコピーしたdbのバックアップファイルをPgAdminでリストアしてみて、スキーマが全部戻っている事を確認。また、1つのテーブルでユーザ権限がちゃんと戻っている事を確認
sambaのインストール
# apt-get install samba
ユーザ作成スクリプト
cat smbuser_add.sh
#!/bin/sh
awk 'BEGIN {FS=":"} {printf("%s %s %s\n",$1,$2,$3)}'|while read acc pas gr
do
useradd -g ${gr} ${acc}
printf "${pas}\n${pas}\n"|passwd ${acc}
printf "${pas}\n${pas}\n"|smbpasswd -sa ${acc}
done
予め、addruser でlinuxのユーザは作成しておいて、それと同じユーザ名でsambaのユーザアカウントを作成する
smbuser ファイルにユーザ一覧を作成
ユーザ名:パスワード:グループ
# cat smbuser | ./smbuser_add.sh
./smbuser_add.sh: 4: useradd: not found
新しい パスワード:新しい パスワードを再入力してください:passwd: パスワードは正しく更新されました
./smbuser_add.sh: 4: useradd: not found
新しい パスワード:新しい パスワードを再入力してください:passwd: パスワードは正しく更新されました
./smbuser_add.sh: 4: useradd: not found
新しい パスワード:新しい パスワードを再入力してください:passwd: パスワードは正しく更新されました
グループにはsambashareを割りて
vi /etc/group
にて、sambashare:ユーザ名1,ユーザ名2
という形でグループにわりあてる。後は、smbでアクセスさせたいディレクトに
chgrp -R sambashare *
でグループ権限割り当て
samb.conf
[global]
dos charset = CP932
server string = %h server
obey pam restrictions = Yes
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully*
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
wins server = 192.168.0.11
wins support = Yes
panic action = /usr/share/samba/panic-action %d
idmap config * : range =
idmap config * : backend = tdb
acl group control = Yes
create mask = 0770
#security mask = 0770
directory mask = 0770
#directory security mask = 0770
store dos attributes = no
dfree cache time = 60
hide unreadable = yes
[DB]
path = /mnt/backup/db
valid users = user
comment = DatabaseData BackupFolder
read list = user
read only = Yes
\\192.168.0.? という形式でWindowsクライアントからアクセスし、すぐに応答がある事を確認。
再起動後プロセスが実行されているか
sdb がマウントされている
sambaが有効になっていてWindowsからすぐアクセス可能
dbが起動しており、PgAdminからアクセス可能
nfsでのマウントが失敗してる
再起動後自動的にnfsマウントされない事が判明
Apr 30 11:04:09 testdb mount[468]: mount.nfs: Network is unreachable
Apr 30 11:04:09 testdb mount[465]: mount.nfs: Network is unreachable
Apr 30 11:04:09 testdb mount[467]: mount.nfs: Network is unreachable
起動時になぜか、Network is unreachableで接続できていない
起動後安定してから mountコマンドで手動でマウントするとマウントできる。
bgコマンドを付与
マウントが失敗したときの再試行の方法を選択するオプションです。-bg オプションの場合はバックグラウンドでマウントが試みられます。
ro,bg,retry=10,rsize=8182
とオプションを加えたけど解決せず
テスト環境なのでDHCPで構成していたのがいけなかったのだと思います。固定IPを振ったらすんなりマウントできました。タイミングの問題ですね。nicがDHCPでIP取得してそのまま通信できるようになるより先に、nfsの起動時マウントが走ってしまうみたい。
固定IPにするとこの問題おきませんでした。
Apr 30 11:50:36 testdb systemd[1]: Mounting /home/postgres/mnt/pg_backup...
Apr 30 11:50:36 testdb systemd[1]: Mounting /home/postgres/mnt/pg_log...
Apr 30 11:50:36 testdb systemd[1]: Mounting /home/postgres/mnt/pg_reports...
DHCPでもマウントできるといいかなとも思いますが、時間かけるのもあれなんで、とりあえず固定IP運用する予定でしたのでそのままにしました。