記憶永続化用のメモブログ

脳内に揮発性記憶領域しかないことに気づいたので作成

AWSでMySQL MHAを導入したときのメモ

AWSドシロートがやってみたのでメモ (まだ記述途中)

構成

サーバ IP
監視サーバ 10.0.10.1
マスターDB 10.0.10.11
待機用スレーブDB 10.0.10.10
参照用スレーブDB 10.0.1.10

インストール


Mysql Master HAをソースからインストールするレシピ

MHA Masterの設定
vim /etc/mastermha/mysql-mha.cnf
※ Gist参照

VIP用ENIの作成
コンソールからENIを作成して、プライベートアドレスにVIPとして使うIPを付けてる。
作成したらNetwork Interface IDをメモる(VIP付け替えスクリプトで使用する)
とりあえずコンソールから現在稼働中のマスタDBサーバにVIP用のENIをAttachしてあげる
当然、アプリケーションからマスタへの接続はVIPで接続するように修正する

AWS CLI Tool用ユーザの作成
コンソールからIAMにユーザを作って以下の権限を追加してあげる。
※ 既に存在するならそのユーザを使えばいい

{
"Statement": [
{
"Action": [
"ec2:DescribeInstances",
"ec2:DetachNetworkInterface",
"ec2:AttachNetworkInterface",
"ec2:DescribeNetworkInterfaceAttribute"
],
"Effect": "Allow",
"Resource": "*"
}
]
}

AWSAccessKeyIdとAWSSecretKeyをメモして/opt/aws/credentials.txtに記述する。
※/opt/aws/credential-file-path.templateをコピーして作るとよい
/opt/aws/credentials.txtは/etc/profile.d/aws-apitools-common.shの中で$AWS_CREDENTIAL_FILEという変数にexportされてた(最初はコメントアウトされている)
※ 別exportしなくても直接このファイルを読み込んでもいいけどテンプレートがあったので使ってみた

各ノード間にノンパス設定

サーバ 使用するユーザ
監視サーバ root
マスターDB mysql
待機用スレーブDB mysql
参照用スレーブDB mysql

MHA Managerを起動する

nohup /usr/local/bin/masterha_manager --conf=/etc/mastermha/mysql-mha.cnf > /usr/local/masterha/masterha_manager.log &

/usr/local/masterha/masterha_manager.logにエラーが出ていなければok

エラー出たとこ

  • 現マスターとマスター候補の2台構成のとき両方ともread_only=0 ?

[error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln732] Multi-master configuration is detected, but two or more masters are either writable (read-only is not set) or dead! Check configurations for details. Master configurations are as below:

現マスターとマスター候補の2台構成のとき両方ともread_only=0だと怒られるので、マスター候補の方は
SET GLOBAL read_only = 1;
でread_onlyに設定しておく。

read_onlyの確認方法

mysql> SELECT @@read_only;

  • Log/Dispatch.pmがインストールされてない?

Can't locate Log/Dispatch.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/MHA/MasterMonitor.pm line 28.
BEGIN failed--compilation aborted at /usr/local/share/perl5/MHA/MasterMonitor.pm line 28.
Compilation failed in require at /usr/local/bin/masterha_manager line 26.
BEGIN failed--compilation aborted at /usr/local/bin/masterha_manager line 26.

$ sudo cpan
cpan[1]> install CPAN
cpan[2]> install Module::Build
cpan[3]> quit
$ sudo cpan
cpan[1]> install Log::Dispatch
cpan[2]> install Log::Dispatch::FileRotate
cpan[3]> quit
  • テストしてる間に接続エラー出しすぎてマネージャーホストが拒否された!?

ue Mar 11 21:13:56 2014 - [error][/usr/local/share/perl5/MHA/ServerManager.pm, ln255] Got MySQL error when connecting 10.0.1.10(10.0.1.10:3306) :1129:Host '10.0.10.1' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts', but this is not mysql crash. Check MySQL server settings.
at /usr/local/share/perl5/MHA/ServerManager.pm line 251
Tue Mar 11 21:13:56 2014 - [error][/usr/local/share/perl5/MHA/ServerManager.pm, ln263] Got fatal error, stopping operations
Tue Mar 11 21:13:56 2014 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln386] Error happend on checking configurations. at /usr/local/share/perl5/MHA/MasterMonitor.pm line 300
Tue Mar 11 21:13:56 2014 - [error][/usr/local/share/perl5/MHA/MasterMonitor.pm, ln482] Error happened on monitoring servers.
Tue Mar 11 21:13:56 2014 - [info] Got exit code 1 (Not master dead).

ログにある通り各MySQLサーバで

$ mysqladmin  -uroot flush-hosts