[Go] Goからredis-clusterにつないでみる

お世話になっております。
しゃまとんです。

今回はredisをクラスタリングしてGoから接続してみるやつです。
個人ではなかなか使う機会がないですが、負荷分散につかう手法みたいなものですね。

ちょっと古めに記事ですが、最初に説明がかかれています。
Redisってなんじゃ?(レプリケーションとクラスタリング)

万が一、億が一ヒットした場合にしておくと慌てないです済むかなとおもったので理解しておいて損はないかなーと思いやってみることにしました。(実はWEB DB PRESSのKubernetes特集がきっかけでもあります)

とりあえずクラスタをつくるには複数台Redisが起動している必要があります。
今回もサクッと環境を捨てられるDockerを利用して試してみましょう。

まずは検証用コンテナとして適当なOSイメージをもってきてコンテナを起動しましょう
(例ではUbuntuを使っています。)

コンテナを立ち上げたら、redisをインストールします。
Ubuntuでデフォルトでインストールできるredisのバージョンが古いため、ソースから取得しました。(最新はこちらを確認)

次に複数立ち上げるために、設定ファイルを作成します。
クラスタリングには最低6つ(master,slaveが3つずつ)必要なので、6つファイルをつくります。1つの例はこちら。

6ファイル作ったら、ファイルを指定して実行していきます。

次にこれをクラスタリングしていきます。
今回はクラスタを半自動的に作ってくれるredis-trib.rbを使うことにします。Rubyが使える必要があるので、合わせてインストールしていきます。

準備が出来たのでクラスタを作ってみましょう。
下記コマンドを実行して返答すれば完成です。

一応、確認してみましょう。
コマンドを別の場所から実行するとRedirectしているのがわかります。

あとはGoから確認してみましょう。
乱暴ですが下記コマンドでまとめて Goを使えるようにします。

サンプルコードはこちらになります。(今回もgo-redisを使います)

実行すると、値が取得できていますね。

ちなみにこのときNewClusterClientでないとうまく取得することができません。クラスタを生成してない場合は逆もしかりですね。
前準備のほうが全然長くなってしまいましたが、以上です。