LoginSignup
6
9

More than 5 years have passed since last update.

#2 PostgreSQL on Kubernetesが目指すところ

Last updated at Posted at 2018-12-01

本記事はPostgreSQL on Kubernetes Advent Calendar 2018の2日目です。
昨日は「データベース on Kubernetesの現在地点」ということで、Kubernetesの現状とデータベースの対応状況を整理しました。
本日は今回主題として取り上げるPostgreSQL on Kubernetesの具体的構成と目指すところについて書きたいと思います。

TL;DR

  • PostgreSQL on Kubernetesって複雑すぎない?
  • データの冗長化はストレージレイヤで。
  • PostgreSQL on Rookの紹介。

問題点:現在のPostgreSQL on Kubernetes

昨日は事例としてStolonをご紹介しました。
同様の事例として、Crunchy DataのPostgreSQL on Kubernetesの事例があります。

これらはいずれもPostgreSQLのレプリケーション機能を用いて、1台のmasterと2台以上のstandbyをKubernetes上に展開しています。
これらの構成のメリットとして、以下があげられるでしょう。

  • 複数DBインスタンスによる耐障害性の確保
  • standbyのスケールアウトによる読み取り性能の向上

しかし、一方で問題点として複雑な構成(=障害ポイントの増加)とそれによる運用性の低下があげられると思います。

Vitessの例も挙げましたが、Youtubeほどスケールさせる必要は多くのシステムでないでしょうし、リードレプリカさえ必要ないというシステムも多いでしょう。

PGEconsが提示するPostgreSQLの代表的な構成

少し古い資料になりますが、PGEconsという団体が「PostgreSQLの代表的な構成」を整理しています。

この中でまとめられているのは、大きく分けて以下の5つのパターンになります。

  1. シングルサーバ構成
  2. HAクラスタ構成(共有ストレージ方式)
  3. HAクラスタ構成(シェアードナッシング方式)
  4. ストリーミングレプリケーション
  5. pgpoolやSlony-Iを利用したソフトウェアレプリケーション

StolonはいわばKubernetesと上記の4.を合わせた構成です。
PostgreSQLのレイヤでデータの冗長性を担保しています。

しかし、より低レイヤで冗長性を担保し、よりシンプルな構成を取ることは出来ないのでしょうか?
つまり、上記の2.や3.とKubernetesを掛け合わせた構成は取れないのでしょうか。

PostgreSQL on Rookの実装

今回、Kubernetes上にシェアードナッシング型の分散ストレージであるRookを稼動させ、それをPostgreSQLのストレージとして利用する方式を検討してみました。

pg-rook-archi.PNG

上図にあるようにPostgreSQL自体は単純なStatefulSetとしてスケジューリングされ、他にoperatorなどを必要としません。
詳細は後日説明しますが、RookによってデプロイされたCeph RBDのボリュームをPVとしてマウントすることで、データの冗長性を担保します。

RookやCephを含むこと自体がシンプルなのか?という疑問はあると思いますが、複数DBインスタンス間でプロモーション時の調停が不要になるなど、メリットは大きいと考えます。

もちろん、現時点ではジャストアイデアで実際の稼動イメージを抱くには検証が必須ですが、それを今回のAdvent Calenderで少しずつ紹介していければと思います。

まとめ

昨日に引き続き、今回も概念的な話が多くなりました。
明日からは今回お話しする構成に必須の、Rookを稼動させる準備をしていきたいと思います。

よろしくお願いします。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9