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で期待できるパフォーマンスの向上はわかりません。
これを解決するためのヒントまたはおそらく設定に感謝します。
ソケットパスを設定するだけでは機能しない場合があります。 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
と入力するだけです。機能している場合は、大量の出力が得られます。
ソケットは書き込み可能ではなく、世界中で実行可能である必要があると思います。 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',
)
);
/ 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
MemcachedのUNIXソケットを使用することによるパフォーマンスの向上をベンチマークしました。phpcliを使用したテストでは、UNIXソケットを使用する方が33%高速です。
Memcacheユーザーをwww-dataグループに追加し、UNIXソケットに775権限を付与することが重要であることがわかりました。これにより、phpハンドラーとmemcacheユーザーの両方が実行できるようになります。
ベンチマークと ここに記述 -を見つけることができますWordPressそれはDrupalおそらく権限の問題です。
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ローカルドメインソケットに接続する方法を理解するのにしばらく時間がかかりました。