memcached 설정 (Cent7,nginx,php7.2,php-fpm)

개요


  • 직장에서 ElastiCache라든지 매니지드 서비스 사용할 수 없는 상황이었기 때문에 오랜만에 원소의 memcached를 세우는 것에
  • 모처럼이므로 최신판 1.5계를 사용해 본다
  • 새로운 분 빠진 부분도 있으므로 메모 해 둔다
  • 추기) memcached1.7도 대응. 2020/03 할 기회가 방문했기 때문에 다음 절차에 문제가 없었습니다

  • 사전 준비


  • remi와 epel을 활성화한다. remi에서 php 또는 memcached를 사용하기 때문에
  • app 서버 (php, php-fpm, nginx)를 실행하십시오.

    상세



    설치


  • 설치 (memcached 서버에서)
  • # yum install epel-release
    # rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    
    $ sudo yum install memcached memcached-devel --enablerepo=epel,remi
    
  • 설치 (app 서버에서)
  • $ sudo yum install php72-php-pecl-memcache libmemcached libmemcached-devel --enablerepo=remi,epel
    $ sudo yum install php72-php-cli php72-php-devel php72-php-pdo php72-php-pecl-msgpack php72-php-pecl-msgpack-devel php72-php-pecl-memcached php72-php-pecl-redis php72-php-phpiredis php72-php-pecl-lua php72-php-pecl-apcu php72-php-pecl-apcu-bc php72-php-pecl-apcu-devel php72-php-xml --enablerepo=remi,epel
    

    설정


  • memcached 설정 (memcached 서버에서)

  • htp : // bg. 노마 ds 카후. jp / 2013/12 / m m ぇ d-2. HTML 에서 확인
  • 캐시 크기는 RAM 크기의 80% 정도
  • 접속수는 좀더 늘릴 수 있지만 메모리가 먼저 고갈될 우려가 있기 때문에 정도로 해 둔다
  • 옵션은 적절히 검토
  • $ sudo cp -p /etc/sysconfig/memcached /etc/sysconfig/memcached.org
    $ vim /etc/sysconfig/memcached
    PORT="11211"
    USER="memcached"
    CACHESIZE="3024"
    MAXCONN="65536"
    OPTIONS=""
    
    $ sudo systemctl start memcached
    
  • memcached-tool 배포 (memcached 서버에서)
  • memcached-tool 다운로드
  • 경로가있는 디렉토리로 이동
  • 동작 확인하기
  • $ chmod 755 memcached-tool
    $ sudo mv memcached-tool /usr/local/bin
    $ which memcached-tool
    $ memcached-tool localhost display
    
  • 커널 매개 변수 (app, memcached 서버에서)
  • 커널 파라미터도 확인해 둔다
  • 여기 조정하지 않으면 죽는다
  • $ cat /etc/sysctl.conf|grep net.core.somaxconn
    net.core.somaxconn = 2147483647
    
  • memcached 단독으로 동작 확인 (memcached 서버에서)
  • $ telnet localhost 11211
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    set testkey 0 60 7
    testvalue
    STORED
    get testkey
    VALUE mykey 0 7
    testvalue
    END
    delete testkey
    DELETED
    get testkey
    END
    flush_all
    OK
    quit
    Connection closed by foreign host.
    
  • app 서버에서 memcached 서버로 연결하여 동작 확인 (app 서버에서)
  • $ telnet <memcached server private ip> 11211
    Trying <memcached server private ip>...
    Connected to <memcached server private ip>.
    Escape character is '^]'.
    get testkey
    END
    set testkey 0 60 7
    myvalue
    STORED
    get mykey
    VALUE testkey 0 7
    myvalue
    END
    delete testkey
    DELETED
    flush_all
    OK
    quit
    Connection closed by foreign host.
    
  • app 서버의 php 설정 변경 (app 서버에서)
  • $ sudo vi /etc/php.ini
    ;; X-Powered-Byを隠す
    expose_php = Off 
    
    ;; PHPタイムゾーン 
    date.timezone = Asia/Tokyo 
    
    ;; デフォルト言語
    mbstring.language = Japanese 
    
    ;; 内部文字エンコーディング 
    mbstring.internal_encoding = UTF-8 
    
    ;; HTTP入力文字エンコーディング(auto:mgstring.languageの設定で展開) 
    mbstring.http_input = auto 
    
    ;; HTTP出力文字エンコーディング(pass:変換しない) 
    mbstring.http_output = pass 
    
    ;; HTTP入力変換有効
    mbstring.encoding_translation = On 
    
    ;; デフォルト文字エンコーディング検出順序
    mbstring.detect_order = auto
    
    ;; 無効な文字出力しない
    mbstring.substitute_character = none; 
    
    ;; 動的ライブラリ格納パスをデフォルトからremi用に変更
    extension_dir = "/opt/remi/php72/root/usr/lib64/php/modules"
    
  • app 서버의 php 설정 변경 (app 서버에서)
  • $ sudo vi /etc/php-fpm.d/www.conf
    :
    ;php_value[session.save_handler] = files
    ;php_value[session.save_path]    = /var/lib/php/session
    php_value[session.save_handler] = memcached
    php_value[session.save_path]    = "<memcached server private ip:11211>"
    $ sudo systemctl restart php-fpm
    
  • app 서버의 php 설정 변경 (app 서버에서)
  • $ sudo vim /etc/php-fpm.d/www.conf
    :
    php_value[session.save_handler] = memcached
    php_value[session.save_path]    = "<memcached server private ip>:11211"
    
  • 연결할 memcached 서버를 app 서버의 php-fpm으로 설정합니다 (app 서버에서).
    
    $ sudo vim /etc/php.d/30-memcached.ini
    extension=memcached
    php_value[session.save_handler] = memcached
    php_value[session.save_path] = "<memcached server private ip>:11211"
    
    $ sudo systemctl restart php-fpm
    
    $ php --ini | grep memcached
    /etc/php.d/30-memcached.ini
    
  • 연결할 memcached 서버를 app 서버의 php로 설정합니다 (app 서버에서).
    # echo "extension=msgpack" > /etc/php.d/20-msgpack.ini
    # echo "extension=igbinary" > /etc/php.d/20-igbinary.ini
    
    # php -i | head
    

    설정 확인


  • 설정 확인 (app 서버에서)
  • # grep -v '^\s*;' /etc/php.ini |grep -v '^\s*$'
    :
    :
    
  • 라이브러리 확인
  • memcached 라이브러리가 읽어들이고 있는 것을 브라우저로부터 확인 (app 서버에서)


  • php를 통해 확인
  • php-memcached간 접속 확인용 파일을 배치(app 서버에서)
  • $ vim /documentroot/conncheck.php
    <?php
    $memcache = new Memcached();
    $memcache->addServer('<memcached server private ip>', 11211);
    $data = 'memcached for col';
    $memcache->set('key', $data, 1000);
    echo $get_data = $memcache->get('key');
    
  • 브라우저에 액세스하여 문제가 없는지 확인


  • 에러 로그가 나오지 않는 것을 확인
  • $ sudo tailf /var/log/nginx/app.error.log
    $ sudo tailf /var/log/nginx/error.log
    

    해결된 오류


  • 라이브러리가 없다는 것, extension_dir를 변경할 필요가 있었다
  • 2018/05/14 17:12:58 [error] 5024#5024: *6543 FastCGI sent in stderr: "PHP message: 
    PHP Fatal error: Uncaught Error: 
    Class 'Memcached' not found in /var/source/current/src/app/www/conncheck.php:2
    Stack trace:
    
  • extension = memcached.so로 정의하면 so가 두 번
  • PHP Warning:  PHP Startup: Unable to load dynamic library 'memcached.so'
    (tried: /opt/remi/php72/root/usr/lib64/php/modules/memcached.so 
    (/opt/remi/php72/root/usr/lib64/php/modules/memcached.so: undefined symbol: php_json_decode_ex), 
    /opt/remi/php72/root/usr/lib64/php/modules/memcached.so.so
    (/opt/remi/php72/root/usr/lib64/php/modules/memcached.so.so: 
    cannot open shared object file: No such file or directory)) in Unknown on line 0
    
  • igbinary 라이브러리를 설치했지만 구성하지 않았습니다
  • PHP Warning: PHP Startup: Unable to load dynamic library 'memcached' 
    (tried: /opt/remi/php72/root/usr/lib64/php/modules/memcached 
    (/opt/remi/php72/root/usr/lib64/php/modules/memcached: cannot open shared object file: No such file or directory), 
    /opt/remi/php72/root/usr/lib64/php/modules/memcached.so
    (/opt/remi/php72/root/usr/lib64/php/modules/memcached.so: 
    undefined symbol: igbinary_serialize)) in Unknown on line 0
    
  • msgpack 라이브러리를 설치했지만 설정하지 않았습니다.
    PHP Warning: PHP Startup: Unable to load dynamic library 'memcached' 
    (tried: /opt/remi/php72/root/usr/lib64/php/modules/memcached 
    (/opt/remi/php72/root/usr/lib64/php/modules/memcached: cannot open shared object file: No such file or directory), 
    /opt/remi/php72/root/usr/lib64/php/modules/memcached.so 
    (/opt/remi/php72/root/usr/lib64/php/modules/memcached.so:
    undefined symbol: php_msgpack_serialize)) in Unknown on line 0
    
  • 좋은 웹페이지 즐겨찾기