2014/06/10
cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平(@inokara)です。
Sensu をプロダクション環境で運用しようとすると、その中核となる RabbitMQ はどう見ても SPOF になるんでは?という疑問から HA Proxy や Route 53 を使って HA 構成がとれないか検証してみた。
下記のように Sensu クライアント及び Sensu サーバーが Route 53 に定義されたドメイン名に対してアクセスするような構成を構築して検証する。
尚、今回は ElastiCache for Redis は用いずに Sensu サーバー上に構築した Redis サーバーを利用した。
一応、上記の設定条件を aws cli にて確認。
{
"HealthCheckId": "xxxxxxxx-xxxxxxxxx-xxxxx-xxxxxxx1",
"Name": "sensu-rabbitmq.test.example.com.",
"Type": "A",
"Failover": "PRIMARY",
"ResourceRecords": [
{
"Value": "xxx.xxx.xxx.xx1"
}
],
"TTL": 60,
"SetIdentifier": "sensu-rabbitmq-Primary"
},
{
"HealthCheckId": "xxxxxxxx-xxxxxxxxx-xxxxx-xxxxxxx2",
"Name": "sensu-rabbitmq.test.example.com.",
"Type": "A",
"Failover": "SECONDARY",
"ResourceRecords": [
{
"Value": "xxx.xxx.xxx.xx2"
}
],
"TTL": 60,
"SetIdentifier": "sensu-rabbitmq-Secondary"
}
{
"HealthChecks": [
{
"HealthCheckConfig": {
"Type": "TCP",
"RequestInterval": 10,
"IPAddress": "xxx.xxx.xxx.xx1",
"Port": 5672,
"FailureThreshold": 2
},
"CallerReference": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1",
"Id": "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzz1"
},
{
"HealthCheckConfig": {
"Type": "TCP",
"RequestInterval": 10,
"IPAddress": "xxx.xxx.xxx.xx2",
"Port": 5672,
"FailureThreshold": 2
},
"CallerReference": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2",
"Id": "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzz2"
}
]
}
HA Proxy と同じ内容の検証を行う。
上記のlogを監視して RabbitMQ への接続エラーが発生しないかを目視にて監視。また、合わせて Redis 内の history データベースの目視による監視も行った。
但し、RabbitMQ との接続をリセットしたり、新しい RabbitMQ クライアント(Sensu クライアント、サーバー)は以下のようなログを吐いて落ちる
{"timestamp":"2014-06-04T09:05:27.563115+0000","level":"warn","message":"stopping reactor"}
元記事は、こちら