AWS, Linux

CentOS7 Memcached+PHP AWS ElastiCache運用に備える

 

AWS ElastiCache (Memcached)を触るので

生のMemcachedを触ってみます。

チューニングパラメータやバッドノウハウや癖を知りたいのです。

 

Memcachedインストール

 

# yum -y install memcached

 

# memcached -h | head -n1
memcached 1.4.15

 

デフォルト設定確認

# cat /etc/sysconfig/memcached


PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

 

  • MAXCONN=”1024″
  • CACHESIZE=”64″

問題になりそうなのはここかな?

 

動かす

# systemctl start memcached
# systemctl enable memcached

 

 

Telnetを利用して使ってみる

 

# yum install -y telnet

 

# telnet localhost 11211

Trying ::1...
Connected to localhost.
Escape character is '^]'.

 

値をセット

set mykey 0 60 7 ←入力(圧縮するか?:0しない, 保持期間60秒, データバイト数)
myvalue ←入力
STORED

 

値をゲット

get mykey ←入力
VALUE mykey 0 7 ←入力

myvalue
END

 

statsコマンド

 

 

stats ←入力

STAT pid 9506
STAT uptime 482
STAT time 1570158687
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.018763
STAT rusage_system 0.018763
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 6
STAT cmd_set 1
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 1
STAT get_misses 5
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 104
STAT bytes_written 64
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 0
STAT curr_items 0
STAT total_items 1
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END

 

stats items

END

 

stats cachedump

CLIENT_ERROR bad command line

 

stats slabs ←入力

STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 0
STAT 1:free_chunks 10922
STAT 1:free_chunks_end 0
STAT 1:mem_requested 0
STAT 1:get_hits 1
STAT 1:cmd_set 1
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END

 

memcached-tool

 

 

ログインしなくても使える

# memcached-tool localhost:11211 display
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM」


11211で動いている場合はポート番号は省略できる
# memcached-tool localhost display
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM

 

 

PHPと連携しよう

 

 

# yum install -y gcc-c++
# yum install -y php php-pecl-memcached

 

@see

  • https://server-world.info/query?os=CentOS_7&p=memcached&f=4

 

PHPと連携できるかプログラムでチェック

# vi use_memcache.php


<?php
$memcache = new Memcached();
$memcache->addServer('localhost', 11211);
$memcache->setOption(Memcached::OPT_COMPRESSION, false);

// キーに値をセットして表示
$memcache->set('key01', 'value01');
print 'key01.value : ' . $memcache->get('key01') . "\n";

// キーに値をアペンドして表示
$memcache->append('key01', ',value02');
print 'key01.value : ' . $memcache->get('key01') . "\n";

$memcache->set('key02', 1);
print 'key02.value : ' . $memcache->get('key02') . "\n";

// 加算
$memcache->increment('key02', 100);
print 'key02.value : ' . $memcache->get('key02') . "\n";

// 減算
$memcache->decrement('key02', 51);
print 'key02.value : ' . $memcache->get('key02') . "\n";

$memcache->set('key03', 'value03');
print 'key03.value : ' . $memcache->get('key03') . "\n";

// CAS (以下の場合 key03 の値は value05 へは更新されない)
$memcache->get('key03', null, $cas);
$memcache->replace('key03', 'value04');
if ($memcache->getResultCode() == Memcached::RES_NOTFOUND) {
    $memcache->add('key03', 'value03');
} else {
    $memcache->cas($cas, 'key03', 'value05');
}
print 'key03.value : ' . $memcache->get('key03') . "\n";

 

実行

# php use_memcache.php

key01.value : value01
key01.value : value01,value02
key02.value : 1
key02.value : 101
key02.value : 50
key03.value : value03
key03.value : value04

大丈夫そうですね。

 

デフォルト設定で問題ないか?

 

CPU使用率が上昇しDatabaseConnectionエラーが発生

@see

 

maxconns_fast
最大接続制限に達したときに新しい接続リクエストを処理する方法を変更します。
このパラメータを 0(ゼロ)に設定した場合、新しい接続がバックログキューに追加され、他の接続が終了するまで待機します。
パラメータを 1 に設定した場合、ElastiCache はクライアントにエラーを送信し、すぐに接続を終了します。

対応

  • パラメータグループのmaxconns_fastを1に設定
  • ElastiCache Cluster Clientをインストール

 

Sessionが空になってしまう

@see

キャッシュのサイズが大きくなる場合
デフォルト1MB(1048576)なのでチューニングする
データサイズが大きいと入らないでエラーになります。

5048576

ElastiCache(Memcache)の機能

 

オートディスカバリ

AmazonでのElastiCacheでの機能。

Clusterのエンドポイントを指定すると、Clusterないのノードを確認してくれてよしなに接続管理をしてくれる。

 

 

 

@see

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)