【CentOS7/SELinux】複数のmemcachedをsystemdで管理

一つのホストで複数のポート違いのmemcachedを起動してSystemdで管理するための設定方法です。

memcachedインストール

とりあえずmemcachedをインストールします。

# yum -y install memcached

2つのmemcachedインスタンス向け設定ファイルの複製・変更

例としてポート番号11212と11213のmemcachedを作ります。

# cd /etc/sysconfig
# cp -ai memcached memcached.11212
# cp -ai memcached memcached.11213

それぞれPORTの値を変更しておきます。

# cat memcached.11212
PORT="11212"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

# cat memcached.11213
PORT="11213"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

Systemd定義ファイルの複製・設定変更

同じようにsystemdの設定ファイルもそれぞれのインスタンス用に複製します。

# cd /usr/lib/systemd/system
# cp -ai memcached.service memcached.11212.service
# cp -ai memcached.service memcached.11213.service

EnvironmentFileの項目を先ほど作成した設定ファイルに変更します。以下は11212ポート用の設定ファイルですが、もう片方の11213も同じように設定します。

# cat memcached.11212.service 
[Unit]
Description=Memcached 
Before=httpd.service
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached.11212
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

[Install]
WantedBy=multi-user.target

サービス起動

サービス起動してみます。ちなみに、systemctlコマンドは最後のサービス複数指定できます。

SELinux有効化されていると起動時にPermissionのエラーが出ます。無効化するかsemangeコマンドでポリシー変更します。ポリシー変更する場合は後術のSELinuxの手順を参考にしてください。

# systemctl start memcached.11212 memcached.11213

ステータスを確認すると問題無く起動しています。

# systemctl status memcached.11212 memcached.11213
● memcached.11212.service - Memcached
   Loaded: loaded (/usr/lib/systemd/system/memcached.11212.service; disabled; vendor preset: disabled)
   Active: active (running) since 月 2016-05-09 00:39:26 EDT; 58s ago
 Main PID: 31221 (memcached)
   CGroup: /system.slice/memcached.11212.service
           └─31221 /usr/bin/memcached -u memcached -p 11212 -m 64 -c 1024

 509 00:39:26 localhost.localdomain systemd[1]: Started Memcached.
 509 00:39:26 localhost.localdomain systemd[1]: Starting Memcached...
 509 00:40:18 localhost.localdomain systemd[1]: Started Memcached.

● memcached.11213.service - Memcached
   Loaded: loaded (/usr/lib/systemd/system/memcached.11213.service; disabled; vendor preset: disabled)
   Active: active (running) since 月 2016-05-09 00:40:18 EDT; 6s ago
 Main PID: 31233 (memcached)
   CGroup: /system.slice/memcached.11213.service
           └─31233 /usr/bin/memcached -u memcached -p 11213 -m 64 -c 1024

 509 00:40:18 localhost.localdomain systemd[1]: Started Memcached.
 509 00:40:18 localhost.localdomain systemd[1]: Starting Memcached...

接続も問題無くできそうです。

# echo -e "stats slabs" | nc -C localhost 11212
STAT active_slabs 0
STAT total_malloced 0
END

# echo -e "stats slabs" | nc -C localhost 11213
STAT active_slabs 0
STAT total_malloced 0
END

有効化しておきます。

# systemctl enable memcached.11212 memcached.11213
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.11212.service to /usr/lib/systemd/system/memcached.11212.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.11213.service to /usr/lib/systemd/system/memcached.11213.service.

SELinuxmemcachedの追加ポートを許可

semanageコマンドを使います。semanageコマンド無ければ以下のパッケージインストールします。

# yum install policycoreutils-python

念のため確認すると現在、memcachedに許可されているポートは11211のようです。

# semanage port -l | grep memcache
memcache_port_t                tcp      11211
memcache_port_t                udp      11211

許可するポートを追加していきます。

# semanage port -a -t memcache_port_t -p tcp 11212
# semanage port -a -t memcache_port_t -p udp 11212
# semanage port -a -t memcache_port_t -p tcp 11213
# semanage port -a -t memcache_port_t -p udp 11213

追加されたみたいです。

# semanage port -l | grep memcache
memcache_port_t                tcp      11213, 11212, 11211
memcache_port_t                udp      11213, 11212, 11211

SELinux有効化されている環境でも問題無く起動できました。

# systemctl start memcached.11212 memcached.11213
# systemctl -t service | grep memcached
  memcached.11212.service                                                                   loaded active running Memcached
  memcached.11213.service                                                                   loaded active running Memcached