redis實現單機運行多端口、多實例

redis 程序運行過程並不會消耗太多的 CPU 和 IO 資源(主要消耗memory),如是在單臺機器上若是隻啓用一個redis實例會形成資源浪費 。同時爲了增長可用性,通常也不會在單機上只運行一個redis實例,本篇就介紹下,如何在單上運行多個 redis 實例(運行在不一樣端口)。

1、redis-server的安裝 html

因爲我現網的機器使用的是ubuntu系統,因此這裏就以ubuntu爲例,能夠直接使用apt源安裝redis-server node

$ sudo apt-get install redis-server
安裝完成後,可使用dpkg命令查看各文件所在的路徑: redis

 代碼以下 複製代碼
$ 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 啓動。 ubuntu

2、運行多實例redis 服務器

默認的配置文件內容爲: app

 代碼以下 複製代碼
$ 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實例,監聽端口分別是637八、6376,只須要複製一份redis.conf配置文件並作下修改再經過redis-server啓動便可。 tcp

以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實例存放在不一樣的路徑。 ui

修改完配置文件,經過下面的命令就能夠啓動新的redis實例: lua

 代碼以下 複製代碼
# sudo /usr/bin/redis-server /etc/redis/redis6378.conf 

不過這時啓動後,經過ps命令查看會發現一個問題,原來的默認redis實例是以redis用戶啓動,而新的redis實例則會以root用啓動。

 代碼以下 複製代碼
yang@crunchbang:/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用戶運行的進程。想要再加637六、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

相關文章
相關標籤/搜索