web-dev-qa-db-ja.com

UNIXソケットを使用するようにmemcachedを設定するにはどうすればよいですか?

Debianでmemcachedを使用してデフォルトの11211ポートを使用することはできましたが、Unixソケットの設定は非常に困難でした。

私が読んだことから、memcache.socketを作成して追加する必要があることがわかります。

-s /path/to/memcache.socket
-a 0766

/etc/memcached.confにして、デフォルトの接続ポートとIPをコメント化します。

-p 11211 
-l 127.0.0.1

しかし、memcachedを再起動すると、Drupalサイトで内部サーバーエラーが発生します。

TCP/IPオーバーヘッドを回避してmemcachedの全体的なパフォーマンスを向上させるためにUNIXソケットを実装しようとしていますが、このTweakで期待できるパフォーマンスの向上はわかりません。

これを解決するためのヒントまたはおそらく設定に感謝します。

12
alfish

ソケットパスを設定するだけでは機能しない場合があります。 Memcachedは、PIDが書き込まれた後でも、ソケットを作成する前に特権を削除します。ソケットを/var/runに配置することは一般的ですが(例:mysqlが行うように)、そこに書き込むことができるのはrootだけなので、/var/run/memcachedを作成してそれを誰にも割り当てず、/var/run/memcached/memcached.sockをソケットパスとして設定します。 。 /tmpに書き込むこともできますが、その性質上、ゴミ箱に入れられる可能性があります。 /var/runに固定することは、少し永続的です。

Netcatを使用して接続することで、機能していることを確認できます。

nc -U /var/run/memcached/memcached.sock

空白のプロンプトでstatsと入力するだけです。機能している場合は、大量の出力が得られます。

12
Synchro

ソケットは書き込み可能ではなく、世界中で実行可能である必要があると思います。 PHPerrno = 32 Broken pipeを含む通知メッセージが表示される場合は、Memcachedアクセスマスクを0755に調整してください。

-s /path/to/memcache.socket
-a 0755

Drupalの Memcachedデーモン にTCP 0構成内。未設定のポートはデフォルトで11211、そしてソケット接続を混乱させます。

$conf += array(
    'memcache_servers' => array(
        'unix:///path/to/memcache.socket:0'  => 'default',
    )
);
8
emcconville

/ etc/default/memcachedに追加:

[ ENABLE_MEMCACHED = yes ] && install -d -o memcache -g www-data -m 0770 /var/run/memcached
# or use setfacl and whatever user/group you want
true # because set -e in init-scripts

/etc/memcached.confに追加:

-s /var/run/memcached/memcached.sock
-a 0666
6
Raph

MemcachedのUNIXソケットを使用することによるパフォーマンスの向上をベンチマークしました。phpcliを使用したテストでは、UNIXソケットを使用する方が33%高速です。

Memcacheユーザーをwww-dataグループに追加し、UNIXソケットに775権限を付与することが重要であることがわかりました。これにより、phpハンドラーとmemcacheユーザーの両方が実行できるようになります。

ベンチマークと ここに記述 -を見つけることができますWordPressそれはDrupalおそらく権限の問題です。

1
Mike Andreasen

KubernetesでAlpineコンテナーを使用している場合、ヘルスプローブを含むポッド仕様は次のようになります。

spec:
  containers:
    - name: memcached
      image: memcached:1.5-Alpine
      imagePullPolicy: "IfNotPresent"
      command:
      - memcached
      - --unix-socket=/tmp/memcached.sock
      - --unix-mask=0766
      - -m 64
      - -o modern
      - -v
...
      livenessProbe:
        exec:
          command:
          - /bin/sh
          - -c
          - 'echo "stats slabs" | nc local:/tmp/memcached.sock'
        initialDelaySeconds: 30
        timeoutSeconds: 5
      readinessProbe:
        exec:
          command:
          - /bin/sh
          - -c
          - 'echo "stats slabs" | nc local:/tmp/memcached.sock'
        initialDelaySeconds: 5
        timeoutSeconds: 1

適切な設定と、busybox経由でUNIXローカルドメインソケットに接続する方法を理解するのにしばらく時間がかかりました。

0
Greg Bray