วิธีการตั้งค่า memcached เพื่อใช้ซ็อกเก็ตยูนิกซ์?


12

ในขณะที่ฉันสามารถใช้ memcached บน Debian เพื่อใช้พอร์ต 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 โดยรวม แต่ไม่แน่ใจว่าประสิทธิภาพที่เพิ่มขึ้นหนึ่งสามารถคาดหวังของการปรับแต่งนี้

ฉันขอขอบคุณคำแนะนำของคุณหรืออาจกำหนดค่าเพื่อแก้ไขปัญหานี้


สมมติว่า memcached ทำงานคุณตั้งค่า Drupal ให้ใช้ซ็อกเก็ตหรือไม่
cjc

ใช่ Drupal ได้รับการตั้งค่าให้ใช้ memcached และทำงานอย่างถูกต้องเมื่อฉันใช้พอร์ต 11211
alfish

/ path / to / readable / executable โดยผู้ใช้ที่รัน Drupal หรือไม่ ฉันไม่ได้หมายถึงไฟล์ซ็อกเก็ตเอง ผู้ใช้ Drupal จะต้องสามารถลดลำดับชั้นของไดเรกทอรี
cjc

คำตอบ:


12

คุณอาจพบว่าเพียงแค่ตั้งค่าเส้นทางซ็อกเก็ตไม่ทำงาน Memcached จะปิดการใช้งานก่อนที่จะสร้างซ็อกเก็ตแม้ว่าจะเขียน PID แล้ว เป็นเรื่องปกติที่จะวางซ็อกเก็ตไว้/var/run(เช่นที่ mysql ทำ) แต่มีเพียงรูทเท่านั้นที่สามารถเขียนได้ดังนั้นให้สร้าง/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

ฉันเชื่อว่าซ็อกเก็ตจะต้องใช้งานได้ทั่วโลกไม่สามารถเขียนได้ หากคุณเห็นข้อความแจ้งเตือน PHP ที่มีerrno = 32 Broken pipeให้ปรับมาสก์การเข้าถึง Memcached เป็น 0755

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

ตรวจสอบด้วยว่าMemcached daemonของ Drupal มีพอร์ต 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 มันเร็วกว่า 33% ในการใช้ซ็อกเก็ตยูนิกซ์ในการทดสอบของฉันโดยใช้ php cli

ฉันพบว่ามันเป็นสิ่งสำคัญที่จะเพิ่มผู้ใช้ memcache ไปยังกลุ่ม www-data และให้สิทธิ์ซ็อกเก็ตยูนิกซ์ 775 ด้วยวิธีนี้ทั้งผู้ใช้ php handler และ 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

ใช้เวลาสักครู่เพื่อค้นหาการตั้งค่าที่ถูกต้องและวิธีเชื่อมต่อกับซ็อกเก็ตโดเมนในระบบยูนิกซ์ผ่านช่องว่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.