CentOS 6.7html
詳細安裝過程,請參考上篇博客Redis單點安裝,註冊爲系統服務,開機啓動node
因爲虛擬機數量有限,我就在一臺虛擬機上部署了Redis集羣,只須要安裝一個Redis,複製出6份配置文件(三主三從),分別啓動,就可擁有6個Redis實例。下面進行詳細描述。redis
/usr/local/redis/binshell
注:vim
Redis自動安裝在/usr/local/bin目錄下,這裏手動將文件移動到了/usr/local/redis/bin目錄下。ruby
$ cd /usr/local/redis $ mkdir cluster
在cluster目錄中放置集羣,採用三主三從的模式,使用7000,7001,7002,7003,7004,7005端口,分別建立以端口號命名的目錄。bash
$ cd cluster $ mkdir 7000 7001 7002 7003 7004 7005
在每一個目錄下,建立data文件夾,用以存放數據,操做以下,以7000爲例,其餘相似。app
$ cd 7000 $ mkdir data
至此,目錄結構搭建完畢。spa
配置文件特別重要,在redis源碼自帶的redis.conf上修改操作系統
$ cp /usr/local/src/redis-4.0.1/redis.conf /usr/local/redis/cluster/7000/7000.conf
以7000須要的配置文件爲例:
$ cd /usr/local/redis/cluster/7000 $ vim 7000.conf
有幾處須要更改或取消註釋:
port 7000 daemonize yes pidfile /var/run/redis_7000.pid dir /usr/local/redis/cluster/7000/data appendonly yes cluster-enabled yes cluster-config-file /usr/local/redis/cluster/7000/nodes.conf cluster-node-timeout 15000
注:
nodes.conf不用手動建立,在redis集羣啓動的過程當中會自動生成。
將此配置文件分別複製到7001-7005的文件夾下:
$ cp 7000.conf ../7001/7001.conf $ cp 7000.conf ../7002/7002.conf $ cp 7000.conf ../7003/7003.conf $ cp 7000.conf ../7004/7004.conf $ cp 7000.conf ../7005/7005.conf
下面進行文本替換,以7001爲例:
$ cd ../7001 $ vim 7001.conf
:%s/7000/7001
7002-7005也是這樣操做,至此,準備工做已基本完畢。
$ cd /usr/local/redis $ bin/redis-server cluster/7000/7000.conf $ bin/redis-server cluster/7001/7001.conf $ bin/redis-server cluster/7002/7002.conf $ bin/redis-server cluster/7003/7003.conf $ bin/redis-server cluster/7004/7004.conf $ bin/redis-server cluster/7005/7005.conf
啓動過程當中,會有以下輸出:
查看端口占用狀況:
$ netstat -nltp
集羣中,每一個redis會佔用兩個端口,一個是自己設置的端口,如7000(用來服務客戶端),還有一個是在設置的端口上加10000,也就成了17000(用做集羣間nodes通訊:用來處理節點的失效檢測,配置更新,災備受權等事情,稱爲集羣總線)。
會提示Hash slot尚未分配。
redis-trib位於Redis源碼的src文件夾,它是一個Ruby程序,這個程序經過向實例發送特殊命令來完成建立新集羣,檢查集羣,或者對集羣進行從新分片(reshared)等工做。
先安裝所需的Ruby環境:
$ yum install ruby $ yum install rubygems $ gem install redis
使用redis-trib.rb建立:
$ cd /usr/local/src/redis-4.0.1/src $ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
注:
--replicas 1 表示爲集羣中的每一個主節點建立一個從節點
在建立的過程當中,須要手動寫入一次yes代表贊成上述配置。
至此集羣搭建完畢。
再次說明,nodes.conf沒必要手動建立,集羣在啓動過程當中會自動建立。
此時,啓動與關閉集羣,須要對6個實例逐一操做,十分麻煩,須要改寫啓動腳本。啓動腳本在源碼自帶的腳本上進行修改。能夠先參考上篇博客Redis單點安裝,註冊爲系統服務,開機啓動對腳本的說明。
$ cp /usr/local/src/redis-4.0.1/utils/redis_init_script /etc/init.d/redisc
重命名爲redisc表示是reidis cluster。
修改後的腳本爲:
#!/bin/sh # chkconfig: 2345 80 90 # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. REDISPORT0=7000 REDISPORT1=7001 REDISPORT2=7002 REDISPORT3=7003 REDISPORT4=7004 REDISPORT5=7005 EXEC=/usr/local/redis/bin/redis-server CLIEXEC=/usr/local/redis/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT0}.pid CONF0="/usr/local/redis/cluster/${REDISPORT0}/${REDISPORT0}.conf" CONF1="/usr/local/redis/cluster/${REDISPORT1}/${REDISPORT1}.conf" CONF2="/usr/local/redis/cluster/${REDISPORT2}/${REDISPORT2}.conf" CONF3="/usr/local/redis/cluster/${REDISPORT3}/${REDISPORT3}.conf" CONF4="/usr/local/redis/cluster/${REDISPORT4}/${REDISPORT4}.conf" CONF5="/usr/local/redis/cluster/${REDISPORT5}/${REDISPORT5}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis cluster server..." $EXEC $CONF0 & $EXEC $CONF1 & $EXEC $CONF2 & $EXEC $CONF3 & $EXEC $CONF4 & $EXEC $CONF5 & fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT0 shutdown $CLIEXEC -p $REDISPORT1 shutdown $CLIEXEC -p $REDISPORT2 shutdown $CLIEXEC -p $REDISPORT3 shutdown $CLIEXEC -p $REDISPORT4 shutdown $CLIEXEC -p $REDISPORT5 shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis cluster to shutdown ..." sleep 1 done echo "Redis cluster stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
注:
這塊在網上沒有找到參考資料(多是我沒有仔細找),以前也沒有寫過shell腳本,就按照自帶的腳本寫法作了一些修改。確定是不完善的,首先判斷條件就只看了7000,這點就不夠充足。若是有更好的腳本,請告知我。不過通常也不會把全部的Redis裝在一臺機器上,因此這個腳本的實用性也不強,怪不得沒有找到^_^
$ chkconfig --add redisc
啓動:service redisc start
關閉:service redisc stop
感受清爽多了。
注:
只要在第一次使用redis-trib.rb,以後再啓動和關閉集羣就沒必要再使用了,由於Hash slot在初次就分配完成啦。
$ chkconfig redisc on
鏈接的時候隨便挑一個node便可,須要添加-c:
$ ./redis-cli -c -p 7000
使用:cluster info,cluster nodes能夠查看集羣狀態