1. 程式人生 > >mac安裝redis3.0.5分散式叢集

mac安裝redis3.0.5分散式叢集

目錄

一、redis cluster介紹
二、redis cluster的使用
三、測試redis
四、編寫啟動指令碼

一、redis cluster介紹

  1. redis cluster的現狀
    1) 節點自動發現
    2) slave -> master選舉,叢集容錯
    3) Hot resharding 線上分片
    4) 叢集管理 cluster xxx
    5) 基於配置(nodes.conf)的叢集管理
    6) ASK轉向/MOVED轉向機制
  2. redis cluster架構
    1) redis-cluster架構圖

    • 架構細節:
      (1) 所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬.
      (2) 節點的fail是通過叢集中超過半數的節點檢測失效時才生效.
      (3) 客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可
      (4) redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護node<->slot<->value

    2) redis-cluster選舉,容錯

    • (1) 領著選舉過程是叢集中所有master參與,如果半數以上master節點與master節點通訊超過(cluster-node-timeout),認為當前master節點掛掉.
      (2) 什麼時候整個叢集不可用(cluster_state:fail),當叢集不可用時,所有對叢集的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤
      a: 如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成進群的slot對映[0-16383]不完成時進入fail狀態.
      b:如果進群超過半數以上master掛掉,無論是否有slave叢集進入fail狀態.

二、redis cluster的使用
要讓叢集正常工作至少需要3個主節點,在這裡我們要建立6個redis節點,其中三個為主節點,三個為從節點,對應的redis節點的ip和埠對應關係如下:

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
cd  /Users/duwei/software
tar xzvf redis-3.0.5.tar.gz

cd  /Users/duwei/software/redis-3.0.5
make install
  1. 建立叢集目錄
mkdir -p /Users/duwei/software/redisCluster
cd /Users/duwei/software/redisCluster
mkdir
7000 mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005
  1. 修改配置檔案redis.conf
    vi redis.conf
    修改配置檔案中的下面選項
port 7000 
daemonize yes 
cluster-enabled yes  
cluster-config-file nodes.conf 
cluster-node-timeout 5000 
appendonly yes  

修改完redis.conf配置檔案中的這些配置項之後把這個配置檔案分別拷貝到
7000/7001/7002/7003/7004/7005
目錄下面

cp /Users/duwei/software/redis-3.0.5/redis.conf   /Users/duwei/software/redisCluster/7000
cp /Users/duwei/software/redis-3.0.5/redis.conf   /Users/duwei/software/redisCluster/7001
cp /Users/duwei/software/redis-3.0.5/redis.conf   /Users/duwei/software/redisCluster/7002
cp /Users/duwei/software/redis-3.0.5/redis.conf   /Users/duwei/software/redisCluster/7003
cp /Users/duwei/software/redis-3.0.5/redis.conf   /Users/duwei/software/redisCluster/7004
cp /Users/duwei/software/redis-3.0.5/redis.conf   /Users/duwei/software/redisCluster/7005

注意:拷貝完成之後要修改7001/7002/7003/7004/7005目錄下面redis.conf檔案中的port引數,分別改為對應的資料夾的名稱
4. 分別啟動6個redis例項

cd /Users/duwei/software/redisCluster/7000
redis-server redis.conf
cd /Users/duwei/software/redisCluster/7001
redis-server redis.conf
cd /Users/duwei/software/redisCluster/7002
redis-server redis.conf
cd /Users/duwei/software/redisCluster/7003
redis-server redis.conf
cd /Users/duwei/software/redisCluster/7004
redis-server redis.conf
cd /Users/duwei/software/redisCluster/7005
redis-server redis.conf

啟動之後使用命令檢視redis的啟動情況
ps –ef|grep redis
如下顯示則說明啟動成功

➜  redis-3.0.5  ps -ef |grep redis
  501  1379     1   0 10:00上午 ??         0:09.64 /Users/duwei/software/redis-3.0.5/src/redis-server *:7000 [cluster]
  501  1381     1   0 10:00上午 ??         0:09.58 /Users/duwei/software/redis-3.0.5/src/redis-server *:7001 [cluster]
  501  1383     1   0 10:00上午 ??         0:09.68 /Users/duwei/software/redis-3.0.5/src/redis-server *:7002 [cluster]
  501  1385     1   0 10:00上午 ??         0:09.78 /Users/duwei/software/redis-3.0.5/src/redis-server *:7003 [cluster]
  501  1387     1   0 10:00上午 ??         0:09.63 /Users/duwei/software/redis-3.0.5/src/redis-server *:7004 [cluster]
  501  1389     1   0 10:00上午 ??         0:09.76 /Users/duwei/software/redis-3.0.5/src/redis-server *:7005 [cluster]
  1. 升級ruby安裝gem
    安裝gem需要ruby的版本在1.8.7以上,首先升級ruby
    檢視當前版本
rubyv
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]

符合要求
gem安裝redis ruby介面

gem install redis
  1. 執行redis的建立叢集命令
cd /Users/duwei/software/redis-3.0.5/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

至此redis叢集搭建成功!
三、測試redis

redis-cli -c -p 7001
•   ➜  redis-3.0.5  redis-cli -c -p 7001127.0.0.1:7001> set test 123
•   OK
•   127.0.0.1:7001> get test
•   "123"
127.0.0.1:7001>

四、編寫啟動指令碼

#!/bin/sh
source ~/.bash_profile
redispath=/Users/duwei/software/redis-3.0.5/src
redisClusterPath=/Users/duwei/software/redisCluster
returnValue=0
cd $redisClusterPath
pid=`ps -ef |grep -v "grep"|grep "redis-server" |awk '{print $2}'`

launcher(){
    $redispath/redis-server redis.conf
}
start(){
    cd ./7000
    launcher
    cd ../7001
    launcher
    cd ../7002
    launcher
    cd ../7003
    launcher
    cd ../7004
    launcher
    cd ../7005
    launcher
}
stop(){
    kill -9 ${pid}

}
case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    stop
    start
    ;;
hup)
    hup
    ;;
*)
    printf 'Usage: %s {start|stop|restart}\n'
    exit 1
    ;;
esac
exit "$returnValue"