Cassandra Sammit Tokyo2017のメモ続き
午後のセッション
表題の件は、後半
「AWSにおけるCassandraクラスタの設定と運用」
ホワイトペーパーは
https://d0.awsstatic.com/whitepapers/Cassandra_on_AWS.pdf
■KafkaとCassandra(DSE)とSQLiteで毎時2700万レコードをR/Wするには?
・Kafka:コミットログ
・DataStaxEnterprise:永続化
・SQLite:検索
・CSVの読み込み、書き込み
システム構成
CSV→プロデューサー→ブローカー→コンシューマー→DSE
: ↓
これ1200個 SQLite
・問題発生
・Kafka停止:5分くらい
Kafkaはトピックとパーティションが増えるだけ、メモリが必要
→ヒープがいっぱいに:ヒープ設定しましょう
(最初は出なかった)
※公式にはあまり書かれていない。べストオブプラクティスに
・DSE停止
書く容量がなくなった(正常に止まった→正しい動作)
→2ノードに集中していた:KafKaのノード分布が極端に偏った
→ZooKeeperの安定稼働が必要
リーダーノードの分布:ころころ変わる
・ファイルディスクリプタ不足
nofile設定(TIME_WAITのソケット回収 tcp_tw_reuse
→recycleは使わない)
・CSVパースが重い
投入データに応じてパーティションに振り分ける場合、データの偏りがないようにする
・MSGPack重い(not 遅い)
構造化されたデータだと重い
割り振りのCPU
CPickleにすると早くなる
・スケールアウト型の良い点・悪い点
環境設定の自動化:Ansible
大量のデータが流れる→データのエラー
RDBだったら? できるはずない。
・補足:トランザクションミドルウェア
・事例紹介
テレマティックス
治験アプリ
■Best Better practice of Cassandra
Cassandraに不向きなCassandraデータモデリング基礎
・自己紹介
・ターゲット
・ベタープラクティス
ベスト:適材適所というけど
ベストじゃない部分:RDB?→それやるくらいならRDBに入れる
・ベストではないけど、Cassandraに入れれるよ
→RDBにいれなくて、Cassandraで行うために
・ヒストリカルデータ
・ツリー構造
・計上データ
・前提条件
Cassandraはどうやってデータを読むか
パーティションキー、クラスタリングキーの2つのキー
パーティションキーのハッシュ
カラム名がクラスタリングキー、
それ以外が値
パーティションキーは=かける。必須
クラスタリングキーは前のところから指定
最後は> < が書ける
・履歴管理:社員の異動情報 3月25日の時点
SQLなら 開始日付と終了日付ではさむ
→カスタムインデックスを作る
・ツリー構造
組織構造
方法
連結リスト
ねすてっとテーブル
経路列挙
クロージャーテーブル
判断のポイント:
JOIN,再帰不可、
整合性は考えないとする
ジェイウォーク:1つのカラムに複数の値を入れる、非正規もOKとする
経路列挙とクロージャーテーブル
経路列挙:コロン区切りでつなげる
→前方一致
;でsplitする
U+003A以上 U+003B未満でコロンを指定できる
閉包テーブル
距離を書く
レコード数は増える
・計上データ
伝票集計データ
誤計算は死
並列・ストリーミング
高速処理
カウンターは、特定状況で2回カウントされるのでX
update with LWT(100だったら101にする)
■(英語のタイトルで、全部英語:通訳なしで、タイトルメモれなかった)
・リアルタイム分析でCassandraとSpark
・自己紹介
・リアルタイムの意味
たいせつなところ
ユースケース
・Cassandra
NoSQL
No SPOF
なぜ、Cassandra
SPOFがない、信頼性など
ユースケース
IoTなどいろいろ
CAP定理
Cassandraは AP
コンシステンシーとスピード、ボリューム
・SPARK
エコシステム:機械学習など
Spark Streaming→MLlib,SQL
・Spark+Cassandra
・Spark AND Cassandra アーキテクチャ
(早く終わった)
■運用中システムにおける6億レコードのデータ移行に関する課題と解決
・自己紹介
・ログデータ蓄積・解析システムの概要
IoTサービスのログデータ解析
IoTデバイス
ログデータ→Cassandra
データ Hadoopで解析
RDBに保存
集計項目 20項目(蓄積用とは別)
・データ移行が必要になったわけ
ユーザー固有の情報を取り扱う
→蓄積用カラムファミリに主キーの追加が必要となった
→後から変えられない
・移行要件
サービスに影響を及ぼさない
新規カラムには、1レコードずつ適切な値を入力
・設計指針
低負荷:全件SELECTとかしない
高速:早く移行を終わらせる
リトライ可能:同じデータを2度処理しない
・方法案
Hadoop Map Reduceの利用→MapperのTimeoutで失敗する
マルチスレッドで行う→いったん採用
1時間分などもできる
確認:RoW Keyでカウント
■AWSにおけるCassandraクラスタの設定と運用
・ホワイトペーパーがあり、それの解説となる
http://bit.ly/2wwdWa7
・自己紹介
100 node cluster admin oparator
・本セッション
ホワイトペーパーベース、各章・項目の紹介・解説
・「Apache Cassandra on AWS」について
OSSプロダクト運用に役立つドキュメントを出している
Cassandra 2.1ベース
・主要なNoSQLデータストア
Cassandraはキーバリュー
・NoSQL On AWS
NoSQL:DynamoDB
・Cassandra: A Breif Introduction
Cassandraの基礎的な知識について
重要となる要素
クラスタ
分散の考え
ノード
コミットログ
memtable
:
AZと合わせて考える
・ライト・リクエスト・フロー
書き込み処理の流れについて
文があっている・図は間違ってる
・コンパクションについて
理解してなかったら読んでね
・リードリクエストフロー
読み込み処理の流れについて
・リソース要求
ストレージ
ネットワーク
メモリー
CPU
ストレージ
Disk IO大事 シーケンシャル+ランダム→SSD
etx4,etx3
ネットワーク
リクエスト処理、Gossip
1Gbpsが利用できるインスタンス
NW最適化オプション
メモリ
重要な設定
MAX_HEAP_SIZE
HEAP_NEW_SIZE
32G以上:ただし2.X
3.0はG1GCで変わってるかも
CPU
Redisだと、コアをみてくれないので1コアでインスタンス増やす
CassandraはCPUが4個以上あるインスタンス
ある程度のスペックを持ったインスタンスでクラスタのノード数を抑えることが
管理コストの観点からよい
・AWSでクラスタ設計する
AZ
VPC
ネットワーク
ストレージ
インスタンス
・そもそも、AZ,リージョンとは
リージョン:物理的場所
AZ:1つ以上のデータセンター
→マルチリージョン構成
・すにっち
自動的にセットしてくれる
単一リージョン
マルチリージョン:いくつのレプリカ持つか
・VPCの設計
VPC:サブネット
VPC:仮想プライベートクラウドサービス
・ENI(えらすてぃっく ねっとわーく いんたーふぇーす)の設計
Eth1,Eth2が簡単に作れる
IPを引き継いだノードが作れる
・ストレージ性能の設計
EBS →永続的
EC2 インスタンスストレージ
→VMが起動するところについている一時的ストレージ
NVMえSSDなど利用できる
→パターンを説明
要件に合致しているか
・インスタンスタイプ
どういうシナリオで、どういうサイジング
ノードの追加でスケーリング
・カサンドラをAWSにデプロイ
クラスタでどこまで高可用性を追求するか?
Writeを安全に失敗させるとか
オートスケーリングとNAT Gateway
→シードと、ノーシードで
セキュアなCassandra
→KMS
・Amazon CloudWatchの利用
→監視 一定の負荷になったら、Cassandraを追加
・マルチリージョン構成
通信
リクエスト処理 hinted handoff
・バックアップ
・カスタムAMIを作るメリット
・オンプレ環境から、CassandraクラスタをAWS上にゼロダウンタイムで移行
・AmazonEMRを利用したCassandra上の分析
・ネットワークコストの最適化
→NW転送量に課金
・カサンドラのベンチマーク
YCSB:注意点
・クイックスタート
DSEと、CloudFormationを使う
・AWSで作るメリット
セキュリティ
スケーラビリティ
各種サービス
・AWS Black Belt Online セミナー
AWS Black Belt VPC等で検索するとプレゼンへ
午前と午後の間にランチセッションがあったけど、
それについては、別エントリで
午後のセッション
表題の件は、後半
「AWSにおけるCassandraクラスタの設定と運用」
ホワイトペーパーは
https://d0.awsstatic.com/whitepapers/Cassandra_on_AWS.pdf
■KafkaとCassandra(DSE)とSQLiteで毎時2700万レコードをR/Wするには?
・Kafka:コミットログ
・DataStaxEnterprise:永続化
・SQLite:検索
・CSVの読み込み、書き込み
システム構成
CSV→プロデューサー→ブローカー→コンシューマー→DSE
: ↓
これ1200個 SQLite
・問題発生
・Kafka停止:5分くらい
Kafkaはトピックとパーティションが増えるだけ、メモリが必要
→ヒープがいっぱいに:ヒープ設定しましょう
(最初は出なかった)
※公式にはあまり書かれていない。べストオブプラクティスに
・DSE停止
書く容量がなくなった(正常に止まった→正しい動作)
→2ノードに集中していた:KafKaのノード分布が極端に偏った
→ZooKeeperの安定稼働が必要
リーダーノードの分布:ころころ変わる
・ファイルディスクリプタ不足
nofile設定(TIME_WAITのソケット回収 tcp_tw_reuse
→recycleは使わない)
・CSVパースが重い
投入データに応じてパーティションに振り分ける場合、データの偏りがないようにする
・MSGPack重い(not 遅い)
構造化されたデータだと重い
割り振りのCPU
CPickleにすると早くなる
・スケールアウト型の良い点・悪い点
環境設定の自動化:Ansible
大量のデータが流れる→データのエラー
RDBだったら? できるはずない。
・補足:トランザクションミドルウェア
・事例紹介
テレマティックス
治験アプリ
■Best Better practice of Cassandra
Cassandraに不向きなCassandraデータモデリング基礎
・自己紹介
・ターゲット
・ベタープラクティス
ベスト:適材適所というけど
ベストじゃない部分:RDB?→それやるくらいならRDBに入れる
・ベストではないけど、Cassandraに入れれるよ
→RDBにいれなくて、Cassandraで行うために
・ヒストリカルデータ
・ツリー構造
・計上データ
・前提条件
Cassandraはどうやってデータを読むか
パーティションキー、クラスタリングキーの2つのキー
パーティションキーのハッシュ
カラム名がクラスタリングキー、
それ以外が値
パーティションキーは=かける。必須
クラスタリングキーは前のところから指定
最後は> < が書ける
・履歴管理:社員の異動情報 3月25日の時点
SQLなら 開始日付と終了日付ではさむ
→カスタムインデックスを作る
・ツリー構造
組織構造
方法
連結リスト
ねすてっとテーブル
経路列挙
クロージャーテーブル
判断のポイント:
JOIN,再帰不可、
整合性は考えないとする
ジェイウォーク:1つのカラムに複数の値を入れる、非正規もOKとする
経路列挙とクロージャーテーブル
経路列挙:コロン区切りでつなげる
→前方一致
;でsplitする
U+003A以上 U+003B未満でコロンを指定できる
閉包テーブル
距離を書く
レコード数は増える
・計上データ
伝票集計データ
誤計算は死
並列・ストリーミング
高速処理
カウンターは、特定状況で2回カウントされるのでX
update with LWT(100だったら101にする)
■(英語のタイトルで、全部英語:通訳なしで、タイトルメモれなかった)
・リアルタイム分析でCassandraとSpark
・自己紹介
・リアルタイムの意味
たいせつなところ
ユースケース
・Cassandra
NoSQL
No SPOF
なぜ、Cassandra
SPOFがない、信頼性など
ユースケース
IoTなどいろいろ
CAP定理
Cassandraは AP
コンシステンシーとスピード、ボリューム
・SPARK
エコシステム:機械学習など
Spark Streaming→MLlib,SQL
・Spark+Cassandra
・Spark AND Cassandra アーキテクチャ
(早く終わった)
■運用中システムにおける6億レコードのデータ移行に関する課題と解決
・自己紹介
・ログデータ蓄積・解析システムの概要
IoTサービスのログデータ解析
IoTデバイス
ログデータ→Cassandra
データ Hadoopで解析
RDBに保存
集計項目 20項目(蓄積用とは別)
・データ移行が必要になったわけ
ユーザー固有の情報を取り扱う
→蓄積用カラムファミリに主キーの追加が必要となった
→後から変えられない
・移行要件
サービスに影響を及ぼさない
新規カラムには、1レコードずつ適切な値を入力
・設計指針
低負荷:全件SELECTとかしない
高速:早く移行を終わらせる
リトライ可能:同じデータを2度処理しない
・方法案
Hadoop Map Reduceの利用→MapperのTimeoutで失敗する
マルチスレッドで行う→いったん採用
1時間分などもできる
確認:RoW Keyでカウント
■AWSにおけるCassandraクラスタの設定と運用
・ホワイトペーパーがあり、それの解説となる
http://bit.ly/2wwdWa7
・自己紹介
100 node cluster admin oparator
・本セッション
ホワイトペーパーベース、各章・項目の紹介・解説
・「Apache Cassandra on AWS」について
OSSプロダクト運用に役立つドキュメントを出している
Cassandra 2.1ベース
・主要なNoSQLデータストア
Cassandraはキーバリュー
・NoSQL On AWS
NoSQL:DynamoDB
・Cassandra: A Breif Introduction
Cassandraの基礎的な知識について
重要となる要素
クラスタ
分散の考え
ノード
コミットログ
memtable
:
AZと合わせて考える
・ライト・リクエスト・フロー
書き込み処理の流れについて
文があっている・図は間違ってる
・コンパクションについて
理解してなかったら読んでね
・リードリクエストフロー
読み込み処理の流れについて
・リソース要求
ストレージ
ネットワーク
メモリー
CPU
ストレージ
Disk IO大事 シーケンシャル+ランダム→SSD
etx4,etx3
ネットワーク
リクエスト処理、Gossip
1Gbpsが利用できるインスタンス
NW最適化オプション
メモリ
重要な設定
MAX_HEAP_SIZE
HEAP_NEW_SIZE
32G以上:ただし2.X
3.0はG1GCで変わってるかも
CPU
Redisだと、コアをみてくれないので1コアでインスタンス増やす
CassandraはCPUが4個以上あるインスタンス
ある程度のスペックを持ったインスタンスでクラスタのノード数を抑えることが
管理コストの観点からよい
・AWSでクラスタ設計する
AZ
VPC
ネットワーク
ストレージ
インスタンス
・そもそも、AZ,リージョンとは
リージョン:物理的場所
AZ:1つ以上のデータセンター
→マルチリージョン構成
・すにっち
自動的にセットしてくれる
単一リージョン
マルチリージョン:いくつのレプリカ持つか
・VPCの設計
VPC:サブネット
VPC:仮想プライベートクラウドサービス
・ENI(えらすてぃっく ねっとわーく いんたーふぇーす)の設計
Eth1,Eth2が簡単に作れる
IPを引き継いだノードが作れる
・ストレージ性能の設計
EBS →永続的
EC2 インスタンスストレージ
→VMが起動するところについている一時的ストレージ
NVMえSSDなど利用できる
→パターンを説明
要件に合致しているか
・インスタンスタイプ
どういうシナリオで、どういうサイジング
ノードの追加でスケーリング
・カサンドラをAWSにデプロイ
クラスタでどこまで高可用性を追求するか?
Writeを安全に失敗させるとか
オートスケーリングとNAT Gateway
→シードと、ノーシードで
セキュアなCassandra
→KMS
・Amazon CloudWatchの利用
→監視 一定の負荷になったら、Cassandraを追加
・マルチリージョン構成
通信
リクエスト処理 hinted handoff
・バックアップ
・カスタムAMIを作るメリット
・オンプレ環境から、CassandraクラスタをAWS上にゼロダウンタイムで移行
・AmazonEMRを利用したCassandra上の分析
・ネットワークコストの最適化
→NW転送量に課金
・カサンドラのベンチマーク
YCSB:注意点
・クイックスタート
DSEと、CloudFormationを使う
・AWSで作るメリット
セキュリティ
スケーラビリティ
各種サービス
・AWS Black Belt Online セミナー
AWS Black Belt VPC等で検索するとプレゼンへ
午前と午後の間にランチセッションがあったけど、
それについては、別エントリで