KubenetesでSentinelを使ってRedis Clusterを立ち上げる




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

Sentinelとは

SentinelとはRedisクラスターを簡単に構築することができるソフトウェアです。マスター・スレーブ構成になっており、マスターの自動昇格も行ってくれる優れものです。

Kubernetesでの構築

この手順は 「入門Kubernetes」に記載されているものを実践しています。

ConfigMapの作成

まずはRedisのマスター用の設定ファイルmaster.confを記述します。

次にスレーブ用の設定ファイルslave.confを記述します。

最後にsentinel用の設定ファイルsentinel.confを記述します。

コンテナ内でRedisを起動するときのスクリプトinit.shです。

Redisスレーブがマスターに接続できるまで監視して、sentinelを起動するスクリプトsentinel.shです。

上記の設定ファイルとスクリプトをまとめたConfigMapを作成します。redis-configという名前をつけています。

ConfigMapの確認を行います。

Serviceの作成

PodへアクセスするためのServiceの設定redis-service.yamlです。

上記設定からServiceを作成します。

Serviceの確認を行います。

StatefulSetの作成

StatefulSetの設定redis.yamlです。

StatefulSetの作成を行います。

StatefulSetの確認を行います。

Sentinelの動作確認

Redisスレーブに対してコマンドを実行し、seintinelのRedisマスタのIPを確認します。

ここでRedisスレーブに対して接続ができなかったのでredis-0コンテナのログを確認します。

sentinelの設定がよくなさそう。。。ここで詰んでしまいRedisクラスタの動作確認ができてません。

だれか同じような人いたら解決策をおしえてほしいです!

おすすめ書籍

Dockerの使い方から説明されているので初心者の方も安心して学べる書籍です。

Kubernetesに関してはPod, Service, Deploymentなどを順を追って説明し、実際に動かすところまでを解説しているので非常に実践的な内容となっています。

これからKuebernetesを使ってサービスを開発してみたい方にとって最初のよい手助けとなると思います。是非読んでみてください。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



1 個のコメント

  • コンテナ側から見ると error メッセージのようにread onlyでmountされています。

    /dev/sda1 on /redis-config type xfs (ro,relatime,attr2,inode64,noquota)

    解決方法としては、configmapをwriteできるように登録するか(できるかは調べていないです)
    上記の内容で指定されたsentinel.confの内容を持つコンテナのイメージをbuildしてあげるのが良いかと思います。
    とりあえず以下は私がbuildしたものになります。
    https://hub.docker.com/r/salvare000/redis-cluster/
    Dockerfileの内容は以下の感じ

    # cat Dockerfile
    FROM redis:3.2.7-alpine

    ADD sentinel.conf /etc/redis-sentinel.conf

    あとは、sentinel.sh等の/redis-config/sentinel.conf を参照しているpathを配置したpathに変えると
    とりあえず起動できました。
    2回作成したところ、3回程度restartするnodeがあったので、apply後少し時間がかかるようです。

    # kubectl get pod
    NAME READY STATUS RESTARTS AGE
    mysql-pod 1/1 Running 0 19d
    rabbitmq-79d69c478f-8kkrr 1/1 Running 0 12d
    rabbitmq-79d69c478f-v8bjd 1/1 Running 0 12d
    rabbitmq-79d69c478f-w5fv5 1/1 Running 0 12d
    redis-0 2/2 Running 3 7m
    redis-1 2/2 Running 0 6m
    redis-2 2/2 Running 0 6m


    # kubectl -c sentinel logs redis-0
    ping: bad address 'redis-0.redis'
    Waiting for server
    Waiting for server
    ping: bad address 'redis-0.redis'
    ping: bad address 'redis-0.redis'
    Waiting for server
    PING redis-0.redis (10.244.1.42): 56 data bytes
    64 bytes from 10.244.1.42: seq=0 ttl=64 time=0.027 ms

    --- redis-0.redis ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 0.027/0.027/0.027 ms
    _._
    _.-
    __ ''-._
    _.-
    . _. ''-._ Redis 3.2.7 (00000000/0) 64 bit
    .-
    .-. \/ _.,_ ''-._
    ( ' , .-
    | , ) Running in sentinel mode
    |
    -._-...- __…-.-._|’ _.-'| Port: 26379
    |
    -._ ._ / _.-' | PID: 12
    -._ -._ -./ _.-‘ _.-‘
    |-._-._ -.__.-' _.-'_.-'|
    |
    -._-._ _.-'_.-' | http://redis.io
    -._ -._-.__.-‘_.-‘ _.-‘
    |-._-._ -.__.-' _.-'_.-'|
    |
    -._-._ _.-'_.-' |
    -._ -._-.__.-‘_.-‘ _.-‘
    -._ -.__.-‘ _.-‘
    -._ _.-'
    -.__.-‘

    12:X 09 Aug 00:18:27.515 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    12:X 09 Aug 00:18:27.522 # Sentinel ID is d4af3163134a6626a9cdf799edd30576e9ed02c2
    12:X 09 Aug 00:18:27.522 # +monitor master redis 10.244.1.42 6379 quorum 2
    12:X 09 Aug 00:18:27.522 * +slave slave 10.244.3.44:6379 10.244.3.44 6379 @ redis 10.244.1.42 6379
    12:X 09 Aug 00:18:27.524 * +slave slave 10.244.2.41:6379 10.244.2.41 6379 @ redis 10.244.1.42 6379
    12:X 09 Aug 00:18:28.112 * +sentinel sentinel ed7174fead22ecef3624a6fb5109f51aa0a1bb90 10.244.3.44 26379 @ redis 10.244.1.42 6379
    12:X 09 Aug 00:18:28.333 * +sentinel sentinel 92b9eba18e8337a04b48089fbe258058e337f36d 10.244.2.41 26379 @ redis 10.244.1.42 6379
    `

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です