Recommended
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
RDB開発者のためのApache Cassandra データモデリング入門
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Kafka 0.11 の Exactly Once Semantics
Datastax Enterpriseをはじめよう
アーキテクチャから理解するPostgreSQLのレプリケーション
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Apache Hadoop YARNとマルチテナントにおけるリソース管理
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
Spring Cloud Data Flow の紹介 #streamctjp
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Guide to Cassandra for Production Deployments
More Related Content
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
RDB開発者のためのApache Cassandra データモデリング入門
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Kafka 0.11 の Exactly Once Semantics
Datastax Enterpriseをはじめよう
What's hot (20)
アーキテクチャから理解するPostgreSQLのレプリケーション
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Apache Hadoop YARNとマルチテナントにおけるリソース管理
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
Spring Cloud Data Flow の紹介 #streamctjp
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Similar to インフラエンジニアのためのcassandra入門 (20) Guide to Cassandra for Production Deployments
Cloudian nosql casestudy_20120318
cassandra 100 node cluster admin operation
Yahoo! JAPANにおけるApache Cassandraへの取り組み
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
[db tech showcase Tokyo 2014] L32: Apache Cassandraに注目!!(IoT, Bigdata、NoSQLのバ...
Cassandra Summit 2016 注目セッション報告
Jvm operation casual talks
[db tech showcase Tokyo 2015] E35: Web, IoT, モバイル時代のデータベース、Apache Cassandraを学ぼう
More from Akihiro Kuwano (20)
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴
アメーバピグにおける自作サーバ運用それからどうなった
勉強会コミュニティがぼくの エンジニア人生にもたらした事。 あと、NoSQLとの付き合い方。
やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)
インフラエンジニアのためのcassandra入門3. 自己紹介 桑野 章弘 id: akuwano twitter: @kuwa_tw 株式会社サイバーエージェント インフラエンジニア 最近は自分でも何やってんのかわからなくなってきた 5. アジェンダ MySQL の分散って大変? そこで Cassandra ですよ Cassandra を試すのは簡単 設定とか、管理とかってどうなの MySQL->Cassandra への置換例 これからの話 まとめ 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 ) メリット データの管理は分かりやすい デメリット 特定サーバへの偏り 一部障害の可能性 サーバ追加のタイミングとレンジルールのメンテナンス性 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 をトレースしないといけない 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 が入っている 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 で停止 32. 設定の勘所ってどこ? Seed Port KeySpace & ColumnFamily ReplicaPlacementStrategy & ReplicationFactor Partitioner Memory, Disk, and Performance Directories 殆ど全部じゃねぇか!、、、ので抜粋して。 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. 設定の勘所ってどこ? Memory, Disk, and Performance 各種カラムのキャッシュ リード、ライトのスレッド数 Memtable のフラッシュタイミング、バッファ容量 作成したカラムの構成によって変更する必要がある 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> 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 |-->| 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 $ 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 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 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 でもできました 68. 現在の問題 仕様が大胆に変わる 現在の Trunk は設定ファイルで初期 ColumnFamily を設定できない。読まない。前述のカラムの動的変更の余波。 0.7 から設定ファイルが XML から YAML に変わっている XML->YAML 変換ツールは付属。でもそもそもの設定項目名が変わってたりしてるのであんま意味内 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