Redisのトラブルシューティング
HAのセットアップが期待通りに機能するためには、多くの可動部分に注意する必要があります。
以下のトラブルシューティングを行う前に、ファイアウォールのルールを確認してください:
- Redisマシン
- でTCP接続を受け付けます。
6379
- でTCP経由で他のRedisマシンに接続します。
6379
- でTCP接続を受け付けます。
- センチネル・マシン
- でTCP接続を受け付けます。
26379
- でTCP経由で他のSentinelマシンに接続します。
26379
- でTCP経由でRedisマシンに接続します。
6379
- でTCP接続を受け付けます。
Redisレプリケーションのトラブルシューティング
redis-cli
アプリケーションを使用して各サーバーに接続し、以下のようにinfo replication
コマンドを送信することで、すべてが正しいかどうかを確認できます。
/opt/gitlab/embedded/bin/redis-cli -h <redis-host-or-ip> -a '<redis-password>' info replication
Primary
Redis に接続すると、接続されている Redis の数replicas
が表示され、それぞれのリストと接続の詳細が表示されます:
# Replication
role:master
connected_replicas:1
replica0:ip=10.133.5.21,port=6379,state=online,offset=208037514,lag=1
master_repl_offset:208037658
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:206989083
repl_backlog_histlen:1048576
replica
の場合、プライマリ接続の詳細と、up
またはdown
が表示されます:
# Replication
role:replica
master_host:10.133.1.58
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
replica_repl_offset:208096498
replica_priority:100
replica_read_only:1
connected_replicas:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
センチネルのトラブルシューティング
Redis::CannotConnectError: No sentinels available.
のようなエラーが表示された場合、設定ファイルに何か問題があるか、この問題に関連している可能性があります。
redis['master_name']
、redis['master_pasword']
、センチネルリンパ節に定義した値と同じ値を定義していることを確認する必要があります。
Redisコネクタredis-rb
、Sentinelで動作する方法は少し直感的ではありません。 omnibusでは複雑さを隠そうとしていますが、それでもいくつかの余分な設定が必要です。
コンフィギュレーションが正しいことを確認します:
- GitLabアプリケーションサーバーにSSH接続します。
-
Railsコンソールに入ります:
# For Omnibus installations sudo gitlab-rails console # For source installations sudo -u git rails console -e production
-
コンソールで実行します:
redis = Redis.new(Gitlab::Redis::SharedState.params) redis.info
この画面を開いたまま、以下のフェイルオーバーをシミュレートしてみてください。
-
プライマリRedisでフェイルオーバーをシミュレートするには、RedisサーバーにSSH接続して実行します:
# port must match your primary redis port, and the sleep time must be a few seconds bigger than defined one redis-cli -h localhost -p 6379 DEBUG sleep 20
-
そして最初のステップのRailsコンソールに戻って実行します:
redis.info
数秒の遅延(フェイルオーバー/再接続時間)の後、別のポートが表示されるはずです。
ソースからのインストールでバンドルされていない Redis のトラブルシューティング
GitLabでRedis::CannotConnectError: No sentinels available.
のようなエラーが発生した場合、設定ファイルに何か問題があるか、このアップストリームの問題に関連している可能性があります。
resque.yml
とsentinel.conf
が正しく設定されていることを確認する必要があります。そうしないとredis-rb
が正しく動作しません。
(sentinel.conf
) で定義したmaster-group-name
(gitlab-redis
) を GitLab (resque.yml
) のホスト名として使用する必要があります:
# sentinel.conf:
sentinel monitor gitlab-redis 10.0.0.1 6379 2
sentinel down-after-milliseconds gitlab-redis 10000
sentinel config-epoch gitlab-redis 0
sentinel leader-epoch gitlab-redis 0
# resque.yaml
production:
url: redis://:myredispassword@gitlab-redis/
sentinels:
-
host: 10.0.0.1
port: 26379 # point to sentinel, not to redis port
-
host: 10.0.0.2
port: 26379 # point to sentinel, not to redis port
-
host: 10.0.0.3
port: 26379 # point to sentinel, not to redis port
疑問がある場合は、RedisSentinelのドキュメントを読んでください。