Database on Kubernetesの現在地点
- HA,Replication and more -
2019/7/1
@tzkb
@tzkoba
ちょっと質問①
• あなたは(どちらかといえば)○○勢?
1. Kubernetes 勢
2. データベース勢
3. その他
ちょっと質問②
• 普段お使いのデータベースは?
1. Oracle Database
2. MySQL
3. PostgreSQL
4. その他
自己紹介
• 名 前 :Takahiro Kobayashi
• 勤務先 :SIer
• 出没場所 :Oracle、PostgreSQL、k8s関連に色々と
• キャリア :DB、ストレージを中心にインフラ
• 好きなもの:速いDB 、太い帯域、小さいレイテンシ
DB on Kubernetes、色々やってます。
•CloudNativeDays Tokyo 2019で、
Cloud Native Storageが開く
Database on Kubernetesの未来
というタイトルで登壇予定。
• と を近付けたい!
今日話すこと
• Cloud Nativeなデータベース??
• Database on Kubernetesのモチベーション
• DBクラスタを扱う際の基礎知識
• DB on K8sのリファレンス・アーキテクチャ
• 今後のDatabase on Kubernetes
Cloud Nativeなデータベース?
Compute
Storage
Managed
Amazon Aurora
Amazon Redshift
Amazon RDS
on Cloud on Kubernetes
本日のTOPIC
Kubernetes is 何?
Node
Pod
Node
Pod
Node
Pod
Pod Pod
• コンテナ・オーケストレーションのプラットフォーム。
yaml 特徴として、
• 宣言的設定
• 自己修復
• Immutable
あれ?
DB向きじゃない?
Database on Kubernetesのモチベーション
• Auroraはすごい!
– 3つのAZ、6本のディスクに冗長化
– 再起動でもキャッシュ消えない!
– No checkpoint (!?)
– Vacuumも賢くなってる
– 詳しくはDeep Diveを参照
• でも、設計思想はこんな感じ。
• あれ?k8sで出来そうじゃない?
DBの高可用性/スケーラブルな構成とは
HA
(master/cold-standby)
1
Sharding
(multi-master)
Replication
(master/hot-standby)
2以上
インスタンス数 データ冗長化
2以上
Shared
Disk
Log
Shipping
(基本的に)
なし
×
スケールアウト
Read
Read/
Write
Failover
(Fencing)
障害時切替
Promotion
(Election)
---
DBクラスタの基礎知識① HA
<< 特徴 >>
• 障害検知/切替はLinux-HA
• 生死監視の専用NW(二重化)
• データは共有ストレージで冗長化
<<避けるべき最悪ケース>>
• 複数インスタンスでストレージに
書き込みをしてしまうこと
<<対策>>
• Fencing:強制的なリソース解放
VIP
Linux-HA
Controller Controller
【PostgreSQL on Linux-HA】
Fencingとは
• リソースをフェンスで囲うこと
=Fencing
<< 状態不明なマスターが発生したら>>
① 強制的にノードの電源落とす
i. プロセスを確実に停止
ii. ストレージのマウントを外す
iii. VIPを外す
② その上で別ノードでリソースを
獲得して、Masterを起動
VIP
Linux-HA
Controller Controller
【PostgreSQL on Linux-HA】
DBクラスタの基礎知識② Replication
<< 特徴 >>
• マスターはRead/Write、
スレーブはReadのみを処理
• 障害検知/切替は別ツールが必要
• データはWAL転送で冗長化
<<避けるべき最悪ケース>>
• 複数マスタが選出されること
<<対策>>
• リーダー選出:常に1台のみ
WAL
【PostgreSQL Streaming Replication】
リーダー選出とは
• 複数候補から常に1台のマスター
を選出
• 元マスターが復帰後もスレーブに
なっていることを通知する
<<状態不明なマスターが発生したら>>
① 残ったスレーブから1台の
リーダーを選出
② 選出されたらマスターへ昇格
③ 復帰ノードはスレーブに
【PostgreSQL Streaming Replication】
WAL
データは最新。
リーダーに!
他はスレーブ。
Database is Hard!!
DB on K8s構成のサマリ
(1)HA構成 Rookパターン
– 共有ディスク:Rook/Ceph【分散ストレージ】
(2)HA構成
– 共有ディスク:LINSTOR/DRBD【ディスク冗長化】
(3)Replication構成:
– リーダー選出:Kubernetes(etcd)を利用
DB on K8sの構成(1) HA - Rook -
<< 特徴 >>
• DBもストレージも全て
K8sで管理するHA
• 共有ディスクはCeph
• kube-fencingでNode
障害時のFencing
<< 課題 >>
• 複雑すぎるCeph
• ネットワーク越しのIO
Replicas:1
kube-fencing
(参考)Fencingがないと
Replicas:1
• ノード障害時に
StatefulSetのポッドが
フェイルオーバしない。
<< 原因 >>
• 仕様です。
• 以下設定でFOするが、
shutdown abortとなる
ので非推奨。
TerminationGracePeriodSeconds=0
DB on K8sの構成(2) HA - DRBD -
<< 特徴 >>
• DBもストレージも全て
K8sで管理するHA
• 共有ディスクはDRBD
• シンプルな構成
• ReadはローカルIO、
Writeは他ノードに伝播
<< 課題 >>
• やや煩雑なデプロイ
Replicas:1
kube-fencing
DB on K8sの構成(3) Replication
<< 特徴 >>
• proxy:接続管理
• keeper:レプリケー
ションを構成
• sentinel:リーダー選出
• 共有リソースなし
<< 課題 >>
• コンポーネントの多さ
• Readの分散不可
proxy proxy proxy
keeper keeper keeper
sentinel sentinel sentinel
ここまでで分かったこと
• 分散システムであるK8sでも、注意点はあるものの
DBクラスタを動かす部品が揃ってきている。
• でも、各種OSSを組み合わせたり、運用に必要な機能
(スナップショットやクローンなど)は弱い?
⇒Operatorで補完できるよ!
• あれ?Shardingはどうなった??
⇒Citusとかあるよ!MySQLなら だよ。
今後のDatabase on Kubernetes
• ReplicationやShardingなど、DBMSの機能やオプション
をK8sで動かす形の進化は今後も続く。
• Operatorによって、DBAが行ってきた作業の自動化も
進んでいく。
• しかし、それで終わりではない。
• Aurora/Hyperscaleに見られるような、DBMSの機能を
各レイヤにオフロードする、進歩的なDBクラスタが
構築できるはず。その一端を担うのはCSIかもしれない。
Azure HyperscaleAWS Aurora(PostgreSQL)
RDBMSの機能を分割した例
SQL
Transactions
Caching
Storage
Logging
Storage
Logging
Storage
Logging
CPU
Memory
Cache(SSD)
Page
Cache(SSD) Log
• DB on K8sの最終目的地はここかもしれない。

Database on Kubernetes - HA,Replication and more -

Editor's Notes

  • #3 Dear DirectPoll User, Thanks for creating a poll with us. Please keep this e-mail in case you want to edit your poll or re-run it at a later time. -------- Your Cockpit link -------- https://directpoll.com/c?XDVhEtJcih8Txujb8kV4OAPpGSLtJV3eE This link will always bring you back to your poll cockpit. Make sure not to lose this link. Losing it means your poll is lost. Please note that the poll expires 30 days after you last saved your poll. You'll receive a notification before this happens. Just save your poll again to get another 30 days. -------- Vote link for your audience -------- http://etc.ch/7P8A Forward this link to your audience and ask them to load it on their (mobile) devices. We're offering a QR code too to assure an easy access for your voters. The QR code will be shown on the result page before the poll is started. https://directpoll.com/v?XDVhEtJcih8Txujb8kV4OAPpGSLte1gD This is the actual full link to your voting-page. Use this if you setup your own redirect for your audience. -------- Result link -------- https://directpoll.com/r?XDbzPBd3ixYqg8l9NMhw7Htg5hYDqPrMv7uMkAbJjB This link will always show the real-time results of the current question. You can use it to display the results on a big screen to let your audience enjoy the live-experience of answers coming in. The result-screen shows the QR code before the poll is started. This guarantees easy access for your voters. -------- Don't hesitate to contact us at info@directpoll.com if you have any additional questions or feedback. Thanks for using DirectPoll - a service brought to you by Netcetera
  • #10 ・DeepDiveは読んだほうがよい。 ・「スケールアウト、セルフヒーリング、分散サービスの活用」、逆にこれができるならk8s使ってDBのせても良さそう。 ・Auroraの特徴、Multi-AZ(6本のディスク書込みで冗長化)、キャッシュレイヤの分離(DBリスタートでもキャッシュ消えない、これk8sでできないかな)、トランザクションログも分離しcheckpointがないという脅威の構造!
  • #13 ・iLO(HP)、DRAC(DELL)などのマネジメントボード経由で、外部から電源の強制断を走らせるなど。 ・クラウドでもaws-cliなどで同じことができる。
  • #20 ・LINSTORはプロビジョニングとアタッチを担当するコンテナ化されたモジュール。 ・小規模であれば十分な可用性、冗長性があり、必要十分な複雑度
  • #21 ・分散システムに気を使っているが、運用管理にはポスグレの基本的知識が必要。 ・オペレータやCRDを使っていないなど、旧世代的な設計
  • #24 https://blog.engineer-memo.com/2019/06/02/sql-database-hyperscale-%e3%81%ae%e6%a7%8b%e6%88%90%e3%82%84%e7%89%b9%e5%be%b4%e3%82%92%e5%ad%a6%e7%bf%92%e3%81%99%e3%82%8b/
  • #25 ・分散システムに気を使っているが、運用管理にはポスグレの基本的知識が必要。 ・オペレータやCRDを使っていないなど、旧世代的な設計
  • #26 ・https://github.com/cncf/toc/blob/master/DEFINITION.md#%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88