mattintosh note

どこかのエンジニアモドキの備忘録

ElastiCacheでMemcachedを使うときのクライアントのインストール

PHP アプリケーションから ElastiCache Memcached を使用する場合、AWS が提供している ElastiCache Cluster Client をインストールする必要がある。(普通の php-pecl-memcached を入れるとマルチ AZ な Memcached に対応してなさそう)

Amazon Linux 2 & PHP-FPM 7.3 の場合は以下のような手順になる。

ElastiCache のメニューにある「ElastiCache クラスタークライント」から使用している PHP のバージョンに合ったクライアントをダウンロードする。

AWS - ElastiCache
AWS - ElastiCache

ダウンロードしたファイルを SCP などで EC2 にアップロードして展開、配置する。

すでに php-pecl-memcached をインストールしてしまっている場合はアンインストールする。

Terminal

sudo yum remove php-pecl-memcached

Terminal

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 を再起動する。

Terminal

sudo systemctl restart php-fpm


なお、ElastiCache Cluster Client は EC2 上でもダウンロード出来るのでブラウザで落としてくるの面倒だなぁ、という場合は EC2 上で作業してしまった方が早い。

Terminal

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_maxmemcached.sess_lock_wait_min はサイトのパフォーマンスを見ながら調整。

項目 初期値
memcached.sess_lock_retries 5
memcached.sess_lock_wait_max 2000
memcached.sess_lock_wait_min 1000

/etc/php.d/50-memcached.ini

extension=amazon-elasticache-cluster-client.so

[memcached]
memcached.sess_lock_retries  = 20
memcached.sess_lock_wait_max = 1000
memcached.sess_lock_wait_min = 500