유닉스 소켓을 사용하도록 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.