유닉스 소켓을 사용하도록 memcached를 설정하는 방법은 무엇입니까?


12

데비안에서 memcached를 사용하여 기본 11211 포트를 사용할 수는 있지만 유닉스 소켓을 설정하는 데 큰 어려움이있었습니다.

내가 읽은 것에서 나는 a를 만들고 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 성능을 향상시키기 위해 유닉스 소켓을 구현하려고하지만이 조정에 대해 얼마나 많은 성능을 얻을 수 있는지 확실하지 않습니다.

이 문제를 해결하기 위해 힌트 또는 구성을 주셔서 감사합니다.


memcached가 실행 중이라고 가정하면 Drupal이 소켓을 사용하도록 구성 했습니까?
— cjc

예, Drupal은 memcached를 사용하도록 설정되었으며 포트 11211을 사용할 때 올바르게 작동합니다.
— alfish

Drupal을 실행하는 사용자가 / path / to /를 완전히 읽거나 실행할 수 있습니까? 소켓 파일 자체를 의미하지는 않습니다. Drupal 사용자는 디렉토리 계층 구조를 내릴 수 있어야합니다.
— cjc

답변:


12

소켓 경로 설정만으로는 작동하지 않을 수 있습니다. Memcached는 PID를 작성한 후 소켓을 만들기 전에 권한을 삭제합니다. 소켓을 넣는 것이 일반적이지만 /var/run(예를 들어 mysql처럼) 루트 만 쓸 수 있으므로 /var/run/memcached아무도 작성 하지 /var/run/memcached/memcached.sock않고 소켓 경로 를 설정 하십시오. 그것을 쓰기도 효과가 /tmp있지만, 그 특성상 휴지통에 쌓일 수 있습니다. 그것을 고집하는 /var/run것은 조금 더 영구적입니다.

netcat을 사용하여 연결되어 작동하는지 확인할 수 있습니다.

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

stats빈 프롬프트에서 입력 하십시오. 작동하면 많은 출력을 얻을 수 있습니다.


1
이것은 다른 대답보다는 나를 위해 일했습니다. 분명히 nobody/ O를 적절한 권한 w 루트 소유의 폴더에 쓸 수 없습니다.
— Daniel W.

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이어야한다고 생각합니다.
— 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 유닉스 소켓 사용의 성능 향상을 벤치마킹했으며 php cli를 사용하는 테스트에서 유닉스 소켓을 사용하는 것이 33 % 더 빠릅니다.

www-data 그룹에 memcache 사용자를 추가하고 유닉스 소켓 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를 통해 유닉스 로컬 도메인 소켓에 연결하는 방법을 알아 냈습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.