使用 Memcached 來存 PHP session

Debian Linux 的 PHP session 之前都存在 /var/lib/php5/, 某次升級後, 就轉移到 /tmp 去.

可以修改 php.ini 的 session.save_path 指回 /var/lib/php5, 只是總覺得不是好解法.

看 RAM 還夠用, 還是乾脆把 session 都存到 memcached 去好了.

memcached 安裝

  • apt-get install memcached php5-memcache

修改 PHP 設定檔

有下述兩種做法, 我比較喜歡第二種(我不太喜歡去動原始設定, 避免升級時設定被蓋掉).

方法1
  • vim /etc/php5/apache2/php.ini

    session.save_handler = files

    修改成

    session.save_handler = memcache
    ; 127.0.0.1:11211 請自行修改成 memcached 的位置
    session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

方法2
  • vim /etc/php5/conf.d/sess.ini

    ; session for memcached
    session.save_handler = memcache

    ; 127.0.0.1:11211 請自行修改成 memcached 的位置
    session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

設定完成後

  1. /etc/init.d/apache2 restart
  2. rm /tmp/sess_*
  3. 有空時用下述程式看看 memcache 狀態 即可.
    • /usr/share/memcached/scripts/memcached-tool 127.0.0.1:11211 stats
    • /usr/share/memcached/scripts/memcached-tool 127.0.0.1:11211 display
    • /usr/share/memcached/scripts/memcached-tool 127.0.0.1:11211 dump

PHP FPM 的設定方式

  1. vim /etc/php5/fpm/pool.d/www.conf
    php_value[session.save_handler] = memcache
    php_value[session.save_path] = "tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
  2. sudo /etc/init.d/php5-fpm restart

使用 PHP 看 memcache 狀態


<?php
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
$stats = $memcache->getStats();
foreach ($stats as $key => $val) {
echo "$key : $val\n";
}
?>

Memcache iptables (防火牆) 設定

  • 開放 192.168.1.*, 其它全部擋掉.
  • iptables -t filter -A INPUT -p tcp -m tcp -s 192.168.1.0/24 -d 192.168.1.0/24 --dport 11211 -j ACCEPT

若遇到 Unknown: Failed to write session data (memcache) 的問題:

  • 請將 session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
  • 改成 session.save_path="tcp://127.0.0.1:11211?persistent=0&weight=1&timeout=1&retry_interval=15"

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料