Recommended
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PPTX
PPTX
PDF
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PPTX
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PPTX
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
PDF
これからSpringを使う開発者が知っておくべきこと
PDF
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PPTX
PDF
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PDF
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PPT
PPTX
RDB開発者のためのApache Cassandra データモデリング入門
PDF
ストリーム処理を支えるキューイングシステムの選び方
PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC
PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
PDF
More Related Content
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PPTX
PPTX
PDF
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PPTX
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
What's hot
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PPTX
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PDF
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
PDF
これからSpringを使う開発者が知っておくべきこと
PDF
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PPTX
PDF
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PDF
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PPT
PPTX
RDB開発者のためのApache Cassandra データモデリング入門
PDF
ストリーム処理を支えるキューイングシステムの選び方
PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC
Similar to インフラエンジニアのためのcassandra入門
PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
PDF
PDF
PPTX
PDF
cassandra 100 node cluster admin operation
PDF
Cloudian nosql casestudy_20120318
PDF
PDF
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
PPT
PDF
Guide to Cassandra for Production Deployments
DOC
PDF
Jvm operation casual talks
PPT
PPTX
PDF
[db tech showcase Tokyo 2015] E35: Web, IoT, モバイル時代のデータベース、Apache Cassandraを学ぼう
PDF
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
PDF
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
PPTX
PPTX
Cassandra Summit 2016 注目セッション報告
PPT
More from Akihiro Kuwano
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
アメーバピグにおける自作サーバ運用それからどうなった
PDF
PDF
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
PDF
PDF
PDF
PDF
PDF
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
PPTX
PDF
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
PDF
インフラエンジニアのためのcassandra入門 1. 2. 3. 自己紹介 桑野 章弘 id: akuwano twitter: @kuwa_tw 株式会社サイバーエージェント インフラエンジニア 最近は自分でも何やってんのかわからなくなってきた 4. 5. アジェンダ MySQL の分散って大変? そこで Cassandra ですよ Cassandra を試すのは簡単 設定とか、管理とかってどうなの MySQL->Cassandra への置換例 これからの話 まとめ 6. 7. 8. 9. テーブル分割手法(例 1 ) 特定のカラムでの分割 DBMaster DBSlave1 DBSlave2 分散ルール 150000 175000 200000 50000 1 データ UserID B 200000 100001 A 100000 1 レンジ End レンジ Start テーブル UserID 50000 1 データ UserID 150000 175000 200000 データ UserID 10. テーブル分割手法(例 1 ) メリット データの管理は分かりやすい デメリット 特定サーバへの偏り 一部障害の可能性 サーバ追加のタイミングとレンジルールのメンテナンス性 11. 12. テーブル分割手法(例 2 ) ハッシュテーブルでの分割 DBMaster DBSlave1 DBSlave2 分散ルール ハッシュ化 1->01 50000->01 15000->00 17500->00 200000->02 150000 175000 200000 50000 1 データ UserID B 02 B 01 A 00 テーブル ハッシュ値 175000 150000 データ UserID 1 50000 200000 データ UserID 13. テーブル分割手法(例 2 ) メリット 分散の粒度を細かくすればメンテナンスの手間は少ない デメリット 特定サーバへの偏り 一部障害の可能性 特定データの受け持ち DB をトレースしないといけない 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. データ構造 Column ・ ・ ・ Key Key Name Value Name Value Name Value Name Value Name Value Name Value Name Value 25. データ構造 SuperColumn ・ ・ ・ Key Key Name Value Value Value Value Value Name Value Value Name Value Name Value Name Value Name Value Name Value Name Value Name Value Name に紐付く形で Column が入っている 26. 27. 28. 29. 30. 手順 ##### JDK インストールは割愛 ##### Cassandra インストール # cd /usr/local/src/cassandra # wget http:// ftp.riken.jp/net/apache/incubator/cassandra/0.6.1/apache-cassandra-0.6.1-bin.tar.gz # tar zxvf apache-cassandra-0.6.1-bin.tar.gz # mv apache-cassandra-0.6.1 /usr/local/ # ln -s /usr/local/apache-cassandra-0.6.1 /usr/local/cassandra ##### DATA ディレクトリ、 LOG ディレクトリの作成 # mkdir -p /var/log/cassandra # mkdir -p /var/lib/cassandra # chown -R cassandra. cassandra /var/log/cassandra # chown -R cassandra.cassandra /var/log/cassandra # chown -R cassandra.cassandra /usr/local/cassandra ##### Cassandra 起動テスト # su - cassandra $ cd /usr/local/cassandra/bin $ ./cassandra -f Listening for transport dt_socket at address: 8888 INFO - Saved Token not found. Using 65403833352419508191139141305783892154 INFO - Starting up server gossip INFO - Cassandra starting up... Ctrl+C で停止 31. 32. 設定の勘所ってどこ? Seed Port KeySpace & ColumnFamily ReplicaPlacementStrategy & ReplicationFactor Partitioner Memory, Disk, and Performance Directories 殆ど全部じゃねぇか!、、、ので抜粋して。 33. 34. 設定の勘所ってどこ? Port 他ノードとの通信用ポート クライアントとの通信用ポート <!-- 他のノードとの通信のための IP,Port --> <ListenAddress> サーバの IP アドレス </ListenAddress> <StoragePort>7000</StoragePort> <ControlPort>7001</ControlPort> <!-- Thrift Interface の IP,Port --> <ThriftAddress>0.0.0.0</ThriftAddress> <ThriftPort>9160</ThriftPort> 35. 設定の勘所ってどこ? KeySpace & ColumnFamily カラムを定義する データ種別の設定 SuperColumns BytesType AsciiType UTF8Type LongType LexicalUUIDType TimeUUIDType 詳しくは後述 36. 設定の勘所ってどこ? ReplicaPlacementStrategy & ReplicationFactor ReplicaPlacementStrategy はレプリカ作成の戦略 ReplicationFactor はレプリカの数を指定する # 物理配置を気にしない <ReplicaPlacementStrategy> org.apache.cassandra.locator.RackUnawareStrategy </ReplicaPlacementStrategy> # レプリカの数 =2 <ReplicationFactor>2</ReplicationFactor> 37. 設定の勘所ってどこ? Partitioner データの分割方式の指定 基本的には RandomPartitioner を選択することで適切に分散してくれる レンジでのデータ取得をしたい場合には OrderPreservingPartitioner を選択する必要があるが、その代わりノード毎に InitialToken を指定する必要がある # ランダム分割 <Partitioner>org.apache.cassandra.dht.RandomPartitioner</Partitioner> # 分散箇所を指定する <Partitioner>org.apache.cassandra.dht.OrderPreservingPartitioner</Partitioner> 38. 39. 設定の勘所ってどこ? <!-- Column を読む際のバッファ。よく実行される Column サイズにするべき。これを増やす時は ColumnIndexSizeInKB も増やす --> <SlicedBufferSizeInKB>64</SlicedBufferSizeInKB> <!-- memtable から SSTable に Flush するさいのバッファ。リソースが許すのであれば大きい方がよい --> <FlushDataBufferSizeInMB>32</FlushDataBufferSizeInMB> <FlushIndexBufferSizeInMB>8</FlushIndexBufferSizeInMB> <!-- Column の Value が非常に大きい場合や、数が多い場合はこの値を増やすこと --> <ColumnIndexSizeInKB>64</ColumnIndexSizeInKB> <!-- memtable に Store しておける最大容量 --> <MemtableSizeInMB>64</MemtableSizeInMB> <!-- memtable に Store しておける最大 Column 数 --> <MemtableObjectCountInMillions>0.1</MemtableObjectCountInMillions> <!-- memtable から flush するまでの分指定 --> <MemtableFlushAfterMinutes>60</MemtableFlushAfterMinutes> 40. 設定の勘所ってどこ? <!-- リードとライトの並列数 --> <ConcurrentReads>8</ConcurrentReads> <ConcurrentWrites>32</ConcurrentWrites> <!-- CommitLog を同期する周期、 periodic は一定期間ごとに、 batch は明示的に CommitLog を書き出す --> <CommitLogSync>periodic</CommitLogSync> <!-- periodic の場合の周期設定。 --> <CommitLogSyncPeriodInMS>10000</CommitLogSyncPeriodInMS> <!-- オブジェクトに GC の削除マーカーをつける時間 --> <GCGraceSeconds>864000</GCGraceSeconds> <!-- memtable の最大値( MB ) --> <BinaryMemtableSizeInMB>256</BinaryMemtableSizeInMB> 41. 42. 43. 44. 45. 46. 管理はどうやるの? #### 状態確認 $ ./nodeprobe -host cass-test01 ring Address Status Load Range Ring 124039723817946554142311632841015584374 cass-test03 Up 1.5 GB 54726667172133563740938363913892816149 |<--| cass-test02 Up 767 MB 85116141055809869248935675462381407463 | | cass-test01 Up 643.61 MB 124039723817946554142311632841015584374 |-->| #### 設定追加 $ vi ../conf/storage-conf.xml <Seeds> <Seed>cass-test01</Seed> </Seeds> #### サーバ起動 $ ./cassandra -p ./cassandra.pid INFO - Replaying /var/lib/cassandra/commitlog/CommitLog-1269269853066.log INFO - Log replay complete INFO - Saved Token not found. Using 97147856872319332778007596849029295064 INFO - Starting up server gossip #### 状態確認 $ ./nodeprobe -host cass-test01 ring Address Status Load Range Ring 124039723817946554142311632841015584374 cass-test03 Up 1.5 GB 54726667172133563740938363913892816149 |<--| cass-test02 Up 767 MB 85116141055809869248935675462381407463 | | cass-test04 Up 1.47 KB 97147856872319332778007596849029295064 | | cass-test01 Up 643.61 MB 124039723817946554142311632841015584374 |-->| 47. 48. 49. 管理はどうやるの? サーバ監視 nodetool コマンドで出来ますよ tpstats コマンド ##### スレッドの遷移統計 $ /usr/local/cassandra/bin/nodetool -host localhost tpstats Pool Name Active Pending Completed FILEUTILS-DELETE-POOL 0 0 18 STREAM-STAGE 0 0 0 RESPONSE-STAGE 0 0 4947787 ROW-READ-STAGE 0 0 314 LB-OPERATIONS 0 0 0 MESSAGE-DESERIALIZER-POOL 0 0 14089762 GMFD 0 0 309642 LB-TARGET 0 0 0 CONSISTENCY-MANAGER 0 0 0 ROW-MUTATION-STAGE 0 0 11206334 MESSAGE-STREAMING-POOL 0 0 0 LOAD-BALANCER-STAGE 0 0 0 FLUSH-SORTER-POOL 0 0 0 MEMTABLE-POST-FLUSHER 0 0 76 FLUSH-WRITER-POOL 0 0 76 AE-SERVICE-STAGE 0 0 1 HINTED-HANDOFF-POOL 0 0 8 50. 管理はどうやるの? サーバ監視 nodetool コマンドで出来ますよ cfstats コマンド $ /usr/local/cassandra/bin/nodetool -host localhost cfstats ---------------- Keyspace: <KeySpace> Read Count: 314 ( snip ) Key cache capacity: 1157568 Key cache size: 310 Key cache hit rate: 0.0 Row cache capacity: 10000 Row cache size: 72 Row cache hit rate: 0.7707006369426752 Compacted row minimum size: 228 Compacted row maximum size: 1357548 Compacted row mean size: 313 ---------------- 51. 管理はどうやるの? バックアップ/リストア だから n (ry snapshot コマンドで実行 clearsnapshot で削除 ##### Memtable の書き出し $ /usr/local/cassandra/bin/nodetool -h localhost flush <KeySpace> ##### Snapshot の作成 $ /usr/local/cassandra/bin/nodetool -h localhost snapshot snapshottest ##### Snapshot が出来ているのを確認 $ ls /var/lib/cassandra/data/<KeySpace>/snapshots/1273757807243-snapshottest/ ##### Snapshot の削除 $ /usr/local/cassandra/bin/nodetool -h localhost clearsnapshot 52. 管理はどうやるの? バックアップ/リストア json <-> SStable でエクスポート、インポート出来る tool もあります ##### エクスポート $ ./sstable2json -f CfByte1-36-Data.json \ /var/lib/cassandra/data/KsName1/CfByte1-36-Data.db \ INFO - Sampling index for /var/lib/cassandra/data/KsName1/CfByte1-36-Data.db $ cat CfByte1-36-Data.json { "test843352": [["746573746461746131", "383433333532", 1269433709, false]], (snip) "test851643": [["746573746461746131", "383531363433", 1269433743, false]] } ##### インポート $ ./json2sstable -K KsName1 -c CfByte1 CfByte1-36-Data.json \ /var/lib/cassandra/data/KsName1/CfByte1-36-Data.db $ 53. 54. 55. 56. テーブル構造 2 テーブルで構成します。 ユーザマスタ コミュニティマスタ コミュニティが更新 されたら更新日時を UPDATE Mac ユーザ B Solaris ユーザ C FreeBSD ユーザ D Solaris ユーザ A Linux ユーザ B Windows ユーザ C Plan9 ユーザ C Windows ユーザ A Linux ユーザ A コミュニティ ID UserID 1970/01/01 00:00:01 Plan9 2010/05/13 17:59:00 Solaris 2010/05/12 17:59:00 FreeBSD 2010/05/14 17:59:00 Linux 2010/05/10 01:00:00 Mac 2009/01/01 00:00:01 Windows 更新日時 コミュニティ ID 57. 58. テーブル構造 ユーザ A のカラムをとってきた場合 ユーザマスタ コミュニティマスタ 更新日時でソートして表示 Solaris Windows Linux コミュニティ ID 2010/05/13 17:59:00 ユーザ A 2009/01/01 00:00:01 ユーザ A 2010/05/14 17:59:00 ユーザ A 更新日時 UserID Linux Solaris Windows コミュニティ ID 2010/05/14 17:59:00 ユーザ A 2010/05/13 17:59:00 ユーザ A 2009/01/01 00:00:01 ユーザ A 更新日時 UserID 59. 60. カラム構造 2 つの SuperColumn で構成します。 コミュニティマスタ コミュニティと、その所属ユーザの関連付け Plan9 Solaris FreeBSD Linux Mac Windows コミュニティ ID ユーザ B ユーザ A 所属ユーザ 61. カラム構造 2 つの SuperColumn で構成します。 ユーザマスタ コミュニティの更新日時をキーにする事でソートを考慮する必要が無くなる ユーザ D ユーザ B ユーザ C ユーザ A UserID Linux 2010/05/14 17:59:00 Solaris 2010/05/13 17:59:00 Windows 2009/01/01 00:00:01 コミュニティ ID 更新日時 62. 設定ファイル ColumnFamily としてはこのように書きます。 これだけw <ColumnFamily Name=" コミュニティマスタ " ColumnType="Super" CompareWith="BytesType" CompareSubcolumnsWith="BytesType" /> <ColumnFamily Name=" ユーザマスタ " ColumnType="Super" CompareWith="BytesType" CompareSubcolumnsWith="TimeUUIDType" /> 63. 何が違う? RDBMS ではリレーションを使っているが、 Cassandra はリレーションは行えない RDBMS ではユーザ * 参加コミュニティ 数分のレコード数が必要になるが、 Cassandra では必要ないのでシンプルな構成 Cassandra ではキーのソートが保障されているのでソートを考慮する必要がない。 でも同じような事が Cassandra でもできました 64. 65. 66. 67. 68. 現在の問題 仕様が大胆に変わる 現在の Trunk は設定ファイルで初期 ColumnFamily を設定できない。読まない。前述のカラムの動的変更の余波。 0.7 から設定ファイルが XML から YAML に変わっている XML->YAML 変換ツールは付属。でもそもそもの設定項目名が変わってたりしてるのであんま意味内 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. Editor's Notes #8 Spider Storage Engine はおいておくw #9 実装によるとは思いますが。 Spider Storage Engine はおいておくw #11 実装によるとは思いますが。 Spider Storage Engine はおいておくw #12 Spider Storage Engine はおいておくw #14 Spider Storage Engine はおいておくw 迷子データがでますよ。 #15 Spider Storage Engine はおいておくw #18 Spider Storage Engine はおいておくw #19 Spider Storage Engine はおいておくw #20 Spider Storage Engine はおいておくw #21 Spider Storage Engine はおいておくw #22 Spider Storage Engine はおいておくw #23 Spider Storage Engine はおいておくw #24 Spider Storage Engine はおいておくw #25 Spider Storage Engine はおいておくw #26 Spider Storage Engine はおいておくw #27 Spider Storage Engine はおいておくw #28 Spider Storage Engine はおいておくw #30 Spider Storage Engine はおいておくw #31 Spider Storage Engine はおいておくw #33 Spider Storage Engine はおいておくw #55 Spider Storage Engine はおいておくw #56 Spider Storage Engine はおいておくw #58 Spider Storage Engine はおいておくw #60 Spider Storage Engine はおいておくw #63 Spider Storage Engine はおいておくw #64 Spider Storage Engine はおいておくw