正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Redisの設定

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

代替のローカルRedisインスタンスを使用する

Linuxパッケージインストールには、デフォルトでRedisが含まれています。GitLabアプリケーションを独自のローカルで実行されているRedisインスタンスに指定するには:

  1. /etc/gitlab/gitlab.rbを編集します:

    # Disable the bundled Redis
    redis['enable'] = false
    
    # Redis via TCP
    gitlab_rails['redis_host'] = '127.0.0.1'
    gitlab_rails['redis_port'] = 6379
    
    # OR Redis via Unix domain sockets
    gitlab_rails['redis_socket'] = '/tmp/redis.sock' # defaults to /var/opt/gitlab/redis/redis.socket
    
    # Password to Authenticate to alternate local Redis if required
    gitlab_rails['redis_password'] = '<redis_password>'
  2. 変更を反映するためにGitLabを再設定します:

    sudo gitlab-ctl reconfigure

バンドルされたRedisをTCP経由で到達可能にする

次の設定を使用して、Linuxパッケージで管理されているRedisインスタンスをTCP経由で到達可能にする場合は、これを使用します:

  1. /etc/gitlab/gitlab.rbを編集します:

    redis['port'] = 6379
    redis['bind'] = '127.0.0.1'
    redis['password'] = 'redis-password-goes-here'
  2. ファイルを保存し、変更を有効にするためにGitLabを再設定します:

    sudo gitlab-ctl reconfigure

Linuxパッケージを使用してRedis専用サーバーを設定する

GitLabアプリケーションとは別のサーバーにRedisを設定したい場合は、バンドルされたRedisをLinuxパッケージインストールから使用できます。

複数のRedisインスタンスで実行する

https://docs.gitlab.com/administration/redis/replication_and_failover/#running-multiple-redis-clustersを参照してください。

Redis Sentinel

https://docs.gitlab.com/administration/redis/replication_and_failover/を参照してください。

フェイルオーバー設定でRedisを使用する

https://docs.gitlab.com/administration/redis/replication_and_failover/を参照してください。

Google Cloud Memorystoreを使用する

Google Cloud Memorystore はRedis CLIENTコマンドをサポートしていません。デフォルトでは、SidekiqはCLIENTをデバッグ目的で設定しようとします。これは、次の設定で無効にできます:

gitlab_rails['redis_enable_client'] = false

Redis接続数をデフォルトより増やす

デフォルトでは、Redisは10,000のクライアント接続のみを受け入れます。10,000を超える接続が必要な場合は、maxclients属性をニーズに合わせて設定してください。maxclients属性を調整すると、fs.file-max (sysctl -w fs.file-max=20000など) のシステム設定も考慮する必要があることに注意してください。

redis['maxclients'] = 20000

RedisのTCPスタックをチューニングする

次の設定は、より高性能なRedisサーバーインスタンスを有効にするためのものです。tcp_timeoutは、Redisサーバーがアイドル状態のTCP接続を終了するまでに待機する秒単位の値です。tcp_keepaliveは、通信がない場合にクライアントへのTCP ACKの秒単位で調整可能な設定です。

redis['tcp_timeout'] = "60"
redis['tcp_keepalive'] = "300"

ホスト名からIPをアナウンスする

現在、Redisでホスト名を有効にする唯一の方法は、redis['announce_ip']を設定することです。ただし、これはRedisインスタンスごとに一意に設定する必要があります。announce_ip_from_hostnameは、これをオンまたはオフにするためのブール値です。ホスト名を動的にフェッチし、hostname -fコマンドからホスト名を推測します。

redis['announce_ip_from_hostname'] = true

RedisキャッシュインスタンスをLRUとして設定する

複数のRedisインスタンスを使用すると、RedisをLeast Recently Usedキャッシュとして設定できます。これはRedisキャッシュ、レート制限、およびリポジトリキャッシュインスタンスにのみ行うべきです。Redisキュー、共有状態インスタンス、およびtracechunksインスタンスは、永続的であると予想されるデータ(Sidekiqジョブなど)を含むため、LRUとして設定すべきではありません。

メモリ使用量を32 GBに制限するには、次を使用できます:

redis['maxmemory'] = "32gb"
redis['maxmemory_policy'] = "allkeys-lru"
redis['maxmemory_samples'] = 5

Secure Sockets Layer (SSL) を使用する

RedisをSSLの背後で実行するように設定できます。

RedisサーバーをSSLの背後で実行する

  1. RedisサーバーをSSLの背後で実行するには、/etc/gitlab/gitlab.rbに次の設定を使用できます。可能な値については、redis.conf.erbのTLS/SSLセクションを参照してください:

    redis['tls_port']
    redis['tls_cert_file']
    redis['tls_key_file']
  2. 必要な値を指定したら、変更を有効にするためにGitLabを再設定します:

    sudo gitlab-ctl reconfigure

一部のredis-cliバイナリは、TLS経由でRedisサーバーに直接接続するためのサポートが組み込まれていません。redis-cli--tlsフラグをサポートしていない場合は、デバッグ目的でredis-cliを使用してRedisサーバーに接続するために、stunnelのようなものを使用する必要があります。

GitLabクライアントをSSL経由でRedisサーバーに接続させる

SSLに対するGitLabクライアントサポートをアクティブにするには:

  1. /etc/gitlab/gitlab.rbに次の行を追加します:

    gitlab_rails['redis_ssl'] = true
  2. 変更を反映するためにGitLabを再設定します:

    sudo gitlab-ctl reconfigure

SSL証明書

RedisにカスタムSSL証明書を使用している場合は、それらを信頼された証明書に追加してください。

コマンドの名前変更

デフォルトでは、KEYSコマンドはセキュリティ対策として無効になっています。

このコマンドやその他のコマンドを難読化または無効にしたい場合は、/etc/gitlab/gitlab.rbredis['rename_commands']設定を次のように編集してください:

redis['rename_commands'] = {
  'KEYS': '',
  'OTHER_COMMAND': 'VALUE'
}
  • OTHER_COMMANDは変更したいコマンドです
  • VALUEは次のいずれかである必要があります:
    1. 新しいコマンド名。
    2. コマンドを完全に無効にする''

この機能を無効にするには:

  1. /etc/gitlab/gitlab.rbファイルでredis['rename_commands'] = {}を設定します
  2. sudo gitlab-ctl reconfigure を実行

レイジーフリー

Redis 4ではレイジーフリーが導入されました。これにより、大きな値を解放する際のパフォーマンスが向上します。

この設定はfalseにデフォルトします。これを有効にするには、次を使用できます:

redis['lazyfree_lazy_eviction'] = true
redis['lazyfree_lazy_expire'] = true
redis['lazyfree_lazy_server_del'] = true
redis['replica_lazy_flush'] = true

スレッドI/O

Redis 6ではスレッドI/Oが導入されました。これにより、複数のコアにわたって書き込みをスケールすることができます。

この設定はデフォルトで無効になっています。これを有効にするには、次を使用できます:

redis['io_threads'] = 4
redis['io_threads_do_reads'] = true

クライアントタイムアウト

デフォルトでは、Redis用のRubyクライアントは、接続、読み取り、および書き込みのタイムアウトに1秒のデフォルトを使用します。ローカルネットワークのレイテンシーを考慮して、これらの値を調整する必要がある場合があります。たとえば、Connection timed out - user specified timeoutエラーが表示される場合は、connect_timeoutを上げる必要がある場合があります:

gitlab_rails['redis_connect_timeout'] = 3
gitlab_rails['redis_read_timeout'] = 1
gitlab_rails['redis_write_timeout'] = 1

プレーンテキストストレージなしで機密性の高い設定をRedisクライアントに提供する

詳細については、設定ドキュメントに記載された例を参照してください。

Redisの代わりにValkeyを使用する

Valkeyは、Redisのドロップイン代替として使用できるRedis互換のキーと値のストアです。Valkeyは、Redis OSS 7.2およびすべての以前のオープンソースRedisバージョンと互換性があります。

Valkeyを使用する場合:

  • サービス名はredisのままです。サービスを管理するにはgitlab-ctl restart redisを使用し、gitlab-ctl restart valkeyは使用しません。

  • ログファイルは/var/log/gitlab/redis/に書き込まれ、別のvalkeyディレクトリには書き込まれません。

  • データディレクトリは/var/opt/gitlab/redis/のままです。

  • 設定ファイルはredis.confのままです。

  • gitlab-ctlツールは、Redisとのやり取りに引き続きredis-cliを使用します。

  • valkey-cliをトラブルシューティングに使用する場合は、redis-cliと同じソケット、ホスト、およびポートを使用します:

    sudo /opt/gitlab/embedded/bin/valkey-cli -s /var/opt/gitlab/redis/redis.socket

RedisからValkeyへの移行の詳細については、Valkey移行ドキュメントを参照してください。

Valkeyにスイッチする

Redisの代わりにValkeyを使用するには:

  1. /etc/gitlab/gitlab.rbを編集します:

    redis['backend'] = 'valkey'
  2. 変更を反映するためにGitLabを再設定します:

    sudo gitlab-ctl reconfigure

redis['backend']valkeyに設定されている場合:

  • Redisサービスはredis-serverの代わりにvalkey-serverを使用します。
  • Sentinelサービスはredis-sentinelの代わりにvalkey-sentinelを使用します。
  • その他のすべてのRedis設定 (ポート、パスワード、パスなど) は同じままです。

サービス管理

後方互換性とシームレスな移行を確保するために、バックエンドとしてRedisまたはValkeyのどちらを使用するかに関わらず、サービス構造は一貫性を保ちます:

  • サービス名はredisです。サービスを管理するにはgitlab-ctl restart redisを使用します。

  • ログファイルは/var/log/gitlab/redis/に書き込まれます。

  • データディレクトリは/var/opt/gitlab/redis/です。

  • 設定ファイルはredis.confです。

  • gitlab-ctlコマンドは、構成されたバックエンドに基づいて、適切なCLIツール(redis-cliまたはvalkey-cli)を使用します。

  • トラブルシューティングには、アクティブなバックエンドを自動的に検出するラッパースクリプトを使用してください:

    sudo gitlab-redis-cli

RedisからValkeyへの移行の詳細については、Valkey移行ドキュメントを参照してください。

トラブルシューティング

x509: certificate signed by unknown authority

このエラーメッセージは、SSL証明書がサーバーの信頼された証明書のリストに適切に追加されていないことを示唆しています。これがイシューであるかどうかを確認するには:

  1. /var/log/gitlab/gitlab-workhorse/currentのWorkhorseログファイルを確認してください。

  2. 次のようなメッセージが表示される場合:

    2018-11-14_05:52:16.71123 time="2018-11-14T05:52:16Z" level=info msg="redis: dialing" address="redis-server:6379" scheme=rediss
    2018-11-14_05:52:16.74397 time="2018-11-14T05:52:16Z" level=error msg="unknown error" error="keywatcher: x509: certificate signed by unknown authority"

    最初の行には、Redisサーバーのアドレスとともにスキームとしてredissが表示されるはずです。2行目は、このサーバーで証明書が適切に信頼されていないことを示しています。前のセクションを参照してください。

  3. SSL証明書がこれらのトラブルシューティングステップによって機能していることを確認してください。

NOAUTH認証が必要です

Redisサーバーは、コマンドが受け入れられる前にAUTHメッセージを介して送信されたパスワードを必要とする場合があります。NOAUTH Authentication requiredエラーメッセージは、クライアントがパスワードを送信していないことを示唆しています。GitLabログファイルがこのエラーのトラブルシューティングを行うのに役立つ場合があります:

  1. /var/log/gitlab/gitlab-workhorse/currentのWorkhorseログファイルを確認してください。

  2. 次のようなメッセージが表示される場合:

    2018-11-14_06:18:43.81636 time="2018-11-14T06:18:43Z" level=info msg="redis: dialing" address="redis-server:6379" scheme=rediss
    2018-11-14_06:18:43.86929 time="2018-11-14T06:18:43Z" level=error msg="unknown error" error="keywatcher: pubsub receive: NOAUTH Authentication required."
  3. /etc/gitlab/gitlab.rbで指定されているRedisクライアントのパスワードが正しいことを確認してください:

    gitlab_rails['redis_password'] = 'your-password-here'
  4. Linuxパッケージが提供するRedisサーバーを使用している場合は、サーバーが同じパスワードを持っていることを確認してください:

    redis['password'] = 'your-password-here'

Redis接続リセット (ECONNRESET)

GitLab Railsログファイル (/var/log/gitlab-rails/production.log) でRedis::ConnectionError: Connection lost (ECONNRESET)が表示される場合、これはサーバーがSSLを期待しているにもかかわらず、クライアントがそれを使用するように設定されていないことを示している可能性があります。

  1. サーバーが実際にSSL経由でポートをリッスンしていることを確認してください。例:

    /opt/gitlab/embedded/bin/openssl s_client -connect redis-server:6379
  2. /var/opt/gitlab/gitlab-rails/etc/resque.ymlを確認してください。次のようなものが表示されるはずです:

    production:
      url: rediss://:mypassword@redis-server:6379/
  3. rediss://の代わりにredis://が存在する場合、redis_sslパラメータが適切に設定されていないか、再設定ステップが実行されていない可能性があります。

CLI経由でRedisに接続する

トラブルシューティングのためにRedisに接続する場合、次を使用できます:

  • Unixドメインソケット経由のRedis:

    sudo /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
  • TCP経由のRedis:

    sudo /opt/gitlab/embedded/bin/redis-cli -h 127.0.0.1 -p 6379
  • 必要に応じてRedisに認証するためのパスワード:

    sudo /opt/gitlab/embedded/bin/redis-cli -h 127.0.0.1 -p 6379 -a <password>