Your SlideShare is downloading. ×
  • Like
  • Save
Redisととあるシステム
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Redisととあるシステム

  • 5,570 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,570
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
20

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Redisととあるシステムでの実例
  • 2. 今日話すこと• Redisについて• とあるシステムで問題になっていること• いろいろ検証してみたこと
  • 3. Redisってなに?• Cで書かれた高速なKVS• オンメモリなので超高速• 非同期でディスクにも書き出す(永続化機能)• 文字列以外にも、文字列のリストなどが利用 できる• マスター・スレーブによるレプリケーション機 能• 最新バージョンは「2.4.xx(2.4)系」
  • 4. 文字列データの登録文字列データを登録します。set [キー] [値]値に指定可能な文字列の上限は1GB(1073741824bytes)です。redis> set key_t value_tOKこれで「key_t」というキーで「value_t」という値が登録されたことになります。
  • 5. 文字列データの取得キーを指定して、データを取得します。get [キー]戻り値は、指定したキーが存在する場合は値、キーが存在しない場合はnilが返されます。redis> get key_t"value_t“redis> get key_a(nil)
  • 6. その他のデータ• リスト• ハッシュなどなど・・・興味ある方はWEBで検索してください(^^;)
  • 7. データの永続化• 定期的にメモリ上のデータセットのスナップショッ トをファイル(.rdb)にダンプ• 再起動時にはこのスナップショットの内容をメモ リに読み込むことにより,前回ダンプした状態ま でデータセットを復元• ただし、最後にダンプしてからクラッシュするまで の更新内容は消えてしまう(><) ↓追記専用ファイルモードで損失を抑えることができる
  • 8. 追記専用ファイルモード• すべての更新コマンドをファイル(Append Only File)に随時追記• 再起動時にこれらのコマンドを再実行することにより,データを復元!Append Only File(AOF)$ ls -l-rw-r--r-- 1 cy_redis cy_redis 732 3月 29 14:10 appendonly.aof ただし、AOFの更新コマンドログが増加していくとパフォーマンスが落ちる(らしい) ↓ この回避として「 BGREWRITEAOF 」がある!
  • 9. BGREWRITEAOF• AOFファイルをリビルドして、 AOFの中身を再 構成する ↓ この「 BGREWRITEAOF 」を定期実行することにより、パフォーマンス低下を防ぐ
  • 10. とあるシステムでは?• Redisサーバは約20数台以上いる(らしい)• サーバのメモリは24GB• 使っているRedisのバージョンは「1.2.6」• 追記専用モードで運用
  • 11. とあるシステムで問題になっているこ と• Redisのメモリ使用量が13GB以上になると、 「BGREWRITEAOF」が正常動作しない(らしい) ↓パフォーマンスが悪くなる(らしい)• メモリを24GB積んでいるのにRedisが13GB以上使え ない(T_T) ↓ 現状メモリを10GB以上使わないように運用している(らしい) ↓ Redisのサーバ台数が多くなっている(>_<) データが増えつづければサーバ台数がやばいことに・・・ ((((;゚Д゚)))
  • 12. 問題の解決には?• Redisの使用メモリ量を増やすことができるか? ↓使用メモリ量が増やすことができれば・・・ ↓メモリいっぱい積んだサーバを用意すればサーバ台数減らせるかも(^^)
  • 13. 検証• メモリ使用量が多くなったときの BGREWRITEAOFの挙動を確認• 最新バージョンとの挙動の違い• 最新バージョンとの性能比較• その他いろいろやってみた(^^)
  • 14. BGREWRITEAOFの検証検証方法redisサーバに対して、データをSETしつづけ、メモリ使用量10GB,20GB以上達したときの「BGREWRITEAOF」の挙動を検証検証環境OS メモリCentOS5.4 64bit 32GB結果バージョン Redisの使用メモリ量 vm.overcommit_memory BGREWRITEAOFの実行結果Redis-1.2.6 14GB 0(デフォルト) Cannot allocate memory 14GB 1 successfully rewritten. 23GB 1 Out of memoryRedis-2.4.9 14GB 0(デフォルト) rewrite successful 22GB 0(デフォルト) Cannot allocate memory 22GB 1 rewrite successful
  • 15. バージョンごとの性能検証方法1000万件のデータをSET/GETしたときの所用時間と使用メモリ量を測定1000万件のCSVデータを読み込ませてSETを実行CSVデータ内容(1000万件分)==============tokyo00001,09000001tokyo00002,09000002tokyo00003,09000003tokyo00004,09000004tokyo00005,09000005・・・・結果バージョン SET(秒) GET(秒) 使用メモリ(GB)Redis-1.2.6 1276 1249 1.54Redis-2.4.9 1253 1190 1.17
  • 16. メモリの限界テスト検証環境OS メモリ RedisバージョンCentOS5.4 64bit 64GB 2.4.9検証方法---------------------Redisにデータを登録しつづけたときの挙動を確認結果------------サーバハングアップ※60GB以上のメモリを使いはたし、コンソールになにも映らない キーボードも反応なし syslog、redisのログにエラー出力なし 電源OFF/ONで復帰
  • 17. 使用メモリ上限テスト検証方法100MB以上のデータをSETできないようにできるかテスト設定redis.conf--------------maxmemory 100mbmaxmemory-policy noeviction※書き込み操作でエラーを返す結果---------------クライアント側で以下エラー発生redis.exceptions.ResponseError: command not allowed when used memory > maxmemory
  • 18. BGREWRITEAOFの実行上限検証方法メモリ使用量40GB,50GB以上達したときの「BGREWRITEAOF」の挙動を検証結果AOFファイルサイズ(GB) 使用メモリ量(GB) 結果20 44 rewrite successful24 50 サーバハングアップ考察メモリ40GB以上のとき成功したのは、AOFサイズ+使用メモリ量の合計が64GBだったからで、50GB以上のときハングしたのは合計が70GB以上になったからではないかと思われる※サーバで使用できるメモリ量は物理メモリ(64GB)+SWAP(2GB)=66GB