所以我需要在同一台服务器上运行2个redis实例。 我的服务器是Ubuntu 14.04盒子。
所以我遵循这个指南 ,但不是严格的。 我的意思是,不是修改redis init脚本(来自Ubuntu软件包),而是决定为第二个实例创build新的脚本,并保留原来的脚本作为第一个实例。
那么,我所做的是:
1)为新实例创build新的脚本(它将运行在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)然后复制configuration:
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)然后创build工作目录:
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
但我想不需要诉诸这:(