redis 程序运行过程并不会消耗太多的 CPU 和 IO 资源(主要消耗memory),如是在单台机器上如果只启用一个redis实例会造成资源浪费 。同时为了增加可用性,一般也不会在单机上只运行一个redis实例,本篇就介绍下,如何在单上运行多个 redis 实例(运行在不同端口)。
一、redis-server的安装
由于我现网的机器使用的是ubuntu系统,所以这里就以ubuntu为例,可以直接使用apt源安装redis-server
$ sudo apt-get install redis-server
安装完成后,可以使用dpkg命令查看各文件所在的路径:
代码如下 | 复制代码 |
$ sudo dpkg -L redis-server /. /etc /etc/default /etc/default/redis-server /etc/redis /etc/redis/redis.conf /etc/redis/sentinel.conf /etc/init.d /etc/init.d/redis-server /etc/logrotate.d /etc/logrotate.d/redis-server /var /var/log /var/log/redis /var/lib /var/lib/redis /usr /usr/bin /usr/bin/redis-server /usr/share /usr/share/man /usr/share/man/man1 /usr/share/man/man1/redis-server.1.gz /usr/share/doc /usr/share/doc/redis-server /usr/share/doc/redis-server/copyright /usr/bin/redis-sentinel /usr/share/doc/redis-server/changelog.Debian.gz |
其中/usr/bin/redis-server为程序执行文件,/etc/redis/redis.conf为配置文件,/etc/init.d/redis-server为自启动文件 。单实例时,可以通过sudo /etc/init.d/redis-server start 启动。
二、运行多实例redis
默认的配置文件内容为:
代码如下 | 复制代码 |
$ egrep -v ‘^#|^$‘ redis.conf daemonize yes pidfile /var/run/redis/redis-server.pid port 6379 bind 127.0.0.1 timeout 0 tcp-keepalive 0 loglevel notice logfile /var/log/redis/redis-server.log databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis slave-serve-stale-data yes slave-read-only yes repl-disable-tcp-nodelay no slave-priority 100 appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes |
具体配置文件中参数的意思,可以参看 redis配置文件详解 。假设我们现在要再启动两个redis实例,监听端口分别是6378、6376,只需要复制一份redis.conf配置文件并做下修改再通过redis-server启动即可。
以redis监听6378端口为例,只需要修改如下几部分,其他配置部他仍使用默认即可:
代码如下 | 复制代码 |
pidfile /var/run/redis/redis-server6378.pid port 6378 logfile /var/log/redis/redis-server6378.log dir /opt/redis6378 vm-swap-file /opt/redis6378/redis.swap |
其中dir存储路径也可以就用默位置/var/lib/redis ,不过dbfilename就不能再用默认的dump.rdb,可以使用dump6378.rdb。不过此处还是建议不同的redis实例存放在不同的路径。
修改完配置文件,通过下面的命令就可以启动新的redis实例:
代码如下 | 复制代码 |
# sudo /usr/bin/redis-server /etc/redis/redis6378.conf |
不过这时启动后,通过ps命令查看会发现一个问题,原来的默认redis实例是以redis用户启动,而新的redis实例则会以root用启动。
代码如下 | 复制代码 |
[email protected]:/var/lib/redis$ ps auxf|grep redis yang 4296 0.0 0.0 8060 864 pts/0 S+ 05:41 0:00 | _ grep redis redis 3837 0.0 0.0 35912 1492 ? Ssl 05:22 0:00 /usr/bin/redis-server /etc/redis/redis.conf root 4275 0.0 0.0 35912 1480 ? Ssl 05:37 0:00 /usr/bin/redis-server /etc/redis/redis6378.conf |
通过查看/etc/init.d/redis-server自启动文件会发现,自启动在start时使用的语句为:
代码如下 | 复制代码 |
start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS |
此处同样,可以依葫芦画瓢。复制sudo cp /etc/init.d/redis-server /etc/init.d/redis6378 ,复制完成后,修改以下几项:
代码如下 | 复制代码 |
DAEMON_ARGS=/etc/redis/redis6378.conf NAME=redis-server DESC=redis6378-server RUNDIR=/var/run/redis PIDFILE=$RUNDIR/redis-server6378.pid |
修改完后,也以redis6378配置文件启动就行了。再通过ps查看,发现同样也会是以redis用户运行的进程。想要再加6376、6375等多个实例,还按上面的方法操作就OK了。
下面是自己参考此文章之后测试的结果:
默认Redis程序安装在/usr/local/redis目录下;
配置文件:/usr/local/redis/redis.conf,该配置文件中配置的端口为默认端口:6379;
代码如下 | 复制代码 |
Redis的启动命令路径:/usr/local/bin/redis-server。 |
可以指定端口启动多个Redis进程。
代码如下 | 复制代码 |
#/usr/local/bin/redis-server --port 6380 & #启动6380端口的redis实例。 |
需要启动多个Redis实例:
一台Redis服务器,分成多个节点,每个节点分配一个端口(6380,6381…),默认端口是6379。
每个节点对应一个Redis配置文件,如: redis6380.conf、redis6381.conf
代码如下 | 复制代码 |
#cp redis.confredis6380.conf #vi redis6380.conf pidfile : pidfile/var/run/redis/redis_6380.pid port 6380 logfile : logfile/var/log/redis/redis_6380.log rdbfile : dbfilenamedump_6380.rdb |
(其他配置文件类似修改)
启动多个redis实例:
代码如下 | 复制代码 |
#redis-server/usr/local/redis/redis6380.conf #redis-server/usr/local/redis/redis6381.conf |