FULL VACUUMとpg_repackのロック時間比較(参考)
Full VACUUMしなきゃいけないことになっったので調査ついでに「VACUUM FULL」コマンドと「pg_repack」コマンドでロック時間がどれくらい違うかやってたみた。
pg_repack
感覚的な検証内容です
続きを読むkeepalivedとmysqlで冗長構成組んだ2
前回の続き
構成
こんな感じ

keepalivedの設定
マスター1のkeepalivedの設定
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
enable_script_security
}
vrrp_script mysqlchk {
script "/etc/keepalived/mysqlchk.sh"
interval 2
weight 2
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.168.20.11 #VIP
}
unicast_src_ip 192.168.1.1
unicast_peer {
192.168.1.2
}
track_script {
mysqlchk
}
notify_master /etc/keepalived/master.sh
notify_backup /etc/keepalived/backup.sh
notify_stop /etc/keepalived/backup.sh
notify_fault /etc/keepalived/backup.sh
}
マスター2のkeepalivedの設定
/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
enable_script_security
}
vrrp_script mysqlchk {
script "/etc/keepalived/mysqlchk.sh"
interval 2
weight 2
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.168.20.11 #VIP
}
unicast_src_ip 192.168.1.2
unicast_peer {
192.168.1.1
}
track_script {
mysqlchk
}
notify_master /etc/keepalived/master.sh
notify_backup /etc/keepalived/backup.sh
notify_stop /etc/keepalived/backup.sh
notify_fault /etc/keepalived/backup.sh
}
設定ファイルの細かい仕様はこのへんがわかりやすい
CentOS 7 と keepalived でクラスタ環境を構築する
スクリプト
mysqlチェックスクリプト
/etc/keepalived/mysqlchk.sh
#!/bin/bash TIMEOUT=60 SOCK=/var/lib/mysql/mysql.sock sudo mysql -S $SOCK --connect-timeout=$TIMEOUT -e "show variables like 'server_id';"
master変更時のスクリプト
/etc/keepalived/master.sh
#!/bin/bash
SOCK=/var/lib/mysql/mysql.sock
while true ; do
sudo mysql -S $SOCK -e "show slave status\G;"|egrep "Seconds_Behind_Master: 0|Seconds_Behind_Master: NULL"
if [ "$?" = "0" ] ; then
break
else
echo Waiting until sql thread finish.
fi
sleep 1
done
sudo mysql -S $SOCK -e "set @@global.read_only=0;"
backup変更時のスクリプト
/etc/keepalived/backup.sh
#!/bin/bash TIMEOUT=2 SOCK=/var/lib/mysql/mysql.sock sudo mysql -S $SOCK --connect-timeout=$TIMEOUT -e "set @@global.read_only=1;"
backup時には「global.read_only=1」を設定してreadonlyとしています。
master時には「global.read_only=0」を設定してます。
こうすることで間違ってもbackup設定側に書き込まれないようにします。
各スクリプトに対して実行権限を付けてください
chmod +x /etc/keepalived/*.sh
keepalivedのユーザ作成
上で作ったスクリプトをkeepalivedが実行するにはkeepalivedのユーザを作れって怒られます。
useradd keepalived_script
さらにこのユーザーがsudo実行できないと上で作ったスクリプトで結果がとれません
visudoでいかを追記
keepalived_script ALL=(ALL) NOPASSWD:ALL
確認
マスター側keepalivedにVIPがついてること
マスター側keepalivedをstopしたときにbackup側keepalivedが昇格してVIPがつくこと
マスター側のmysqlを止めてkeepalivedがbackup側に切り替わること
マスター変更時、バックアップ変更時にスクリプトがうごくこと
Postgresql12とrepmgerで自動フェイルオーバー構成を組んだ
Postgresql12とrepmgerでレプリケーション構成を組んだ
- 前提
- 構築
- プライマリーサーバの設定
- repmgrのインストール
- repmgrのコンフィグ設定
- pg_hda.confの変更
- repmgrへのプライマリーノード登録
- repmgrでのレプリケーション設定
前提
構築予定図

OS: CentOS 8
DB: Postgresql 12
tool: repmager
2台構成でマスタースレーブのみ。
| name | IPアドレス | role | apps |
|---|---|---|---|
| PG-Node1 | 192.168.26.126 | Primary | PostgreSQL 12 and repmgr |
| PG-Node2 | 192.168.26.127 | Standby | PostgreSQL 12 and repmgr |