2&>1

AWSとかGCPとかGolangとかとか

keepalivedとmysqlで冗長構成組んだ2

前回の続き

dev-error.hatenablog.com

構成

こんな感じ

f:id:piyojir0:20200519201533j:plain

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

確認

  1. マスター側keepalivedにVIPがついてること

  2. マスター側keepalivedをstopしたときにbackup側keepalivedが昇格してVIPがつくこと

  3. マスター側のmysqlを止めてkeepalivedがbackup側に切り替わること

  4. マスター変更時、バックアップ変更時にスクリプトがうごくこと

Postgresql12とrepmgerで自動フェイルオーバー構成を組んだ

前回の内容でPostgresql2台でrepmgerを使ってレプリケーションを組んだので今度自動でフェイルオーバーするまでを設定します。

前回の内容↓

dev-error.hatenablog.com

続きを読む

Postgresql12とrepmgerでレプリケーション構成を組んだ

  • 前提
  • 構築
    • プライマリーサーバの設定
    • repmgrのインストール
    • repmgrのコンフィグ設定
    • pg_hda.confの変更
    • repmgrへのプライマリーノード登録
    • repmgrでのレプリケーション設定

前提

構築予定図

f:id:piyojir0:20200402174131j:plain

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でペーストしたときに改行がすごいことになる対策

viでペーストすると改行?タブ?がずらあああああああああああってなることあるんですけど。

以下対策 入力モードじゃないときに以下

:set paste

これでだあああああああってならない。

これから社用AWSアカウントを作る人がちょっと気をつけること

対象:これから初めてAWSコンソールを触るような人向けです。

  • アカウントの分け方
    • アカウントまとめ
  • セキュリティの設定
    • I AM
    • CloudTrail
    • AWS Config
    • GuardDuty
    • AWS Shild
    • VPC
    • セキュリティまとめ
  • ネットワークサブネットの決め方
    • ネットワークサブネットまとめ
  • バックアップ設定
    • バックアップまとめ
  • まとめ

アカウントの分け方

アカウントを作るときはメールアドレスとクレジットカード登録が必要になります。

個人で作る場合はそのまま自分のもので良いですが社用となるとそうも行きません。

作成する環境には「本番」と「検証」の最低2つはあるかと思います。

これが同じアカウント内にあるとリソース増えるごとに煩雑になり事故に繋がります。(リソース名だけでは人はミスをするのです)

なのでこれはアカウント自体を分けて置くと今触っている環境がわかりやすく事故防止に繋がります。

このまま2つのアカウントを運用してもできなくはないですが、今後3つ,4つと増えてくるとアカウント管理に疲弊する状態となります。

そのため最初から「AWS Organizations」とゆうサービスを使ってアカウントを作成します。

これは複数の AWS アカウントを統合して管理するサービスになります。

  • 新規アカウント作成

  • アカウントの階層的なグループ化

  • 各アカウントのAPIへのアクセス制御(root含む)

  • 一括請求(各アカウントへの請求額もわかる)

続きを読む