如何设置在不同端口上运行的多个 memcached 实例?

Toj*_*cko 4 php cache 15.10

我正在运行 Ubuntu 15.10 并且已经在我的系统上安装了 memcached。我当前的项目要求是在同一台服务器上运行两个 memcached 实例,但端口不同。我从/etc/memcached.conf文件开始并检查它是否具有指定端口号的选项。所以,我想我只需要有两个具有不同端口号的相同 conf 文件。

然后我检查 memcached 启动脚本,/etc/init.d/memcached以便我可以指定 conf 文件的位置。但令我惊讶的是,我发现启动脚本已经有一个选项可以运行多个 memcached 实例。

# Usage:
# cp /etc/memcached.conf /etc/memcached_server1.conf
# cp /etc/memcached.conf /etc/memcached_server2.conf
# start all instances:
# /etc/init.d/memcached start
# start one instance:
# /etc/init.d/memcached start server1
# stop all instances:
# /etc/init.d/memcached stop
# stop one instance:
# /etc/init.d/memcached stop server1
# There is no "status" command.

FILES=(/etc/memcached_*.conf)
# check for alternative config schema
if [ -r "${FILES[0]}" ]; then
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的选项,但它仍然继续启动一个实例,而不是启动两个实例。我在这里错过了什么吗?

小智 8

这可以通过创建一个文件 /lib/systemd/system/memcached@.service 来轻松完成,该文件的内容与 memcached.service 文件基本相同,但有一些小的更改:

[Unit]
Description=memcached daemon for %i
After=network.target

[Service]
ExecStart=/usr/share/memcached/scripts/systemd-memcached-wrapper /etc/memcached_%i.conf

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 systemctl 单独管理每个服务:

systemctl enable memcached@server1

systemctl start memcached@server2
Run Code Online (Sandbox Code Playgroud)


小智 7

正如 Robert Bihlmeyer 在https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784357#13 上所说,一个简单的解决方案是删除/lib/systemd/system/memcached.service.

如果没有这个文件,systemd 会回退到/etc/init.d/memcached支持多种配置的 。

我在 Ubuntu 16.04 上确认了这个问题并通过这种方式解决了它。