Redis集羣安裝,註冊爲系統服務,開機啓動

1. 操做系統

CentOS 6.7html

2. 集羣部署準備工做

2.1. 先安裝Redis

詳細安裝過程,請參考上篇博客Redis單點安裝,註冊爲系統服務,開機啓動node

因爲虛擬機數量有限,我就在一臺虛擬機上部署了Redis集羣,只須要安裝一個Redis,複製出6份配置文件(三主三從),分別啓動,就可擁有6個Redis實例。下面進行詳細描述。redis

2.2. 目錄構建

2.2.1. Redis安裝目錄

/usr/local/redis/binshell

注:vim

       Redis自動安裝在/usr/local/bin目錄下,這裏手動將文件移動到了/usr/local/redis/bin目錄下。ruby

2.2.2. 建立cluster目錄,完成集羣目錄構建

$ 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

2.3. 配置文件

2.3.1. 配置文件修改

配置文件特別重要,在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集羣啓動的過程當中會自動生成。

2.3.2. 配置文件複製與內容替換

將此配置文件分別複製到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也是這樣操做,至此,準備工做已基本完畢。

3. 啓動

3.1. 依次啓動

$ 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

啓動過程當中,會有以下輸出:

3.2. 端口占用

查看端口占用狀況:

$ netstat -nltp

集羣中,每一個redis會佔用兩個端口,一個是自己設置的端口,如7000(用來服務客戶端),還有一個是在設置的端口上加10000,也就成了17000(用做集羣間nodes通訊:用來處理節點的失效檢測,配置更新,災備受權等事情,稱爲集羣總線)。

3.3. 完成集羣建立

3.3.1. 隨便鏈接一個node

會提示Hash slot尚未分配。

3.3.2. 使用redis-trib.rb完成集羣建立

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代表贊成上述配置。

至此集羣搭建完畢。

3.4. 最終目錄結構

再次說明,nodes.conf沒必要手動建立,集羣在啓動過程當中會自動建立。

4. 註冊爲系統服務,開機啓動

4.1. 改寫啓動腳本

此時,啓動與關閉集羣,須要對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裝在一臺機器上,因此這個腳本的實用性也不強,怪不得沒有找到^_^

4.2. 註冊爲系統服務

$ chkconfig --add redisc

啓動:service redisc start

關閉:service redisc stop

感受清爽多了。

注:

      只要在第一次使用redis-trib.rb,以後再啓動和關閉集羣就沒必要再使用了,由於Hash slot在初次就分配完成啦。

4.3. 開機啓動

$ chkconfig redisc on

4.4. 其餘說明

鏈接的時候隨便挑一個node便可,須要添加-c:

$ ./redis-cli -c -p 7000

使用:cluster info,cluster nodes能夠查看集羣狀態

4.5. 參考資料

http://www.redis.cn/topics/cluster-tutorial.html

http://www.cnblogs.com/mafly/p/redis_cluster.html

相關文章
相關標籤/搜索