因此我需要在同一台服务器上运行 2 个 redis 实例。我的服务器是 Ubuntu 14.04 机器。
所以我跟着本指南,但不是严格意义上的。我的意思是,我决定不修改 redis init 脚本(来自 Ubuntu 软件包),而是为第二个实例创建新脚本,而将第一个实例的原始脚本保持不变。
因此,我所做的是:
1)为新实例创建新脚本(它将在 6380 端口运行,而不是默认的 6379 端口):
sudo cp /etc/init.d/redis-server /etc/init.d/redis-server6380
2)修改 /etc/init.d/redis-server6380 使其略有不同。而不是:
DAEMON=/usr/bin/redis-server
DAEMON_ARGS=/etc/redis/redis.conf
NAME=redis-server
DESC=redis-server
RUNDIR=/var/run/redis
PIDFILE=$RUNDIR/redis-server.pid
它会:
NAME=`basename ${0}`
DAEMON=/usr/bin/redis-server
DAEMON_ARGS=/etc/redis/${NAME}.conf
DESC=${NAME}
RUNDIR=/var/run/redis
PIDFILE=$RUNDIR/${NAME}.pid
3)然后复制配置:
cp /etc/redis/redis-server.conf /etc/redis/redis-server6380.conf
编辑新的 redis-server6380.conf 文件如下:
pidfile /var/run/redis/redis-server.pid
port 6379
logfile /var/log/redis/redis-server.log
dir /var/lib/redis
到:
pidfile /var/run/redis/redis-server6380.pid
port 6380
logfile /var/log/redis/redis-server6380.log
dir /var/lib/redis6380
4)然后创建工作目录:
sudo mkdir /var/lib/redis6380 && sudo chown redis.redis /var/lib/redis6380
我现在遇到的一个小问题是,很难检查实例是否正在运行。
之前,我想我可以直接运行:
service redis-server status
并了解redis是否正在运行。
现在,如果我这样做,我会得到:
$ service redis-server status
redis-server is not running
即使第一个实例正在运行!对于第二个实例,我得到:
$ service redis-server6380 status
redis-server6380 is start-stop-daemon: warning: this system is not able to track process
names longer than 15 characters, please use --exec instead of --name.
not running
但为什么呢?我不明白……
如果我使用/etc/init.d/redis-server*
而不是,也会发生同样的事情service
。我现在知道检查它们是否真的在运行的黑客方法是这样的:
$ ps aux | grep redis
andrew 365 0.0 0.1 10468 2236 pts/0 S+ 07:17 0:00 grep --color=auto redis
redis 22521 0.0 1.3 50860 23132 ? Ssl Feb19 4:38 /usr/bin/redis-server 0.0.0.0:6379
redis 52953 0.0 0.5 38572 8860 ? Ssl Feb25 0:23 /usr/bin/redis-server 0.0.0.0:6380
但我不想采取这种做法:(