memcachedはシンプルなKVS(Key Value Store)です。文字通りメモリ上にキャッシュを保持する事でストレージ層へのアクセスを軽減する目的で使用します。このページではmemcachedのインストールと起動オプションについてまとめます。
前提
公式ドキュメント
参考となる公式ドキュメントを以下に示します。
- memcached.org
- memcached.org – wiki
- memcached.org – wiki – install
- ConfiguringServer
- Docker Hub – memcached
動作確認済環境
- Rocky Linux 8.6
- Docker CE 20.10.21
- memcached 1.5.22 (パッケージインストール)
- memcached 1.6.17 (Dokcerコンテナ)
インストール
インストール操作
Redhat系Linuxの場合は以下のようなdnfコマンドでインストールできます。
Redhat系Linux以外の操作は「memcached.org – wiki – install」を参照ください。
dnf install -y memcached
自動起動
dnfコマンドでインストールするとsystemdに関する設定ファイル群も同時に設定されますので、systemctlコマンドで自動起動を設定できます。
systemctl enable memcached.service --now
memcachdのファイル構成
memcachedはシンプルなKVSです。ゆえに設定できるパラメタも多くなく、xxxx.confのような設定ファイルは存在しません。
memcachedのプロセスを観察すると、確かにxxxx.confのような設定ファイル指定がない事が分かります。
[root@linux010 ~]# ps aux | grep memcached memcach+ 4082 0.0 0.1 460120 5032 ? Ssl 15:34 0:00 /usr/bin/memcached -p 11211 -u memcached -m 64 -c 1024 -l 127.0.0.1,::1 root 4193 0.0 0.0 221936 1076 pts/0 S+ 15:53 0:00 grep --color=auto memcached [root@linux010 ~]#
仕様理解のために、systemdの構成を観察してみましょう。
/usr/lib/systemd/system/memcached.serviceを観察すると、/etc/sysconfig/memcachedに定義された環境変数を起動引数として設定している事が分かります。
[root@linux010 ~]# cat /usr/lib/systemd/system/memcached.service # It's not recommended to modify this file in-place, because it will be # overwritten during upgrades. If you want to customize, the best # way is to use the "systemctl edit" command to create an override unit. # # For example, to pass additional options, create an override unit # (as is done by systemctl edit) and enter the following: # # [Service] # Environment=OPTIONS="-l 127.0.0.1,::1" [Unit] Description=memcached daemon Before=httpd.service After=network.target [Service] EnvironmentFile=/etc/sysconfig/memcached ExecStart=/usr/bin/memcached -p ${PORT} -u ${USER} -m ${CACHESIZE} -c ${MAXCONN} $OPTIONS <omitted>
/etc/sysconfig/memcachedを見るとポート番号やキャッシュサイズの定義がなされている事が分かります。memcachedの設定方法は色々考えられますが、/etc/sysconfig/memcachedに設定を記述するのが見通しが良さそうです。
[root@linux010 ~]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1,::1" [root@linux010 ~]#
起動オプション
起動オプションの一覧
起動オプションの一覧は、「memcached –help」コマンドなどで確認できます。
[root@linux010 ~]# memcached --help memcached 1.5.22 -p, --port=<num> TCP port to listen on (default: 11211) -U, --udp-port=<num> UDP port to listen on (default: 0, off) -s, --unix-socket=<file> UNIX socket to listen on (disables network support) -A, --enable-shutdown enable ascii "shutdown" command -a, --unix-mask=<mask> access mask for UNIX socket, in octal (default: 700) -l, --listen=<addr> interface to listen on (default: INADDR_ANY) if TLS/SSL is enabled, 'notls' prefix can be used to disable for specific listeners (-l notls:<ip>:<port>)
接続に関するオプションの変更例
memcachedは以下のような接続に関するオプションを変更できます。
オプション | 意味 |
---|---|
-P, –port | 接続を許可するTCPポート(デフォルト:11211) |
-U, –udp-port | 接続を許可するUDPポート(デフォルト:0, off) |
-s, –unix-socket | 接続を提供するUNIX socket |
-l. –listen | ListenするIPアドレス |
デフォルトは設定を以下に記します。デフォルトはtcp11211をlocalhost(127.0.0.1,::1)に対してListenする状態になっています。
[root@linux010 ~]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1,::1" [root@linux010 ~]#
これを0.0.0.0に対してListenする状態に変更します。
cat << EOF > /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 0.0.0.0" EOF systemctl restart memcached.service
localhost以外からの接続が可能になった事を確認します。
[root@linux010 ~]# netstat -ano | grep 11211 tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN off (0.00/0/0) [root@linux010 ~]# echo "stats" | nc 172.16.1.10 11211 STAT pid 4784 STAT uptime 10 STAT time 1667893311 STAT version 1.5.22 STAT libevent 2.1.8-stable STAT pointer_size 64 STAT rusage_user 0.014461 STAT rusage_system 0.016779 STAT max_connections 1024 <omitted>
コネクション上限
コネクション上限のデフォルト値は1024です。コネクション数が不足する場合は、この値のチューニングが可能です。
(国内系の面倒なお客様が許容するかどうかは別問題ですが)公式ドキュメント「ConfiguringServer」によればstatコマンドの出力でlisten_disabled_numが0か0に近い値ならば、コネクション数は十分と考えて差し支えございません。
memcached.cのdo_accept_new_connsメソッド辺りを読むと、接続拒否された場合にlisten_disabled_numが増加する仕様である事が分かります。
[root@linux010 ~]# echo "stats" | nc 172.16.1.10 11211 <omitted> STAT accepting_conns 1 STAT listen_disabled_num 0 STAT time_in_listen_disabled_us 0 STAT threads 4 STAT conn_yields 0 <omitted>
もしコネクション上限が不足するようならば、以下のように操作します。以下はコネクション上限を1024から2048に鉛鉱する操作例です。
cat << EOF > /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="2048" CACHESIZE="64" OPTIONS="-l 0.0.0.0" EOF systemctl restart memcached.service
補足
Dockerによるmemcachedの利用
以下のようなコマンドでコンテナ版のmemcachedを起動できます。タグの「memcached:latest」の部分はお好みのバージョンに合わせて適宜の変更をお願いします。
docker run -d \ --name redis01 \ -p 11211:11211 \ memcached:latest
もし、デフォルト設定以外の起動オプションを使用したい場合は、以下のように指定します。
docker run -d \ --name redis02 \ -p 11211:11211 \ memcached:latest \ memcached -m 64 -c 2048