SerfでLvsを管理するNaminoriを書きなおした
夏休み、終わっちゃいますね。
どうも、P山です。
今年の夏休みの宿題は3つ考えていて、今日ようやく終わりました。
OpenStackのKeyPairを利用してSSHログインできるようにする
fogでallowed_address_pairsをサポートする
Naminoriを完成させる
Naminoriは以前第2回ペパボテックカンファレンスの僕の発表で軽く触れていて、
その当時はとりあえず動くだけの状態だったのですが、ようやく書き上げました。
Naminori is
Serfでlvsに動的にメンバーを追加したり、ヘルスチェックを行うrubyのライブラリです。
Serfのmember-joinやleave時のLBメンバーの追加削除、サービスがダウンしている場合に
自動でLBメンバーを削除したりすることができます。(VIPは事前に定義してください)
背景としてlvsはヘルスチェック機能がなく、サービスがダウンした場合でも
パケットを割り振ってしまったりするので、そのあたりのケアをしています。
またlvsであればUDPパケットも管理できるため、
DNSなどのサービスを動的LBしたい場合に是非使ってみてください。
使い方
独自のDSLを採用しており、簡単な設定だけで使い始めることができます。
event.rb
#! /usr/bin/env ruby
require 'rubygems'
require 'naminori'
Naminori.configure do |config|
# slack通知の設定
config.notifier :slack do
webhook_url "https://hooks.slack.com/services/hoge/fuga/test"
channel "#pyama"
user "#naminori"
end
# dnsサービスの設定
config.service :dns_role do
service :dns
protocol "udp"
vip "192.168.77.9"
end
end
Naminori.run
通知設定
メンバーの追加削除時にSlackに通知を行うことができます。
config.notifier :slack do
webhook_url "https://hooks.slack.com/services/hoge/fuga/test"
channel "#pyama_botest"
user "#naminori"
end
サービス設定
ロール名ごとにイベント、ヘルスチェックを管理するサービスを定義することができます。
サービスごとのデフォルト値はREADMEを参照してください。
config.service serfロール名 do
service :dns(:http)
protocol "udp"(tcp)
vip "192.168.77.9"
end
実行
このタイミングで定義された設定に基づき、イベントの判定、ヘルスチェックが実行されます。
ヘルスチェックだけ実行したい場合でも、同じスクリプト(event.rb)をcronなどで実行しておくと
設定された間隔でサービスのチェックが実施できます。
Naminori.run
今今はDNSとHTTPだけ対応していますが、ヘルスチェック部分だけの追加で追加でサービス対応できるようにしてあるので、
必要になったらそのタイミングで追加していきます。
それでは皆様残り少ない夏休み良い時間を〜。