一つのホストで複数のポート違いの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 5月 09 00:39:26 localhost.localdomain systemd[1]: Started Memcached. 5月 09 00:39:26 localhost.localdomain systemd[1]: Starting Memcached... 5月 09 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 5月 09 00:40:18 localhost.localdomain systemd[1]: Started Memcached. 5月 09 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.
SELinuxでmemcachedの追加ポートを許可
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