PHP アプリケーションから ElastiCache Memcached を使用する場合、AWS が提供している ElastiCache Cluster Client をインストールする必要がある。(普通の php-pecl-memcached
を入れるとマルチ AZ な Memcached に対応してなさそう)
Amazon Linux 2 & PHP-FPM 7.3 の場合は以下のような手順になる。
ElastiCache のメニューにある「ElastiCache クラスタークライント」から使用している PHP のバージョンに合ったクライアントをダウンロードする。
ダウンロードしたファイルを SCP などで EC2 にアップロードして展開、配置する。
すでに php-pecl-memcached
をインストールしてしまっている場合はアンインストールする。
sudo yum remove php-pecl-memcached
tar xf AmazonElastiCacheClusterClient-PHP73-64bit-libmemcached-1.0.18.tar.gz sudo mv amazon-elasticache-cluster-client.so /usr/lib64/php/modules echo "extension=amazon-elasticache-cluster-client.so" | sudo tee -a /etc/php.d/50-memcached.ini
PHP-FPM を再起動する。
sudo systemctl restart php-fpm
なお、ElastiCache Cluster Client は EC2 上でもダウンロード出来るのでブラウザで落としてくるの面倒だなぁ、という場合は EC2 上で作業してしまった方が早い。
wget 'https://elasticache-downloads.s3.amazonaws.com/ClusterClient/PHP-7.3/latest-64bit' tar xf latest-64bit sudo mv amazon-elasticache-cluster-client.so /usr/lib64/php/modules echo "extension=amazon-elasticache-cluster-client.so" | sudo tee -a /etc/php.d/50-memcached.ini sudo systemctl restart php-fpm
ElastiCache の応答が間に合わない場合 Unable to clear session lock record
が発生することがあるので memcached.sess_lock_retries
を調整する設定を追記しておく。memcached.sess_lock_wait_max
と memcached.sess_lock_wait_min
はサイトのパフォーマンスを見ながら調整。
項目 | 初期値 |
---|---|
memcached.sess_lock_retries | 5 |
memcached.sess_lock_wait_max | 2000 |
memcached.sess_lock_wait_min | 1000 |
extension=amazon-elasticache-cluster-client.so [memcached] memcached.sess_lock_retries = 20 memcached.sess_lock_wait_max = 1000 memcached.sess_lock_wait_min = 500