Então, tive a necessidade de executar duas instâncias de redis no mesmo servidor. Meu servidor é uma caixa do Ubuntu 14.04.
Então eu segui este guia , mas não de maneira restrita. Quero dizer, em vez de modificar scripts de inicialização redis (que vêm de pacotes do Ubuntu), decidi criar novos scripts para a segunda instância e deixar os originais intocados para a primeira instância.
Então, o que eu fiz foi:
1) Crie um novo script para nova instância (ele será executado na porta 6380, ao invés do padrão 6379):
sudo cp /etc/init.d/redis-server /etc/init.d/redis-server6380
2) Modifique /etc/init.d/redis-server6380 para ser um pouco diferente. Em vez de:
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
Teria:
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) Em seguida, copie a configuração:
cp /etc/redis/redis-server.conf /etc/redis/redis-server6380.conf
Edite o novo arquivo redis-server6380.conf como sendo de:
pidfile /var/run/redis/redis-server.pid
port 6379
logfile /var/log/redis/redis-server.log
dir /var/lib/redis
Para:
pidfile /var/run/redis/redis-server6380.pid
port 6380
logfile /var/log/redis/redis-server6380.log
dir /var/lib/redis6380
4) Em seguida, crie o diretório de trabalho:
sudo mkdir /var/lib/redis6380 && sudo chown redis.redis /var/lib/redis6380
O pequeno problema que tenho agora é que é difícil verificar se as instâncias estão em execução.
Antes, acho que eu poderia simplesmente executar:
service redis-server status
E saiba se os redis estão sendo executados.
Agora, se eu fizer isso, recebo:
$ service redis-server status
redis-server is not running
Mesmo quando a primeira instância está em execução! E para a segunda instância eu recebo:
$ 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
MAS POR QUE? Eu não entendo ...
A mesma coisa acontece se eu usar /etc/init.d/redis-server*
em vez de service
. A maneira hacky que agora conheço para verificar se eles estão realmente funcionando é esta:
$ 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
Mas eu gostaria de não precisar recorrer a isso: (