98
Redis & Redis HA design with Keepalived Toshiki Inami Jan 14 2016 1

Redis & Redis HA design with Keepalived

Embed Size (px)

Citation preview

Page 1: Redis & Redis HA design with Keepalived

Redis & Redis HA design with Keepalived

Toshiki InamiJan 14 20161

Page 2: Redis & Redis HA design with Keepalived

Agenda

1. What is NoSQL?

2. What is Redis?

3. Redis HA design

4. Redis HA design @ Arukas

5. Q&A

2

Page 3: Redis & Redis HA design with Keepalived

What is NoSQL?

3

Page 4: Redis & Redis HA design with Keepalived

NoSQLとは?

● いわゆるビッグデータに対応する為の技術

● 2009年ごろから

● Not Only SQL ◎(Not SQL ☓)

● 水平拡張しやすい、スケールアウトしやすい

● 汎用的なハードを利用できる

● 複雑なデータ構造にも対応

● 2016年1月現在、 225種存在 ( http://nosql-database.org/ )

4

Page 5: Redis & Redis HA design with Keepalived

What is Redis?

5

Page 6: Redis & Redis HA design with Keepalived

Redisの特徴

● イネーブラ型(他のミドルウェアと組み合わせることで高いパフォーマンスを発揮)

● キー・バリュー型

● オンメモリで高速

● アトミックな処理(後ほど説明)

● 様々なデータ型を持つ(後ほど説明)

● 結果整合性(レプリケーションの際にマスタからスレーブに書き込む間は複数のバージョンが存在)

6

Page 7: Redis & Redis HA design with Keepalived

Redisの様々なデータ型

● 文字列

"Value"

● リスト(新しい要素を先頭OR末尾に追加)

"Value1","Value2", "Value3"

● セット(文字列の順不同の集合、同じ要素は許容しない)

"Value1", "Value5", "Value6"

● ソート済みセット(スコアの順にならぶ)

"Value1", "Value9", "Value5"スコア1, スコア2, スコア3

● ハッシュ (フィールドとバリューのマップ)

: field1 => Value1

: field2 => Value2

7

Page 8: Redis & Redis HA design with Keepalived

Redisの様々なデータ型2

あとは、画像などの BLOB( Binary Large Object )なども結びつけることが出来る。

=> データストラクチャ・ストアとも呼ばれる

8

Page 9: Redis & Redis HA design with Keepalived

アトミックな処理とは

排他制御(同時実行制御)によって更新を処理すること。トランザクションが保証される。

DB

A

B

書き込み

Aがデータの更新しているときは、他のクライアントからの更新はロックされ実行できない。

9

Page 10: Redis & Redis HA design with Keepalived

Redis HA design( HA = “High Availability”)

10

Page 11: Redis & Redis HA design with Keepalived

● Master / Slave replication の機能で対応 

● ( Redis cluster という分散実装で対応 )

● Redis sentinel サーバーを立てる

RedisのHA(可用性)を高める選択肢として

11

Page 12: Redis & Redis HA design with Keepalived

● Master / Slave replication の機能で対応 

● ( Redis cluster という分散実装で対応 )

● Redis sentinel サーバーを立てる

RedisのHA(可用性)を高める選択肢として

12

Page 13: Redis & Redis HA design with Keepalived

Redis Sentinel とは?

- Quorum ベースで redis ノードを定期的に死活監視

具体的には…

- インスタンスに異常が発生した際に、Administrator に通知

- master/slave のインスタンス間でのフェイルオーバーを担当

! Redis ver2.8 & 3.0 に内包されている

! Redis 本家プロジェクトで開発されている、HA(高可用性)を実現するための実装

13

Page 14: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Redis ( master )

Host2

( 192.168.0.2 )

Redis ( slave )

Redis sentinel図1Host3

( 192.168.0.3 )

Redis Sentinel

死活監視死活監視

死活監視 & replication

14

Page 15: Redis & Redis HA design with Keepalived

しかしこれでは100%の可用性を保つためには十分ではない。

15

Page 16: Redis & Redis HA design with Keepalived

Redis sentinel図2

Host3( 192.168.0.3 )

Redis Sentinel

死活監視死活監視

Host1( 192.168.0.1 )

Redis ( master )

keepalived( master )

Host4( 192.168.0.4 )

haproxy( master )

Host5( 192.168.0.5 )

Host2( 192.168.0.2 )

Redis ( slave )

keepalived( slave )

haproxy( slave )

死活監視 & replication

( 192.168.0.6)VIP

どっちが master か監視どっちが master か監視

16

Page 17: Redis & Redis HA design with Keepalived

複雑。。。

17

Page 18: Redis & Redis HA design with Keepalived

Redis sentinel

参考になる資料

http://redis.io/topics/sentinel

http://www.101tech.net/2014/08/08/highly-available-redis-cluster/

18

Page 19: Redis & Redis HA design with Keepalived

● Master / Slave replication の機能で対応 

● ( Redis cluster という分散実装で対応 )

● Redis sentinel サーバーを立てる

RedisのHA(可用性)を高める選択肢として

19

Page 20: Redis & Redis HA design with Keepalived

Master / Slave replication とは

! Redis インスタンスの slave/masterを SLAVEOF コマンドで切り替えるシンプルな実装

! Redis 同士は replication (複製)するだけで、ルーティングの機能を提供しない。そのため冗長化を行なう際は、他のソフトウェアで補う必要がある

! Redis の死活監視をデフォルトで行っていない。工夫が必要になる

20

Page 21: Redis & Redis HA design with Keepalived

Master / Slave replication

Host1

( 192.168.0.1 )

Redis ( master )

Host2

( 192.168.0.2 )

Redis ( master )

21

Page 22: Redis & Redis HA design with Keepalived

Master / Slave replication

Host1

( 192.168.0.1 )

Redis ( master )

Host2

( 192.168.0.2 )

Redis ( master )

$ redis-cli SLAVEOF 192.168.0.1

22

Page 23: Redis & Redis HA design with Keepalived

Master / Slave replication

Host1

( 192.168.0.1 )

Redis ( master )

Host2

( 192.168.0.2 )

Redis ( slave )Replication

23

Page 24: Redis & Redis HA design with Keepalived

Master / Slave replication

Host1

( 192.168.0.1 )

Redis ( master )

Host2

( 192.168.0.2 )

Redis ( slave )Replication

$ redis-cli SLAVEOF no one

24

Page 25: Redis & Redis HA design with Keepalived

Master / Slave replication

Host1

( 192.168.0.1 )

Redis ( master )

Host2

( 192.168.0.2 )

Redis ( master )Replication

25

Page 26: Redis & Redis HA design with Keepalived

Master / Slave replication の動作の流れ

 1. slave がレプリケーションに参加すると、SYNC コマンドを送り master のバッファ(メモリ上のデータ)をディスクに書き込むよう指示する。

26

3. バックグラウンドでの保存が終了後、master は slave に保存したファイルを送る。そして、slave は それをディスクに保存し、その後メモリにロードする。

4. master は slave に対して、バッファに存在する全てのコマンドを送る。

 2. master に BGSAVE が走り非同期バックグラウンドでの保存が開始される。その間に受け取ったコマンドはバッファーに保存される。

5. master と slave の replication が完了する

Page 27: Redis & Redis HA design with Keepalived

● Master / Slave replication の機能で対応 

● ( Redis cluster という分散実装で対応 )

● Redis sentinel サーバーを立てる

RedisのHA(可用性)を高める選択肢として

27

Page 28: Redis & Redis HA design with Keepalived

そもそもこれはHA(可用性)の向上をめざしているものではない。

28

Page 29: Redis & Redis HA design with Keepalived

Redis clusterとは● node同士でgossipプロトコルで生存を確認

● 複数台でデータを分割して保持 ( Partitioning )

● HAのためにあるのではなく、計算量を最大化してリソースを効率よく利用することが目的

● nodeをclusterのネットワークに入れれば、リシャーディングされる

29

redis node

redis node

redis node

redis node

redis node

client client client

Page 30: Redis & Redis HA design with Keepalived

Redis cluster

参考になる資料

http://redis.io/topics/cluster-spec

http://redis.io/topics/partitioning

http://redis.shibu.jp/admin/cluster/

https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04

30

Page 31: Redis & Redis HA design with Keepalived

● Redis Clusterは可用性を高める目的ではなく、Partitioningを利用して リソースを無駄なく利用することに重きをおいている。

● Redis slave/master : シンプルな構成でレプリケーションのみの機能

まとめ

● Redis Sentinel : 手軽にHAを高める目的だが、もしHA100%を実現しようとすると複雑化。 オーバーヘッドに繋がる。

31

Page 32: Redis & Redis HA design with Keepalived

Redis HA design @ Arukas

32

Page 33: Redis & Redis HA design with Keepalived

そもそも可用性を高める目的ではない => X

よって、Master/Slaveのreplication をベースに実装◎

Arukasでは…

● Redis Cluster ?

● Redis Sentinel ?

構成が複雑化、そして運用の際にオーバーヘッドになる => X

33

Page 34: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

Layout

34

Page 35: Redis & Redis HA design with Keepalived

Tools● Host1 ( redis01.arukas.io )

- OS : Ubuntu14.04 LTS

- Redis : version 2.8.24

- Keepalived: version 1.2.7

- 2core-2GB

● Host2 ( redis02.arukas.io )

- OS : Ubuntu14.04 LTS

- Redis : version 2.8.24

- Keepalived: version1.2.7

- 2core-2GB

35

Page 36: Redis & Redis HA design with Keepalived

Btw….What the heck is Keepalived?

36

Page 37: Redis & Redis HA design with Keepalived

Keepalivedとは

● 具体的には、主に2つの機能を提供

● Version 1.2.19 - July 07, 2015 for Linux

37

● LVSを使ったロードバランサの機能+HAの機能を提供する。

- 複数のサーバー間でIPフェイルオーバーを実現し、アプリケーションをサーバーごとに、アクティブ/スタンバイで冗長化をする為

- サービスの稼働状況に応じてロードバランサの設定を変更し、停止しているサービスに対してリクエストが振り分けられないようにすること。

- ロードバランサ自体を冗長化する

■このために VRRP ( Virtual Router Redundancy Protocol )を用いて、Keepalived の backup がパケットを送信し、死活監視をする。そして複数のロードバランサの存在を仮定してIPを一つにまとめる必要があり、VIP ( Virtual IP ) を作成する。

● 今回の使用目的

- アプリケーションの死活監視の為

Page 38: Redis & Redis HA design with Keepalived

Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

(192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

38

Page 39: Redis & Redis HA design with Keepalived

Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

(192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

VRRPパケットを送り 監視

39

Page 40: Redis & Redis HA design with Keepalived

Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

(192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master )

40

Page 41: Redis & Redis HA design with Keepalived

41

/etc/keepalived/keepalived.conf

Page 42: Redis & Redis HA design with Keepalived

ではもう一度全体のレイアウトを見てみましょう。

42

Page 43: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

(192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

Layout

43

Page 44: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス

● Host1側

- Keepalived ( master ) の突然死

*ここでは説明を簡易化する目的で、先ほどのレイアウトと同じパターンであることを想定します。勿論、障害発生後にはRedisのmaster/slave、Keepalivedのmaster/backupが入れ替わることも発生します。

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

44

Page 45: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス● Host1側

- Keepalived ( master ) の突然死

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

45

Page 46: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

46

Page 47: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.3 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

47

Page 48: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.3 )

Keepalived ( master )

Redis ( slave )

死活監視

Replication

48

Page 49: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived (backup)

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master )

Redis ( slave )

死活監視

Replication

このタイミングでnotify_master が呼

ばれる

49

Page 50: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master )

Redis ( master )

死活監視

Replication

50

Page 51: Redis & Redis HA design with Keepalived

notify_master ってなに?

51

Page 52: Redis & Redis HA design with Keepalived

Notify script とは

● KeepalivedのVRRPの状態( master / backup / fault )によって、任意のスクリプトを実行できる機能● 謎にドキュメント化されていない

● 種類としては、

- notify_master

- notify_backup

- notify_fault

VRRPの状態が masterの場合呼ばれる

VRRPの状態が backup の場合呼ばれる

VRRPの状態が fault の場合呼ばれる

52

Page 53: Redis & Redis HA design with Keepalived

notify_master

/etc/keepalived/keepalived.conf

/etc/keepalived/notify_master.sh

53

/etc/keepalived/keepalived.conf

Page 54: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス

● Host1側

- Keepalived ( master ) の突然死

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

54

Page 55: Redis & Redis HA design with Keepalived

っと、Redisが突然死ぬと言っても誰がどのように監視しているのでしょうか?

55

Page 56: Redis & Redis HA design with Keepalived

Check script ( vrrp_script ) とは

● Keepalived が任意のスクリプトを定期的に実行してくれる機能

● 謎にドキュメント化されていない

- そのスクリプトはリターン値を明記する必要がある。 0 か 1。

56

- 0 を返した場合 => そのまま継続

- 0 を返した場合 => VRRP が FAULT 状態に変化する

Page 57: Redis & Redis HA design with Keepalived

/etc/keepalived/keepalived.conf

/etc/keepalived/redis_health_check.sh

57

/etc/keepalived/keepalived.conf

Check script ( vrrp_script ) とは

Page 58: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

Check script が定期的に実行されてい

58

Check script が定期的に実行されてい

Page 59: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

59

Check script が定期的に実行されてい

Check script が定期的に実行されてい

Page 60: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

Redis 死亡確認!

60

Page 61: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

このタイミングでnotify_fault が呼ば

れる

61

Page 62: Redis & Redis HA design with Keepalived

notify_fault

/etc/keepalived/keepalived.conf

/etc/keepalived/notify_fault.sh

62

/etc/keepalived/keepalived.conf

Page 63: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

63

Page 64: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master )

Redis ( slave )

死活監視

Replication

64

Page 65: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master )

Redis ( slave )

死活監視

Replication

65

このタイミングでnotify_master が呼

ばれる

Page 66: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master )

Redis ( master )

死活監視

Replication

66

Page 67: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス

● Host1側

- Keepalived ( master ) の突然死

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

67

Page 68: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

68

Page 69: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

69

Page 70: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master)

Redis ( slave )

死活監視

Replication

このタイミングでnotify_master が呼

ばれる

70

Page 71: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( backup )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( master)

Redis ( master )

死活監視

Replication

71

Page 72: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス

● Host1側

- Keepalived ( master ) の突然死

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

72

Page 73: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

73

Page 74: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

何らかの形でリスタート Ex. Supervisord

74

Page 75: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

75

Page 76: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

このタイミングでnotify_backup が呼

ばれる

76

Page 77: Redis & Redis HA design with Keepalived

notify_backup

/etc/keepalived/keepalived.conf

/etc/keepalived/notify_backup.sh

77

/etc/keepalived/keepalived.conf

Page 78: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

78

Page 79: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス

● Host1側

- Keepalived ( master ) の突然死

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

79

Page 80: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

80

Page 81: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

81

Check script が定期的に実行されてい

Check script が定期的に実行されてい

Page 82: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

Redis死亡確認!

82

Page 83: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

83

Page 84: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.3 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

何らかの形でリスタート Ex. Supervisord

84

Page 85: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( master )

死活監視

Replication

85

Page 86: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( master )

死活監視

Replication

何らかの形でリスタート Ex. Supervisord

86

Page 87: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup)

Redis ( master )

死活監視

Replication

このタイミングでnotify_backup が呼

ばれる

87

Page 88: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

88

Page 89: Redis & Redis HA design with Keepalived

障害発生パターンとその対応プロセス

● Host1側

- Keepalived ( master ) の突然死

- Redis ( master ) の突然死

- Host1 の突然死

● Host2側

- Keepalived ( backup ) の突然死

- Redis ( slave ) の突然死

- Host2 の突然死

89

Page 90: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

90

Page 91: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

リブート

91

Page 92: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( master )

死活監視

Replication

92

Page 93: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( master )

死活監視

Replication

93

Page 94: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( master )

死活監視

Replication

このタイミングでnotify_backup が呼

ばれる

94

Page 95: Redis & Redis HA design with Keepalived

Host1

( 192.168.0.1 )

Keepalived ( master )

Redis ( master )

死活監視

( 192.168.0.3 )VIP

Host2

( 192.168.0.2 )

Keepalived ( backup )

Redis ( slave )

死活監視

Replication

95

Page 96: Redis & Redis HA design with Keepalived

96

苦戦した点

● Redisのmaster側のhostをリブートした後に、少ない頻度でレプリケーションがされない

… ”Unable to connect to MASTER: Resource temporarily unavailable Connecting to MASTER no:0”…

- メモリーリークと疑い、redis をアップデート => 失敗

トライしたこと

- Linux kernel overcommit memory の設定を 1 へ変更 => 失敗

- システムのプロセステーブルがいっぱいになっているために fork(2) システムコールが失敗か? =>いや、いっぱいになっていない

- メモリーまたはスワップ空間が足りないためにシステムコールが失敗か? => 足りなくない

- ユーザーがそれ以上プロセスの作成を許されていないので失敗? => そんなことはない

Page 97: Redis & Redis HA design with Keepalived

97

苦戦した点

- プロセスのブートオーダーが原因だった!( Keepalived => Redis という順番)

結局、、、

- リブートした時に Keepalived のnotify_backupが呼ばれた段階では、redis slave of <IP> <PORT>が実行されない。その後Redisが呼ばれ、Connecting to MASTER no:0と出力される。つまり、どこにもレプリケーションが取れていなかった為である

解決策

- update-rc.d -f keepalived remove

- update-rc.d -f keepalived defaults 99

*Chefを使っている場合は、service リソースの priority の部分で調整する必要あり

Page 98: Redis & Redis HA design with Keepalived

Q & A

98