如何设置memcached以使用unix套接字?


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

但是,当我重新启动memcached时,我在Drupal站点上收到内部服务器错误。

我正在尝试实现unix套接字,以避免TCP / IP开销并提高整体内存缓存的性能,但是不确定是否可以通过此调整获得多少性能。

感谢您的提示或可能的配置来解决此问题。


假设memcached正在运行,您是否配置了Drupal以使用套接字?
cjc 2012年

是的,Drupal有被设置为使用Memcached和正常工作时,我使用端口11211.
alfish

运行Drupal的用户的/ path / to /是否完全可读/可执行?我并不是说套接字文件本身;Drupal用户还需要能够下降目录层次结构。
cjc 2012年

Answers:


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如果没有适当的权限,则无法写入到拥有根目录的文件夹。
Daniel W.

8

我相信套接字将需要是全局可执行的,而不是可写的。如果您看到包含errno = 32 Broken pipe的PHP通知消息,请将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',
    )
);

我认为您需要读/写时,掩码应为766或666。
arleslie

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套接字的性能提升进行了基准测试,在使用php cli的测试中,使用Unix套接字的速度提高了33%。

我发现将memcache用户添加到www-data组并赋予unix套接字775权限很重要,这样php处理程序和memcache用户都可以执行它。

您可以在此处找到基准测试和文章-尽管它适用于WordPress,但它应该适用于Drupal,因为它很可能是权限问题。


0

请注意,如果您在Kubernetes中使用高山容器,则带有运行状况探测器的pod规范将如下所示:

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本地域套接字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.