memcached インストールと起動オプションのまとめ

スポンサーリンク

memcachedはシンプルなKVS(Key Value Store)です。文字通りメモリ上にキャッシュを保持する事でストレージ層へのアクセスを軽減する目的で使用します。このページでは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
タイトルとURLをコピーしました