1年位まえにやろうとしてLambdaで意外と手間かかるなーと思ってた記憶があるんですが
簡単にできるようになったということなのでやりました。
前回の続き
こんな感じ
/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 }
/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 でクラスタ環境を構築する
/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';"
/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;"
/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のユーザを作れって怒られます。
useradd keepalived_script
さらにこのユーザーがsudo実行できないと上で作ったスクリプトで結果がとれません
visudoでいかを追記
keepalived_script ALL=(ALL) NOPASSWD:ALL
マスター側keepalivedにVIPがついてること
マスター側keepalivedをstopしたときにbackup側keepalivedが昇格してVIPがつくこと
マスター側のmysqlを止めてkeepalivedがbackup側に切り替わること
マスター変更時、バックアップ変更時にスクリプトがうごくこと
構築予定図
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 |
viでペーストすると改行?タブ?がずらあああああああああああってなることあるんですけど。
以下対策 入力モードじゃないときに以下
:set paste
これでだあああああああってならない。
対象:これから初めてAWSコンソールを触るような人向けです。
アカウントを作るときはメールアドレスとクレジットカード登録が必要になります。
個人で作る場合はそのまま自分のもので良いですが社用となるとそうも行きません。
作成する環境には「本番」と「検証」の最低2つはあるかと思います。
これが同じアカウント内にあるとリソース増えるごとに煩雑になり事故に繋がります。(リソース名だけでは人はミスをするのです)
なのでこれはアカウント自体を分けて置くと今触っている環境がわかりやすく事故防止に繋がります。
このまま2つのアカウントを運用してもできなくはないですが、今後3つ,4つと増えてくるとアカウント管理に疲弊する状態となります。
そのため最初から「AWS Organizations」とゆうサービスを使ってアカウントを作成します。
これは複数の AWS アカウントを統合して管理するサービスになります。
新規アカウント作成
アカウントの階層的なグループ化
各アカウントのAPIへのアクセス制御(root含む)
一括請求(各アカウントへの請求額もわかる)