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