概要
前回はマスターのみでRedis Clusterを構築しました。
今回は冗長構成で構築し、可用性を確認します。
環境
- Redis 5.0.7
前回の続きで今度はRedis Clusterを構築してスケール性などを検証してみます。
Redis Clusterは以下の特徴を持ちます。
Clean Architecture に則ってレイヤ間をプラガブルにするためにインタフェースを使っていくと、テストのために各インタフェースのモックが欲しくなります。
そのモックを生成する際にgolang/mockを使用するわけですが、毎回
$ mockgen -source user.go -destination mock_user.go
とするのは手間です。また
など運用が辛くなりがちです。
かと言って「じゃあレイヤまるごと対象にしよう」とシェルスクリプトで
for file in $(ls ${SOME_LAYER_DIR} | grep -v "_test.go"); do mockgen -source ${SOME_LAYER_DIR}/${file} -destination mock/${SOME_LAYER_DIR}/${file} done
とかすると、
grep -v
の除外が増えていくといったこれまた運用が辛くなりがちです。
今回はgo generate
を活用してこの問題を解決します。
Cassandraはワイドカラム型のKVSでデータモデル図もネット上には色々上がっていますが、実際にはTable Schemaもあって普通のRDBのような表に見えます。
またkeyも
とたくさん出てきてややこしいです。
しかしCassandraを有効に活用するにはこの辺をきちんと理解しておかないといけないので、整理して分かりやすくしようと思います。
Cassandraのデータモデル図は以下のようになっています。
1つの行(Row)に複数の列(Column)が入っており、このColumnは最大で20億個まで増やせます。
ref: 4. The Cassandra Query Language - Cassandra: The Definitive Guide, 2nd Edition [Book]
続きを読むといったケースでVIP(仮想IP)を用いることで解決するのがVRRPです。
今回はそのVRRPを実現できるkeepalivedを紹介します。
VRRP(Virtual Router Redundancy Protocol)とはその名の通りルータを冗長化させるために考えられたプロトコルです。
複数のルータを外部からは仮想的な1つのルータとして扱うことでルータの冗長構成を実現します。
VIPを振られていた機器が故障してもVRRPによって別の機器にVIPが振られ直すので、クライアントは引き続きアクセスでき高可用性を担保できます。
続きを読むRedisの冗長構成は
の3種類がありますが、そのうちのReplicationについて説明します。
Replicationはmasterからデータをreplicaにコピーし、read系コマンドをreplicaから行うことでスケーラビリティを向上させる冗長構成です。
Replicationのシステム図は以下です。
続きを読む
以前↓の独自メトリクスを作る方法を紹介しました。
これはdirect instrumentation(直接計装)というやり方で、アプリケーションサーバ自体がstatsを持ちprometheusにデータを渡すやり方です。
今回はそうではなく別プロセスや別サーバ、ホストOSのstatsを取り込んでコレクタとして登録する方法を紹介します。
イメージ的には各stats情報をprometheusフォーマットに変換するproxyを作る感じです。