UNIXソケットを使用するようにmemcachedをセットアップする方法は?


12

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

私が読んだものから、私は作成しmemcache.socketて追加する必要があることを知っています:

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

/etc/memcached.confし、デフォルトの接続ポートアウトコメントやIP、すなわち

-p 11211 
-l 127.0.0.1

ただし、me​​mcachedを再起動すると、Drupalサイトで内部サーバーエラーが発生します。

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

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


memcachedが実行されていると仮定して、ソケットを使用するようにDrupalを構成しましたか?
cjc

はい、Drupalはmemcachedを使用するように設定されており、ポート11211を使用すると正常に動作します。
alfish12年

Drupalを実行しているユーザーは/ path / to /を完全に読み取り可能/実行可能ですか?ソケットファイル自体を意味するものではありません。Drupalユーザーは、ディレクトリ階層を下ることもできる必要があります。
cjc

回答:


12

ソケットパスを設定するだけでは機能しないことがあります。Memcachedは、PIDを書き込んだ後でも、ソケットを作成する前に特権をドロップします。ソケットを入れることは一般的ですが/var/run(たとえばmysqlが行うように)、そこに書き込むことができるのはrootだけなので、それを作成/var/run/memcachedして誰にもchownしてから/var/run/memcached/memcached.sock、ソケットパスとして設定します。書き込みも/tmp機能しますが、その性質上、ゴミになる可能性があります。/var/run固定することはもう少し永続的です。

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

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

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


1
これは他の答えではなく、私にとってはうまくいきました。明らかにnobody、適切な権限なしにルート所有フォルダに書き込むことはできません。
ダニエルW. 14

8

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

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

また、DrupalのMemcachedデーモン0構成にTCPポートを持っていることを確認します。設定されていないポートはデフォルトで11211になり、ソケット接続を混乱させます。

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

読み取り/書き込みが必要なため、マスクは766または666にする必要があります。
アーレスリー

6

/ 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

1

memcached unixソケットを使用した場合のパフォーマンスの向上をベンチマークしました。phpcliを使用したテストで、unixソケットを使用する方が33%高速です。

memcacheユーザーをwww-dataグループに追加し、unixソケット775のアクセス許可を与えることが重要であることがわかりました。これにより、phpハンドラーとmemcacheユーザーの両方が実行できます。

ベンチマークと記事こちらで確認できます-WordPress向けですが、権限の問題である可能性が高いため、Drupalでも機能するはずです。


0

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

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ローカルドメインソケットに接続する方法を見つけました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.